You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jdo-commits@db.apache.org by mb...@apache.org on 2005/05/22 20:40:21 UTC
svn commit: r171355 [17/31] - in /incubator/jdo/trunk/fostore20: ./ src/
src/conf/ src/java/ src/java/org/ src/java/org/apache/
src/java/org/apache/jdo/ src/java/org/apache/jdo/impl/
src/java/org/apache/jdo/impl/fostore/ test/ test/conf/ test/fsuid2/
test/fsuid2/org/ test/fsuid2/org/apache/ test/fsuid2/org/apache/jdo/
test/fsuid2/org/apache/jdo/pc/ test/java/ test/java/org/
test/java/org/apache/ test/java/org/apache/jdo/
test/java/org/apache/jdo/impl/ test/java/org/apache/jdo/impl/fostore/
test/java/org/apache/jdo/pc/ test/java/org/apache/jdo/pc/appid/
test/java/org/apache/jdo/pc/empdept/
test/java/org/apache/jdo/pc/serializable/
test/java/org/apache/jdo/pc/xempdept/ test/java/org/apache/jdo/test/
test/java/org/apache/jdo/test/query/ test/java/org/apache/jdo/test/util/
test/jdo/ test/jdo/org/ test/jdo/org/apache/ test/jdo/org/apache/jdo/
test/jdo/org/apache/jdo/pc/ test/jdo/org/apache/jdo/pc/appid/
test/jdo/org/apache/jdo/pc/empdept/ test/jdo/org/apache/jdo/pc/serializable/
test/jdo/org/apache/jdo/pc/xempdept/
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_EmpDeptAppIdInsert.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_EmpDeptAppIdInsert.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_EmpDeptAppIdInsert.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_EmpDeptAppIdInsert.java Sun May 22 11:40:13 2005
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import org.apache.jdo.test.util.JDORITestRunner;
+
+/**
+* Test a PC that inherits from another PC with an application identity.
+*
+* @author Marina Vatkina
+*/
+public class Test_EmpDeptAppIdInsert extends Test_EmpDeptAppId {
+
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_EmpDeptAppIdInsert.class);
+ }
+
+ /** */
+ public void test() throws Exception
+ {
+ insertObjects();
+ checkObjects();
+ }
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_EmpDeptAppIdUpdate.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_EmpDeptAppIdUpdate.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_EmpDeptAppIdUpdate.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_EmpDeptAppIdUpdate.java Sun May 22 11:40:13 2005
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import org.apache.jdo.test.util.JDORITestRunner;
+
+/**
+* Test a PC that inherits from another PC with an application identity.
+*
+* @author Marina Vatkina
+*/
+public class Test_EmpDeptAppIdUpdate extends Test_EmpDeptAppId {
+
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_EmpDeptAppIdUpdate.class);
+ }
+
+ /** */
+ public void test() throws Exception
+ {
+ updateObject();
+ checkObjects();
+ }
+
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_EmpDeptSerialization.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_EmpDeptSerialization.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_EmpDeptSerialization.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_EmpDeptSerialization.java Sun May 22 11:40:13 2005
@@ -0,0 +1,257 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Test_EmpDeptSerialization.java
+ *
+ * Created on June 29, 2001, 3:37 PM
+ */
+
+package org.apache.jdo.test;
+
+import java.util.*;
+import java.io.*;
+
+import javax.jdo.*;
+
+import org.apache.jdo.test.util.AbstractTest;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+import org.apache.jdo.impl.fostore.FOStorePMF;
+import org.apache.jdo.pc.empdept.PCDepartment;
+import org.apache.jdo.pc.empdept.PCEmployee;
+import org.apache.jdo.pc.empdept.PCFullTimeEmployee;
+import org.apache.jdo.pc.empdept.PCInsurance;
+import org.apache.jdo.pc.empdept.PCPartTimeEmployee;
+import org.apache.jdo.pc.empdept.PCProject;
+
+/** This class measures the difference between Serialization and JDO as a
+ * persistence strategy.
+ * Some number of instances are created, and then the test starts timing.
+ * First the objects are serialized; then a transaction is started, the
+ * objects are made persistent in JDO, and the transaction is committed.
+ *
+ * @author Craig Russell
+ * @version 1.0
+ */
+public class Test_EmpDeptSerialization extends AbstractTest {
+
+ ArrayList allObjects = new ArrayList();
+ PCEmployee scott;
+ PCEmployee ed;
+ PCInsurance scottIns;
+ PCInsurance edIns;
+ PCDepartment board;
+ PCDepartment emg;
+ PCProject solaris;
+ PCProject sparc;
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main (String args[]) {
+ switch (args.length) {
+ case 0:
+ JDORITestRunner.run(Test_EmpDeptSerialization.class);
+ break;
+ case 2:
+ runLocal(args[0], args[1]);
+ break;
+ default:
+ System.err.println ("usage: \nTest_EmpDeptSerialization <url> <file>\n\t<url>: the url for fostore\n\t<file>: the file name for serialization");
+ break;
+ }
+ }
+
+ /** */
+ public void test() throws Exception {
+ doTest("serialize.tmp");
+ }
+
+ /** Run the test. */
+ void doTest(String fileName) throws Exception {
+ createObjects();
+ long serializeTime = serializeObjects(fileName);
+ long fostoreTime = persistObjects();
+ }
+
+ /** */
+ void createObjects() {
+ HashSet h;
+
+ // Create and set up employees. Scott is Ed's manager. Ed is
+ // Scott's sole employee.
+ //
+ GregorianCalendar born =
+ new GregorianCalendar(TimeZone.getTimeZone("America/New_York"));
+ GregorianCalendar hired =
+ new GregorianCalendar(TimeZone.getTimeZone("America/New_York"));
+
+ born.set(1969, 7, 20);
+ hired.set(1982, 5, 5);
+ scott =
+ new PCFullTimeEmployee(
+ "Scott", "McNealy", born.getTime(),
+ 1L, hired.getTime(),
+ //null, null, null, null, null,
+ 200000.0);
+ born.set(1960, 4, 8);
+ hired.set(1985, 2, 3);
+ ed =
+ new PCPartTimeEmployee(
+ "Ed", "Zander", born.getTime(),
+ 100L, hired.getTime(),
+ //null, null, null, null, null,
+ 400.0);
+ allObjects.add(ed);
+ allObjects.add(scott);
+ ed.setManager(scott);
+
+ h = new HashSet();
+ h.add(ed);
+ scott.setEmployees(h);
+
+ // Set up their departments.
+ board =
+ new PCDepartment(100L, "board");
+ h = new HashSet();
+ h.add(scott);
+ board.setEmployees(h);
+ scott.setDepartment(board);
+
+ emg =
+ new PCDepartment(200L, "emg");
+ h = new HashSet();
+ h.add(ed);
+ emg.setEmployees(h);
+ ed.setDepartment(emg);
+
+ // Insure these guys
+ scottIns = new PCInsurance(1000, "Aetna", scott);
+ edIns = new PCInsurance(1001, "BlueCross", ed);
+ scott.setInsurance(scottIns);
+ ed.setInsurance(edIns);
+
+ // Give them some projects to work on. Scott works on both; Ed only
+ // on one.
+ solaris = new PCProject(1L, "Solaris");
+ sparc = new PCProject(2L, "Sparc");
+ h = new HashSet();
+ h.add(scott);
+ h.add(ed);
+ solaris.setEmployees(h); // Solaris is worked on by Scott and Ed
+
+ h = new HashSet();
+ h.add(scott);
+ sparc.setEmployees(h); // Sparc is worked on by Scott
+
+ h = new HashSet();
+ h.add(solaris);
+ h.add(sparc);
+ scott.setProjects(h); // Scott works on Solaris and Sparc
+
+ h = new HashSet();
+ h.add(solaris);
+ ed.setProjects(h); // Ed works on Solaris
+
+ // Show what we've got
+ if (debug) {
+ logger.debug("Before insert: ");
+ logger.debug(scott.toString());
+ logger.debug(ed.toString());
+ logger.debug(board.toString());
+ logger.debug(emg.toString());
+ logger.debug(scottIns.toString());
+ logger.debug(edIns.toString());
+ logger.debug(solaris.toString());
+ logger.debug(sparc.toString());
+ }
+ }
+
+ /** Insert objects into the database. If reachability were implemented, we'd
+ * only have to make scott and ed persistent, as everything else is
+ * reachable from them.
+ */
+ long persistObjects() {
+ Timer timer = new Timer();
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ tx.begin();
+ pm.makePersistentAll(allObjects);
+ tx.commit();
+ pm.close();
+ long elapsed = timer.stop();
+ if (debug) logger.debug ("FOStore results: \t" + elapsed);
+ return elapsed;
+ }
+
+ /** Write the objects to a file using serialization.
+ */
+ long serializeObjects(String fileName) throws IOException {
+ Timer timer = new Timer();
+ ObjectOutputStream oos = getObjectOutputStream(fileName);
+ oos.writeObject(allObjects);
+ oos.flush();
+ oos.close();
+ long elapsed = timer.stop();
+ if (debug) logger.debug ("Serialization results:\t" + elapsed);
+ return elapsed;
+ }
+
+ /** Timer utility class. Measures wall clock time.
+ */
+ static class Timer {
+ long startTime;
+ long stopTime;
+ Timer() {
+ startTime = new Date().getTime();
+ }
+
+ long stop() {
+ stopTime = new Date().getTime();
+ return (stopTime - startTime);
+ }
+
+ void start() {
+ startTime = new Date().getTime();
+ }
+ }
+
+ /** */
+ static void runLocal(String url, String file) {
+ try {
+ // create PMF
+ FOStorePMF pmf = new FOStorePMF();
+ pmf.setConnectionURL(url);
+ pmf.setConnectionUserName("craig");
+ pmf.setConnectionPassword("secret");
+ pmf.setConnectionCreate(true);
+
+ // create and setup test
+ Test_EmpDeptSerialization sm = new Test_EmpDeptSerialization();
+ sm.logger.debug("Test_EmpDeptSerialization using URL: " + url +
+ " FileName: " + file);
+ sm.pmf = pmf;
+ sm.debug = true;
+ sm.doTest(file);
+ sm.closePMF();
+ }
+ catch(Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Extent.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Extent.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Extent.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Extent.java Sun May 22 11:40:13 2005
@@ -0,0 +1,224 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import java.util.*;
+
+import javax.jdo.*;
+
+import org.apache.jdo.test.util.AbstractTest;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+import org.apache.jdo.test.util.Factory;
+
+/**
+* This test retrieves an extent-full of instances.
+*
+* @author Dave Bristor
+*/
+public class Test_Extent extends AbstractTest {
+ /** If true, get subclass instances too. */
+ private final boolean subclasses;
+
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_Extent.class);
+ }
+
+ /** */
+ public Test_Extent() {
+ super();
+ this.subclasses = Boolean.getBoolean("subclasses");
+ }
+
+ /** */
+ public void testOutsideTx() throws Exception {
+ insertObjects();
+ runOutsideTx();
+ }
+
+ /** */
+ public void testDatastoreTx() throws Exception {
+ insertObjects();
+ runInsideTx(false);
+ }
+
+ /** */
+ public void testOptimisticTx() throws Exception {
+ insertObjects();
+ runInsideTx(true);
+ }
+
+ /** */
+ public void testNewInstance() throws Exception {
+ insertObjects();
+ runNewInstance(false);
+ }
+
+ /** */
+ public void testNewInstanceIgnoreCache() throws Exception {
+ insertObjects();
+ runNewInstance(true);
+ }
+
+ /** */
+ public void testDeleteInstance() throws Exception {
+ insertObjects();
+ runDeleteInstance(false);
+ }
+
+ /** */
+ public void testDeleteInstanceIgnoreCache() throws Exception {
+ insertObjects();
+ runDeleteInstance(true);
+ }
+
+ /** */
+ protected void runOutsideTx() {
+ PersistenceManager pm = null;
+ try {
+ if (debug) logger.debug("getExtent outside of a transaction");
+ pm = pmf.getPersistenceManager();
+ getExtent(pm, factory.getPCClass(), numInsert);
+ }
+ finally {
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+
+ /** */
+ protected void runInsideTx(boolean optimistic) {
+ PersistenceManager pm = null;
+ Transaction tx = null;
+ try {
+ if (debug)
+ logger.debug("getExtent in " + (optimistic?"OPTIMISTIC":"DATASTORE") +
+ " Transaction");
+ pm = pmf.getPersistenceManager();
+ tx = pm.currentTransaction();
+ tx.setOptimistic(optimistic);
+ tx.begin();
+ getExtent(pm, factory.getPCClass(), numInsert);
+ tx.commit();
+ }
+ finally {
+ if (tx != null && tx.isActive())
+ tx.rollback();
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+
+ /** */
+ protected void runNewInstance(boolean ignoreCache) {
+ PersistenceManager pm = null;
+ Transaction tx = null;
+ try {
+ if (debug)
+ logger.debug("getExtent in with persistence-new instance and ignoreCache " + ignoreCache);
+ pm = pmf.getPersistenceManager();
+ pm.setIgnoreCache(ignoreCache);
+ tx = pm.currentTransaction();
+ tx.begin();
+ pm.makePersistent(factory.create(numInsert));
+ getExtent(pm, factory.getPCClass(), numInsert + 1);
+ tx.commit();
+ }
+ finally {
+ if (tx != null && tx.isActive())
+ tx.rollback();
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+
+ /** */
+ protected void runDeleteInstance(boolean ignoreCache) {
+ PersistenceManager pm = null;
+ Transaction tx = null;
+ try {
+ if (debug)
+ logger.debug("getExtent in with persistence-deleted instance and ignoreCache " + ignoreCache);
+ pm = pmf.getPersistenceManager();
+ pm.setIgnoreCache(ignoreCache);
+ tx = pm.currentTransaction();
+ tx.begin();
+ Object toBeDeleted = pm.getObjectById(oids.get(oids.size()-1), false);
+ if (debug) logger.debug("Now delete " + toBeDeleted);
+ pm.deletePersistent(toBeDeleted);
+ getExtent(pm, factory.getPCClass(), numInsert - 1);
+ tx.commit();
+ }
+ finally {
+ if (tx != null && tx.isActive())
+ tx.rollback();
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+
+ /** */
+ protected void getExtent(PersistenceManager pm,
+ Class clazz, int expectedCount) {
+ String className = clazz.getName();
+ if (debug) logger.debug("\nEXTENT of " + className);
+ Extent e = pm.getExtent(clazz, subclasses);
+
+ Map elements = new TreeMap();
+ for (Iterator i = e.iterator(); i.hasNext();) {
+ Object pc = i.next();
+ elements.put(JDOHelper.getObjectId(pc), pc);
+ }
+ int objCount = 0;
+ for (Iterator k = elements.values().iterator(); k.hasNext();) {
+ Object pc = k.next();
+ verify(objCount, pc);
+ if (debug) logger.debug(pc.toString());
+ objCount++;
+ }
+ if (debug)
+ logger.debug("extent of " + className + " has " + objCount +
+ " objects\n");
+ assertEquals("extent of " + className + " has wrong number of instances",
+ expectedCount, objCount);
+ }
+
+ /** */
+ protected Factory getFactory(int verify) {
+ return getFactoryByClassProperty(verify, "org.apache.jdo.pc.PCPoint");
+ }
+
+ /** */
+ protected int getDefaultInsert()
+ {
+ return 5;
+ }
+
+ /** */
+ protected int getDefaultVerify()
+ {
+ return 1;
+ }
+
+ /** */
+ protected void verify(int i, Object pc) {
+ assertEquals("Wrong instance type", factory.getPCClass(), pc.getClass());
+ super.verify(i, pc);
+ }
+
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_FSUID2.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_FSUID2.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_FSUID2.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_FSUID2.java Sun May 22 11:40:13 2005
@@ -0,0 +1,335 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.lang.reflect.Constructor;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+import javax.jdo.spi.PersistenceCapable;
+
+import org.apache.jdo.pc.PCPoint;
+import org.apache.jdo.test.util.AbstractTest;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+/**
+* Tests that we can insert, fetch, and get extent of instances of 2 distinct
+* classes which have the same name. For this test, they are both
+* org.apache.jdo.pc.PCPoint, but one of them has 2 coordinates and the
+* other has 3. We use our own ClassLoader to be able to load them both in
+* the same JVM.
+*
+* @author Dave Brigstor
+*/
+public class Test_FSUID2 extends AbstractTest {
+ /** Maps class names to classes. */
+ // This is only for use byt FSUIDLoader, but inner classes cannot have
+ // static members, so here it is.
+ private static final HashMap cache = new HashMap();
+
+ /** Name of the jarfile property. */
+ private static final String JARFILE_PROPERTY = "fsuidjar";
+
+ /** Default jarfile name, used if property is undefined. */
+ private static final String DEFAULT_JARFILE = "fsuid2.jar";
+
+ /** Name of the jar file for class loading. */
+ private String jarfile;
+
+ /** Reflection constructor instance for 3D point class. */
+ private Constructor p3Constructor;
+
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_FSUID2.class);
+ }
+
+ /** */
+ public Test_FSUID2() {
+ super();
+ jarfile = System.getProperty(JARFILE_PROPERTY, DEFAULT_JARFILE);
+ }
+
+ /** */
+ public void test() throws Exception {
+ insertObjects();
+ writeOIDs();
+ readObjects();
+ }
+
+ /**
+ * Create and store instances of PCPoint whose classes are loaded from
+ * different class loaders and have different structure (and hence
+ * different FOStoreSchemaUID's).
+ */
+ protected void insertObjects() throws Exception {
+ PersistenceManager pm = null;
+ Transaction tx = null;
+
+ try {
+ if (debug) logger.debug("\nINSERT");
+
+ pm = pmf.getPersistenceManager();
+ tx = pm.currentTransaction();
+ tx.begin();
+
+ // Get loader for and load class of 3-D point.
+ p3Constructor = get3DPointConstructor();
+
+ Object inserted1[] = new Object[numInsert];
+ Object inserted2[] = new Object[numInsert];
+ for (int i = 0; i < numInsert; i++) {
+ // create 2D point
+ Object pc = new PCPoint(i, new Integer(i));
+ if (debug)
+ logger.debug("cl " + i + " " + pc.getClass().getClassLoader());
+ pm.makePersistent(pc);
+ inserted1[i] = pc;
+
+ // create 3D point
+ pc = (PersistenceCapable)p3Constructor.newInstance(
+ new Object[] {
+ new Integer(i), new Integer(i), new Float(1.0 * i)});
+ if (debug)
+ logger.debug("cl " + i + " " + pc.getClass().getClassLoader());
+ pm.makePersistent(pc);
+ inserted2[i] = pc;
+ }
+
+ tx.commit();
+
+ for (int i = 0; i < numInsert; i++) {
+ announce("inserted ", inserted1[i]);
+ announce("inserted ", inserted2[i]);
+ }
+
+ if (debug) logger.debug("inserted " + insertedCount + " objects");
+ }
+ finally {
+ if (tx != null && tx.isActive())
+ tx.rollback();
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+
+ /**
+ * Loads and verifies the pc instances specified by the stored oids.
+ */
+ protected void readObjects() throws Exception {
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ ObjectInputStream in = getOIDFileInputStream();
+ tx.begin();
+ try {
+ int count = 0;
+ while (true) {
+ Object oid = in.readObject();
+ Object pc = pm.getObjectById(oid, true);
+ if (debug) logger.debug("fetching: " + oid + " -> " + pc);
+ // The first numInsert instances are supposed to be
+ // 2D points and the next are supposed to be 3D points.
+ if (count < numInsert)
+ verify2DPoint(count, pc);
+ else
+ verify3DPoint(count - numInsert, pc);
+ count++;
+ }
+ }
+ catch (EOFException ex) {
+ // OK
+ }
+ tx.commit();
+ }
+ finally {
+ if (tx != null && tx.isActive())
+ tx.rollback();
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+
+ /** */
+ private void verify2DPoint(int i, Object pc) {
+ Object expected = new PCPoint(i, new Integer(i));
+ assertEquals("Wrong 2D point instance", expected, pc);
+ }
+
+ /** */
+ private void verify3DPoint(int i, Object pc) throws Exception {
+ Object expected = p3Constructor.newInstance(new Object[] {
+ new Integer(i), new Integer(i), new Float(1.0 * i)});
+ assertEquals("Wrong 2D point instance", expected, pc);
+ }
+
+ /** */
+ protected int getDefaultInsert()
+ {
+ return 4;
+ }
+
+ private Constructor get3DPointConstructor() throws Exception {
+ try {
+ return (Constructor)AccessController.doPrivileged(
+ new PrivilegedExceptionAction () {
+ public Object run () throws Exception {
+ FSUIDLoader l = new FSUIDLoader(jarfile);
+ Class p3Class = l.loadClass("org.apache.jdo.pc.PCPoint", true);
+ return p3Class.getDeclaredConstructor(
+ new Class[] { int.class, Integer.class, float.class });
+ }});
+ }
+ catch (PrivilegedActionException ex) {
+ // unwrap FileNotFoundException
+ throw ex.getException();
+ }
+ }
+
+ /**
+ * Expects to load classes from within a specified jar file.
+ */
+ class FSUIDLoader extends ClassLoader {
+ /** Name of the jar file for class loading. */
+ private final String filename;
+
+ FSUIDLoader(String filename) {
+ this.filename = filename;
+ }
+
+ public InputStream getResourceAsStream(String name) {
+ if (!name.startsWith("org/apache/jdo/pc")) {
+ return getSystemResourceAsStream(name);
+ }
+
+ try {
+ JarFile jarFile = getJarFile();
+ JarEntry entry = jarFile.getJarEntry(name);
+ if (entry != null) {
+ return jarFile.getInputStream(entry);
+ }
+ }
+ catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ return null;
+ }
+
+ public synchronized Class loadClass(String name, boolean resolve)
+ throws ClassNotFoundException {
+
+ Class c = (Class)cache.get(name);
+
+ try {
+ if (null == c && ! name.startsWith("org.apache.jdo.pc")) {
+ try {
+ c = findSystemClass(name);
+ } catch (ClassNotFoundException ex) {
+ ;
+ } catch (NoClassDefFoundError ex) {
+ ;
+ }
+ }
+
+ if (null == c) {
+ byte b[] = loadClassData(name);
+ if (null == b) {
+ throw new NoClassDefFoundError(name);
+ }
+ c = defineClass(name, b, 0, b.length);
+ cache.put(name, c);
+ }
+ if (resolve) {
+ resolveClass(c);
+ }
+ } catch (NoClassDefFoundError ex) {
+ throw new ClassNotFoundException("loadClass " + name, ex);
+ }
+ return c;
+ }
+
+ private byte[] loadClassData(String name)
+ throws ClassNotFoundException {
+ byte rc[] = null;
+
+ // Class names in jar files have file separators...I hope they're
+ // the same on Un*x and Windows.
+ name = name.replace('.', '/') + ".class";
+ try {
+ JarFile jf = getJarFile();
+ for (Enumeration e = jf.entries(); e.hasMoreElements();) {
+ JarEntry je = (JarEntry)e.nextElement();
+ if (name.equals(je.getName())) {
+ InputStream is = jf.getInputStream(je);
+ int avail = is.available();
+ if (-1 != avail) {
+ int size = avail;
+ rc = new byte[size];
+ int off = 0;
+ int count = 0;
+ while (size > 0) {
+ count = is.read(rc, off, size);
+ if (count <= 0) {
+ is.close();
+ break;
+ }
+ off += count;
+ size -= count;
+ }
+ if (off != avail) {
+ throw new IOException(
+ "failed to read complete class " + name);
+ }
+ }
+ break;
+ }
+ }
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ throw new ClassNotFoundException("loadClassData " + name, ex);
+ }
+ return rc;
+ }
+
+ private JarFile getJarFile() throws IOException {
+ try {
+ return (JarFile)AccessController.doPrivileged(
+ new PrivilegedExceptionAction () {
+ public Object run () throws IOException {
+ return new JarFile(filename);
+ }});
+ }
+ catch (PrivilegedActionException ex) {
+ // unwrap FileNotFoundException
+ throw (IOException)ex.getException();
+ }
+ }
+
+ }
+
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Fetch.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Fetch.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Fetch.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Fetch.java Sun May 22 11:40:13 2005
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import org.apache.jdo.test.util.AbstractTest;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+import org.apache.jdo.test.util.Factory;
+import org.apache.jdo.pc.PointFactory;
+
+/**
+* This test is similar to Test_ActivateClass, but it adds extra steps of
+* getting OIDs for objects and later retrieving those objects.
+*
+* @author Dave Bristor
+*/
+public class Test_Fetch extends AbstractTest {
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_Fetch.class);
+ }
+
+ /** */
+ public void test() throws Exception {
+ insertObjects();
+ readObjects();
+ }
+
+ /** */
+ protected Factory getFactory(int verify) {
+ PointFactory rc = new PointFactory();
+ // verify in any case
+ rc.setVerify(verify);
+ return rc;
+ }
+
+ /** */
+ protected int getDefaultVerify() {
+ return 1;
+ }
+
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Fetch2.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Fetch2.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Fetch2.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Fetch2.java Sun May 22 11:40:13 2005
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import org.apache.jdo.test.util.JDORITestRunner;
+
+/**
+* This test is similar to Test_ActivateClass, but it adds extra steps of
+* getting OIDs for objects and later retrieving those objects. Unlike
+* TestFetch, this test inserts more objects.
+*
+* @author Dave Bristor
+*/
+public class Test_Fetch2 extends Test_Fetch {
+
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_Fetch2.class);
+ }
+
+ // The idea is that we're going to write a bunch of stuff to a data
+ // output stream, then read it back in; we should get the same data
+ // back.
+ public void test() throws Exception {
+ super.test();
+
+ insertObjects(); // Do another insertion.
+ readObjects();
+ }
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_FetchInserted.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_FetchInserted.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_FetchInserted.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_FetchInserted.java Sun May 22 11:40:13 2005
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import java.io.EOFException;
+import java.io.ObjectInputStream;
+
+import javax.jdo.JDOObjectNotFoundException;
+import javax.jdo.PersistenceManager;
+
+import org.apache.jdo.test.util.AbstractTest;
+import org.apache.jdo.test.util.Factory;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+
+/**
+* This test is similar to Test_ActivateClass, but it adds extra steps of
+* getting OIDs for objects and later retrieving those objects. Unlike
+* Test_Fetch and Test_Fetch2, this should be run in a separate JVM
+* <i>after</i> a first JVM has inserted some objects.
+*
+* Note that by default, this fetches inserted PCPoints...to test other kinds of
+* objects, use -Dclass=XXX on the java command line.
+*
+* @author Dave Bristor
+*/
+public class Test_FetchInserted extends AbstractTest {
+ /** By default, we expect that the instances for which we have oids should
+ * exist in the database. But if shouldExist is false, then we expect
+ * that they should not exist.
+ */
+ private final boolean shouldExist;
+
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_FetchInserted.class);
+ }
+
+ /** */
+ public Test_FetchInserted() {
+ super();
+ existing = true; // Must use existing database!
+ shouldExist = Boolean.getBoolean("shouldExist");
+ }
+
+ // The idea is that we're going to write a bunch of stuff to a data
+ // output stream, then read it back in; we should get the same data
+ // back.
+ public void test() throws Exception {
+ readObjects();
+ }
+
+ protected void readObjects() throws Exception {
+ PersistenceManager pm = pmf.getPersistenceManager();
+ try {
+ ObjectInputStream in = getOIDFileInputStream();
+ if (debug) logger.debug("\nFETCH");
+
+ int count = 0;
+ while (true) {
+ Object oid = null;
+ try {
+ oid = in.readObject();
+ if (debug) logger.debug("fetching: " + oid);
+ Object pc = pm.getObjectById(oid, true);
+ if (!shouldExist) {
+ fail("fetched " + oid +
+ " but it should not have been in database");
+ } else {
+ if (debug) logger.debug("After fetch: " + pc);
+ verify(count++, pc);
+ }
+ } catch (JDOObjectNotFoundException ex) {
+ if (shouldExist) {
+ fail("should find object with ObjectId " + oid + ": " + ex);
+ } else {
+ if (debug)
+ logger.debug(oid.toString() +
+ " does not exist in database, as expected");
+ }
+ }
+ }
+ } catch (EOFException ex) {
+ // OK
+ }
+ finally {
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+
+ /**
+ * Determines the kind of objects that are inserted. Override this if
+ * you want to insert some other kind of object.
+ */
+ protected Factory getFactory(int verify) {
+ return getFactoryByClassProperty(verify, "org.apache.jdo.pc.PCPoint");
+ }
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Freezer.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Freezer.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Freezer.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Freezer.java Sun May 22 11:40:13 2005
@@ -0,0 +1,221 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Test_Freezer.java
+ *
+ * Created on April 12, 2003, 4:15 PM
+ */
+
+package org.apache.jdo.test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.jdo.impl.sco.Freezer;
+
+import org.apache.jdo.test.util.AbstractTest;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+/**
+ *
+ * @author Craig Russell
+ * @version 1.0.1
+ */
+public class Test_Freezer extends AbstractTest {
+
+ /** */
+ static private final short s33 = 33;
+
+ /** */
+ private boolean verbose;
+
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_Freezer.class);
+ }
+
+ /** */
+ protected void setUp() { }
+
+ /** */
+ protected void tearDown() { }
+
+ /** */
+ public void testSet() {
+ Set ts = new HashSet();
+ ts.add(new Integer(12));
+ ts.add(new Integer(12));
+ ts.add(new Integer(12));
+ ts.add(new Integer(12));
+ ts.add(new java.util.Date(2000));
+ ts.add(new Float(2000));
+ ts.add(new Float(2020));
+ ts.add(new Float(2000.1));
+ ts.add(new Integer(112));
+ ts.add(new Integer(212));
+ ts.add(new Float(2000.001));
+ ts.add(new Float(2000.00001));
+ ts.add(new Short(s33));
+ ts.add(new Integer(2));
+ ts.add(new Long(3456789L));
+ ts.add(new java.util.Date(1000));
+ List expected = new ArrayList();
+ expected.add(new Float(2000));
+ expected.add(new Float(2000.001));
+ expected.add(new Float(2000.1));
+ expected.add(new Float(2020));
+ expected.add(new Integer(2));
+ expected.add(new Integer(12));
+ expected.add(new Integer(112));
+ expected.add(new Integer(212));
+ expected.add(new Long(3456789L));
+ expected.add(new Short(s33));
+ expected.add(new java.util.Date(1000));
+ expected.add(new java.util.Date(2000));
+
+ // now freeze the set
+ Object[] ordered = Freezer.freeze(ts, ts.size());
+ List al = Arrays.asList(ordered);
+ if (verbose)
+ for (Iterator it=al.iterator(); it.hasNext();) {
+ Object o = it.next();
+ System.out.println(o.getClass().getName() + ":" + o.toString());
+ }
+ assertEquals("freezing a Set returned unexpected result", expected, al);
+ }
+
+ /** */
+ public void testMap() {
+ Map hm = new HashMap();
+ hm.put(new Integer(22), new Integer(1000));
+ hm.put(new java.sql.Time(2004), new Integer(6));
+ hm.put(new Integer(22), new Integer(1000));
+ hm.put(new Integer(22), new Integer(1000));
+ hm.put(new Integer(22), new Integer(16));
+ hm.put(new java.sql.Date(2001), new Integer(2));
+ hm.put(new java.util.Date(2000), new Integer(1));
+ hm.put(new Float(2000.), new Integer(10));
+ hm.put(new Float(2020), new Integer(14));
+ hm.put(new org.apache.jdo.impl.sco.SqlTime(3000), new Integer(7));
+ hm.put(new java.sql.Date(2002), new Integer(3));
+ hm.put(new Float(2000.1), new Integer(13));
+ hm.put(new Integer(112), new Integer(17));
+ hm.put(new org.apache.jdo.impl.sco.SqlDate(3004), new Integer(5));
+ hm.put(new Integer(212), new Integer(18));
+ hm.put(new java.sql.Date(2003), new Integer(4));
+ hm.put(new Float(2000.001), new Integer(11));
+ hm.put(new Float(2000.01), new Integer(12));
+ hm.put(new java.sql.Timestamp(2004), new Integer(8));
+ hm.put(new org.apache.jdo.impl.sco.SqlTimestamp(3002), new Integer(9));
+ hm.put(new Short(s33), new Integer(20));
+ hm.put(new Integer(2), new Integer(15));
+ hm.put(new Long(3456789L), new Integer(19));
+ hm.put(new java.util.Date(1000), new Integer(0));
+
+ List expected = new ArrayList();
+ expected.add(new SimpleEntry(new Float(2000.), new Integer(10)));
+ expected.add(new SimpleEntry(new Float(2000.001), new Integer(11)));
+ expected.add(new SimpleEntry(new Float(2000.01), new Integer(12)));
+ expected.add(new SimpleEntry(new Float(2000.1), new Integer(13)));
+ expected.add(new SimpleEntry(new Float(2020), new Integer(14)));
+ expected.add(new SimpleEntry(new Integer(2), new Integer(15)));
+ expected.add(new SimpleEntry(new Integer(22), new Integer(16)));
+ expected.add(new SimpleEntry(new Integer(112), new Integer(17)));
+ expected.add(new SimpleEntry(new Integer(212), new Integer(18)));
+ expected.add(new SimpleEntry(new Long(3456789L), new Integer(19)));
+ expected.add(new SimpleEntry(new Short(s33), new Integer(20)));
+ expected.add(new SimpleEntry(new java.util.Date(1000), new Integer(0)));
+ expected.add(new SimpleEntry(new java.util.Date(2000), new Integer(1)));
+ expected.add(new SimpleEntry(new java.sql.Date(2001), new Integer(2)));
+ expected.add(new SimpleEntry(new java.sql.Date(2002), new Integer(3)));
+ expected.add(new SimpleEntry(new java.sql.Date(2003), new Integer(4)));
+ expected.add(new SimpleEntry(new org.apache.jdo.impl.sco.SqlDate(3004), new Integer(5)));
+ expected.add(new SimpleEntry(new java.sql.Time(2004), new Integer(6)));
+ expected.add(new SimpleEntry(new org.apache.jdo.impl.sco.SqlTime(3000), new Integer(7)));
+ expected.add(new SimpleEntry(new java.sql.Timestamp(2004), new Integer(8)));
+ expected.add(new SimpleEntry(new org.apache.jdo.impl.sco.SqlTimestamp(3002), new Integer(9)));
+
+ Object[] ordered = Freezer.freeze(hm, hm.size());
+ List al = Arrays.asList(ordered);
+ if (verbose)
+ for (Iterator it=al.iterator(); it.hasNext();) {
+ Map.Entry o = (Map.Entry)it.next();
+ Object key = o.getKey();
+ Object value = o.getValue();
+ System.out.println(" " + value + " " + key.getClass().getName() + ":" + key.toString());
+ }
+ assertEquals("freezing a Map returned unexpected result", expected, al);
+ }
+
+ /** */
+ static class SimpleEntry implements Map.Entry {
+ Object key;
+ Object value;
+
+ public SimpleEntry(Object key, Object value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ public SimpleEntry(Map.Entry e) {
+ this.key = e.getKey();
+ this.value = e.getValue();
+ }
+
+ public Object getKey() {
+ return key;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public Object setValue(Object value) {
+ Object oldValue = this.value;
+ this.value = value;
+ return oldValue;
+ }
+
+ public boolean equals(Object o) {
+ if (!(o instanceof Map.Entry))
+ return false;
+ Map.Entry e = (Map.Entry)o;
+ return eq(key, e.getKey()) && eq(value, e.getValue());
+ }
+
+ public int hashCode() {
+ Object v;
+ return ((key == null) ? 0 : key.hashCode()) ^
+ ((value == null) ? 0 : value.hashCode());
+ }
+
+ public String toString() {
+ return key + "=" + value;
+ }
+
+ private static boolean eq(Object o1, Object o2) {
+ return (o1 == null ? o2 == null : o1.equals(o2));
+ }
+ }
+
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_GetObjectById.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_GetObjectById.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_GetObjectById.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_GetObjectById.java Sun May 22 11:40:13 2005
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import javax.jdo.JDOUserException;
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.pc.PointFactory;
+import org.apache.jdo.test.util.AbstractTest;
+import org.apache.jdo.test.util.Factory;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+/**
+* This test is similar to Test_ActivateClass, but it adds extra steps of
+* getting OIDs for objects and later retrieving those objects.
+*
+* @author Dave Bristor
+*/
+public class Test_GetObjectById extends AbstractTest {
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_GetObjectById.class);
+ }
+
+ // The idea is that we're going to write a bunch of stuff to a data
+ // output stream, then read it back in; we should get the same data
+ // back.
+ public void test() throws Exception {
+ PersistenceManager pm = pmf.getPersistenceManager();
+ try {
+ Object o = new Object();
+ Object o2 = pm.getObjectById(o, false);
+ throw new RuntimeException("Expected exception not caught from getObjectById()");
+ } catch (JDOUserException ex) {
+ // this is expected
+ }
+ finally {
+ pm.close();
+ }
+
+ pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+
+ Object inserted[] = new Object[numInsert];
+ for (int i = 0; i < numInsert; i++) {
+ Object pc = factory.create(i);
+ pm.makePersistent(pc);
+ inserted[i] = pc;
+
+ Object oid = pm.getObjectId(pc);
+ Object obj = pm.getObjectById(oid, false);
+ announce("GetObjectId for " + oid + ", obj is " + obj + ", pc is ", pc);
+ assertSame(("object mismatch at " + i), pc, obj);
+ }
+
+ tx.commit();
+ }
+ finally {
+ if (tx != null && tx.isActive())
+ tx.rollback();
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+
+ protected Factory getFactory(int verify) {
+ PointFactory rc = new PointFactory();
+ rc.setVerify(verify);
+ return rc;
+ }
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_GetObjectById2.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_GetObjectById2.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_GetObjectById2.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_GetObjectById2.java Sun May 22 11:40:13 2005
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import java.io.EOFException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.ObjectInputStream;
+
+import javax.jdo.PersistenceManager;
+
+import org.apache.jdo.impl.fostore.FOStorePMF;
+import org.apache.jdo.test.util.AbstractTest;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+/**
+ * This is similar to Test_GetObjectById except that it is much simpler. It
+ * explicitly does not use any features inherited from AbstractTest other than
+ * creating an url and accessing system properties. It ensures that we can run
+ * a user application which does not explicitly load a PersistenceCapable class
+ * but can nonetheless fetch instances of that class by OID.
+ *
+ * @author Dave Bristor
+ */
+public class Test_GetObjectById2 extends AbstractTest {
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_GetObjectById2.class);
+ }
+
+ /** */
+ protected void setUp() { }
+
+ /** */
+ protected void tearDown() { }
+
+ /** */
+ public void test () throws Exception {
+ File f = new File(dbName + ".oid");
+ assertTrue("Test_GetObjectById2: " + dbName + ".oid does not exist", f.exists());
+
+ FOStorePMF pmf = new FOStorePMF();
+ pmf.setConnectionCreate(false);
+ pmf.setConnectionUserName(System.getProperty ("user", "fred"));
+ pmf.setConnectionPassword(System.getProperty ("password", "wombat"));
+
+ String url = createURL();
+ pmf.setConnectionURL(url);
+
+ PersistenceManager pm = pmf.getPersistenceManager();
+
+ try {
+ ObjectInputStream in = new ObjectInputStream(
+ new FileInputStream(f));
+ if (debug) System.out.println("\nFETCH");
+
+ int count = 0;
+ while (true) {
+ Object oid = in.readObject();
+ if (debug)
+ System.out.println("Test_GetObjectById2: getting object by id: " + oid);
+ Object pc = pm.getObjectById(oid, true);
+ if (debug)
+ System.out.println("After getObjectById: " + pc);
+ }
+ } catch (EOFException ex) {
+ // OK
+ }
+ finally {
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_HollowUpdate.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_HollowUpdate.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_HollowUpdate.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_HollowUpdate.java Sun May 22 11:40:13 2005
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.pc.PCPoint;
+import org.apache.jdo.pc.empdept.PCPerson;
+import org.apache.jdo.test.util.AbstractTest;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+/**
+* Tests that we can do update of a hollow instance in Optimistic transaction.
+*
+* @author Marina Vatkina
+*/
+public class Test_HollowUpdate extends AbstractTest {
+
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_HollowUpdate.class);
+ }
+
+ /** */
+ private static Date date;
+
+ /** */
+ static {
+ GregorianCalendar calendarDate =
+ new GregorianCalendar(TimeZone.getTimeZone("America/New_York"));
+ calendarDate.set(1969, 7, 20);
+ date = calendarDate.getTime();
+ }
+
+ /** */
+ public void testPCPoint() {
+ insertPCPoint();
+ checkExtent(PCPoint.class, 1);
+ }
+
+ /** */
+ public void testPCPerson() {
+ insertPCPerson();
+ checkExtent(PCPerson.class, 1);
+ }
+
+ /** */
+ private void insertPCPoint() {
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ if (debug) logger.debug("\nUPDATE HOLLOW");
+
+ tx.setRetainValues(false);
+ tx.setOptimistic(true);
+ PCPoint p = new PCPoint(0xaa, 0xcc);
+
+ tx.begin();
+ if (debug) logger.debug("Transaction begin OK");
+ pm.makePersistent(p);
+ if (debug) logger.debug("Make Persistent OK, p is " + p);
+ tx.commit();
+ if (debug) logger.debug("Transaction commit OK");
+
+ tx.begin();
+ if (debug) logger.debug("Transaction begin OK");
+ p.setY(new Integer(0xee));
+ Object oid = pm.getObjectId(p);
+ if (debug) logger.debug("Updated to " + p);
+ tx.commit(); tx = null;
+ if (debug) logger.debug("Transaction commit OK, p is " + p);
+ pm.close(); pm =null;
+
+ // check state of object in with pm
+ pm = pmf.getPersistenceManager();
+ tx = pm.currentTransaction();
+ tx.begin();
+ PCPoint p2 = (PCPoint)pm.getObjectById(oid, true);
+ assertEquals("Field y has wrong value", new Integer(0xee), p2.getY());
+ tx.commit();
+ }
+ finally {
+ if (tx != null && tx.isActive())
+ tx.rollback();
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+
+ /** */
+ public void insertPCPerson() {
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ if (debug) logger.debug("\nUPDATE HOLLOW");
+
+ tx.setRetainValues(false);
+ tx.setOptimistic(true);
+ PCPerson p = new PCPerson("FFFFFF", "LLLL", date);
+
+ tx.begin();
+ if (debug) logger.debug("Transaction begin OK");
+ pm.makePersistent(p);
+ if (debug) logger.debug("Make Persistent OK, p is " + p);
+ tx.commit();
+ if (debug) logger.debug("Transaction commit OK");
+
+ tx.begin();
+ if (debug) logger.debug("Transaction begin OK");
+ p.setLastname("xxxxxx");
+ Object oid = pm.getObjectId(p);
+ if (debug) logger.debug("Updated to " + p);
+ tx.commit(); tx = null;
+ if (debug) logger.debug("Transaction commit OK, p is " + p);
+ pm.close(); pm = null;
+
+ // check state of object in with pm
+ pm = pmf.getPersistenceManager();
+ tx = pm.currentTransaction();
+ tx.begin();
+ PCPerson p2 = (PCPerson)pm.getObjectById(oid, true);
+ assertEquals("Field lastname has wrong value", "xxxxxx", p2.getLastname());
+ tx.commit();
+ }
+ finally {
+ if (tx != null && tx.isActive())
+ tx.rollback();
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Inheritance.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Inheritance.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Inheritance.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Inheritance.java Sun May 22 11:40:13 2005
@@ -0,0 +1,166 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeSet;
+
+import javax.jdo.Extent;
+import javax.jdo.PersistenceManager;
+
+import org.apache.jdo.pc.empdept.PCDepartment;
+import org.apache.jdo.pc.empdept.PCEmployee;
+import org.apache.jdo.pc.empdept.PCFullTimeEmployee;
+import org.apache.jdo.pc.empdept.PCInsurance;
+import org.apache.jdo.pc.empdept.PCPartTimeEmployee;
+import org.apache.jdo.pc.empdept.PCProject;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+/**
+* Test a PC that has some fields which are PC's.
+*/
+public class Test_Inheritance extends EmpDeptSupport {
+
+ Map emps = new HashMap();
+ Map depts = new HashMap();
+ Map inss = new HashMap();
+ Map projs = new HashMap();
+
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_Inheritance.class);
+ }
+
+ // The idea is that we're going to write a bunch of stuff to a data
+ // output stream, then read it back in; we should get the same data
+ // back.
+ public void test() throws Exception
+ {
+ insertObjects();
+ getEmpExtent();
+ }
+
+ // The above test inserted a bunch of instances and committed them. We
+ // now try to load the extent of Employee and navigate to all associated
+ // instances.
+ protected void getEmpExtent() {
+ PersistenceManager pm = null;
+ try {
+ if (debug) logger.debug("\ngetEmpExtent");
+ pm = pmf.getPersistenceManager();
+ Extent extent;
+ Iterator it;
+ extent = pm.getExtent (PCEmployee.class, true);
+ it = extent.iterator();
+
+ // Put the printed version of each emp in the extent into a SortedSet
+ TreeSet sortedEmps = new TreeSet();
+
+ while (it.hasNext()) {
+ PCEmployee e = (PCEmployee)it.next();
+ sortedEmps.add("from extent of PCEmployee: " + e);
+ checkEmployee(e);
+ }
+
+ // Print out the extent in sorted order
+ if (debug)
+ for (Iterator i = sortedEmps.iterator(); i.hasNext();) {
+ logger.debug((String)i.next());
+ }
+
+ PCFullTimeEmployee scott = (PCFullTimeEmployee) emps.get (new Long (1L));
+ PCPartTimeEmployee ed = (PCPartTimeEmployee) emps.get (new Long (100L));
+ PCDepartment board = (PCDepartment) depts.get (new Long (100L));
+ PCDepartment emg = (PCDepartment) depts.get (new Long (200L));
+ PCInsurance scottIns = (PCInsurance) inss.get (new Long (1000L));
+ PCInsurance edIns = (PCInsurance) inss.get (new Long (1001L));
+ PCProject solaris = (PCProject) projs.get (new Long (1L));
+ PCProject sparc = (PCProject) projs.get (new Long (2L));
+
+ String repr = null;
+ repr = scott.toString();
+ if (debug) logger.debug(repr);
+ assertEquals("Wrong string representation of scott",
+ "PCFullTimeEmployee: PCEmployee: PCPerson: McNealy, Scott, born 20/Aug/1969, id=1, hired 5/Jun/1982 manager: none dept: board emps: 1 insurance: Aetna $200000.0",
+ repr);
+ repr = ed.toString();
+ if (debug) logger.debug(repr);
+ assertEquals("Wrong string representation of ed",
+ "PCPartTimeEmployee: PCEmployee: PCPerson: Zander, Ed, born 8/May/1960, id=100, hired 3/Mar/1985 manager: McNealy dept: emg emps: 0 insurance: BlueCross $400000.0",
+ repr);
+ repr = board.toString();
+ if (debug) logger.debug(repr);
+ assertEquals("Wrong string representation of board",
+ "Dept: board, id=100, emps: 1",
+ repr);
+ repr = emg.toString();
+ if (debug) logger.debug(repr);
+ assertEquals("Wrong string representation of emg",
+ "Dept: emg, id=200, emps: 1",
+ repr);
+ repr = scottIns.toString();
+ if (debug) logger.debug(repr);
+ assertEquals("Wrong string representation of scotts insurance",
+ "Ins: Aetna, id=1000, emp McNealy",
+ repr);
+ repr = edIns.toString();
+ if (debug) logger.debug(repr);
+ assertEquals("Wrong string representation of eds insurance",
+ "Ins: BlueCross, id=1001, emp Zander",
+ repr);
+ repr = solaris.toString();
+ if (debug) logger.debug(repr);
+ assertEquals("Wrong string representation of project solaris",
+ "PCProject: Solaris, id=1, emps: 2",
+ repr);
+ repr = sparc.toString();
+ if (debug) logger.debug(repr);
+ assertEquals("Wrong string representation of project sparc",
+ "PCProject: Sparc, id=2, emps: 1",
+ repr);
+ }
+ finally {
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+
+ protected void checkEmployee (PCEmployee e) {
+ emps.put (new Long(e.getEmpid()), e);
+ for (Iterator it = e.getProjects().iterator(); it.hasNext();) {
+ PCProject proj = (PCProject)it.next();
+ checkProject (proj);
+ }
+ checkDepartment ((PCDepartment) e.getDepartment());
+ checkInsurance ((PCInsurance) e.getInsurance());
+ }
+
+ protected void checkDepartment (PCDepartment d) {
+ depts.put (new Long(d.getDeptid()), d);
+ }
+
+ protected void checkProject (PCProject p) {
+ projs.put (new Long(p.getProjid()), p);
+ }
+
+ protected void checkInsurance (PCInsurance i) {
+ inss.put (new Long(i.getInsid()), i);
+ }
+
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Insert.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Insert.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Insert.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Insert.java Sun May 22 11:40:13 2005
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import org.apache.jdo.pc.PointFactory;
+import org.apache.jdo.test.util.AbstractTest;
+import org.apache.jdo.test.util.Factory;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+/**
+* Tests that we can insert objects into a database. Creates objects as per
+* Test_ActivateClass, and writes their OIDs into a file.
+* Test_FetchInserted reads that file, and fetches the objects by OID.
+*
+* @author Dave Bristor
+*/
+public class Test_Insert extends AbstractTest {
+
+ /** */
+ private static boolean silent = false;
+
+ /** */
+ public static void main(String args[]) {
+ handleArgs(args);
+ if (silent)
+ runSilentInsert();
+ else
+ JDORITestRunner.run(Test_Insert.class);
+ }
+
+ /** Write the OIDs of the objects that were inserted to a file dbName.oid.
+ */
+ public void test() throws Exception
+ {
+ insertObjects();
+ checkExtent(factory.getPCClass(), numInsert);
+ writeOIDs();
+ }
+
+ /** */
+ protected Factory getFactory(int verify) {
+ PointFactory rc = new PointFactory();
+ rc.setVerify(verify);
+ return rc;
+ }
+
+ /** */
+ private static void runSilentInsert() {
+ try {
+ Test_Insert insert = new Test_Insert();
+ insert.setupPMF();
+ insert.test();
+ insert.closePMF();
+ }
+ catch (Exception ex) {
+ System.out.println("Excetion during insert");
+ ex.printStackTrace();
+ }
+ }
+
+ /** */
+ private static void handleArgs(String[] args) {
+ for (int i = 0; i < args.length; i++) {
+ if ("-silent".equals(args[i]))
+ silent = true;
+ else
+ System.err.println("Test_Insert: ignoring unknon option" + args[i]);
+ }
+ }
+
+}
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Insert2.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Insert2.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Insert2.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Insert2.java Sun May 22 11:40:13 2005
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import javax.jdo.JDOException;
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.pc.PCPoint;
+import org.apache.jdo.pc.PointFactory;
+import org.apache.jdo.test.util.AbstractTest;
+import org.apache.jdo.test.util.Factory;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+/**
+* Tests that we can rollback an insert and commit the same insert in the
+* next transaction.
+*
+* @author Marina Vatkina
+*/
+public class Test_Insert2 extends AbstractTest {
+
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_Insert2.class);
+ }
+
+ /** */
+ public void test() throws Exception {
+ insertObjects();
+ checkExtent(factory.getPCClass(), 1);
+ readObjects();
+ }
+
+ /** Tries to insert an object rolled back in a previous tx. */
+ protected void insertObjects() throws Exception {
+ PersistenceManager pm = null;
+ Transaction tx = null;
+ try {
+ if (debug) logger.debug("\nINSERT-ROLLBACK-INSERT-COMMIT");
+ pm = pmf.getPersistenceManager();
+ tx = pm.currentTransaction();
+ PCPoint p = new PCPoint(11, 111);
+ tx.begin();
+ if (debug) logger.debug("Transaction begin OK");
+ pm.makePersistent(p);
+ if (debug) logger.debug("Make Persistent OK");
+ tx.rollback();
+ if (debug) logger.debug("Transaction rollback OK");
+
+ tx.begin();
+ if (debug) logger.debug("Transaction begin OK");
+ pm.makePersistent(p);
+ if (debug) logger.debug("Make Persistent OK");
+
+ // This try-catch block is usefull for internal testing only.
+ // It should not affect this test in a regular test runs.
+ try {
+ tx.commit();
+ if (debug) logger.debug("Transaction commit OK");
+ } catch (JDOException e) {
+ if (debug) logger.debug("Transaction active: " + tx.isActive());
+ throw e;
+ }
+ announce("inserted ", p);
+ }
+ finally {
+ if (tx != null && tx.isActive())
+ tx.rollback();
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+
+ /** */
+ protected Factory getFactory(int verify) {
+ PointFactory rc = new PointFactory();
+ rc.setVerify(verify);
+ return rc;
+ }
+
+ /** */
+ protected void verify(int i, Object pc) {
+ assertEquals("wrong PCPoint instance", new PCPoint(11, 111), pc);
+ }
+
+}
+
Added: incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Interfaces.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Interfaces.java?rev=171355&view=auto
==============================================================================
--- incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Interfaces.java (added)
+++ incubator/jdo/trunk/fostore20/test/java/org/apache/jdo/test/Test_Interfaces.java Sun May 22 11:40:13 2005
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jdo.test;
+
+import javax.jdo.JDOHelper;
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.pc.PCInterfaces;
+import org.apache.jdo.test.util.JDORITestRunner;
+
+/**
+* Tests that arrays can be stored in the datastore.
+*
+* @author Dave Bristor
+*/
+public class Test_Interfaces extends Test_Fetch {
+
+ /** */
+ public static void main(String args[]) {
+ JDORITestRunner.run(Test_Interfaces.class);
+ }
+
+ /** */
+ public void test() throws Exception {
+ insertObjects();
+ readObjects();
+ checkExtent(PCInterfaces.class, 1);
+ }
+
+ // We override this from Test_Fetch and insert our own objects
+ protected void insertObjects() {
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+ PCInterfaces pcInterfaces = new PCInterfaces();
+ pcInterfaces.init();
+ if (debug) logger.debug("Before insert: " + pcInterfaces);
+ pm.makePersistent(pcInterfaces);
+ tx.commit();
+
+ Object oid1 = JDOHelper.getObjectId(pcInterfaces);
+ if (debug) logger.debug("inserted pcInterfaces: " + oid1);
+ oids.add(oid1);
+ }
+ finally {
+ if (tx != null && tx.isActive())
+ tx.rollback();
+ if (pm != null && !pm.isClosed())
+ pm.close();
+ }
+ }
+
+ /**
+ * redefine verify called by readObjects to check whether the read
+ * instance is correct.
+ */
+ protected void verify(int i, Object pc) {
+ if (i > 0)
+ fail("Wrong number of inserted objects, expected only one");
+ PCInterfaces expected = new PCInterfaces();
+ expected.init();
+ assertEquals("Wrong instance returned from datastore", expected, pc);
+ }
+}