Apache JDO Project - Patch for JIRA JDO-13

This is Interesting: Free IT Magazines  
Home > Archive > Apache JDO Project > June 2005 > Patch for JIRA JDO-13





You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

Author Patch for JIRA JDO-13
Michael Watzek

2005-06-08, 7:45 am

Hi,

please find the patch for JIRA JDO-13 attached. I ran the TCK including
this patch and including the changes checked in by Michelle yesterday:

Datastore identity:
Tests run: 345, Failures: 12, Errors: 78 (783 seconds)

Application identity:
Tests run: 345, Failures: 12, Errors: 79 (745 seconds)

This is a big performance improvement! Before setting
"org.jpox.autoStartMechanism=None" each TCK run took about 6000 seconds.

Thanks,
Michael

Below, I listed the changes of this patch:

0) schema1.sql
0.1) The PK constraint name "ICNP_PK" of table "STATETRANSITIONOBJ" is
changed. This constraint name existed already.

1) PMsCanSharePCClassesButNotPCInstances.java
1.1) Method "test" is split into two methods "testSharedPC()" and
"testNonSharedPC()".
1.2) A check for uncaught exceptions is added causing a test to fail or
throw a JDOFatalException in case of failures or errors. Without this
check both tests would always succeed, even if there are failures and/or
errors.
1.3) The call for increasing the counter for thread synchronization is
moved into a finally block.
1.4) The call "pm.getExtent" is executed inside a transaction due to
non-transactional read exception.

2) StateTransitionObj.java
2.1) A private static field "counter" is added.
2.2) A private field "id" is added. This is the PK field in case of
application identity.
2.3) The no-arg constructor sets field "id to "++counter".
2.4) The second constructor calls "this()";
2.5) Getter/setter for field "id" are added.
2.6) A public static class "Oid" is added. This class is the object id
class in case of application identity.

3) alltests.list
3.1) Class "PMsCanSharePCClassesButNotPCInstances" is added.

4) StateTransitionObj.jdo (for application identity)
4.1) An attribute "objectid-class" is added to class "StateTransitionObj".


--
-------------------------------------------------------------------
Michael Watzek Tech@Spree Engineering GmbH
mailto:mwa.tech@spree.de Buelowstr. 66
Tel.: ++49/30/235 520 36 10783 Berlin - Germany
Fax.: ++49/30/217 520 12 http://www.spree.de/
-------------------------------------------------------------------

Michelle Caisse

2005-06-08, 5:45 pm

I have checked in this patch. Thank you! -- Michelle

Michael Watzek wrote:

> Hi,
>
> please find the patch for JIRA JDO-13 attached. I ran the TCK
> including this patch and including the changes checked in by Michelle
> yesterday:
>
> Datastore identity:
> Tests run: 345, Failures: 12, Errors: 78 (783 seconds)
>
> Application identity:
> Tests run: 345, Failures: 12, Errors: 79 (745 seconds)
>
> This is a big performance improvement! Before setting
> "org.jpox.autoStartMechanism=None" each TCK run took about 6000 seconds.
>
> Thanks,
> Michael
>
> Below, I listed the changes of this patch:
>
> 0) schema1.sql
> 0.1) The PK constraint name "ICNP_PK" of table "STATETRANSITIONOBJ" is
> changed. This constraint name existed already.
>
> 1) PMsCanSharePCClassesButNotPCInstances.java
> 1.1) Method "test" is split into two methods "testSharedPC()" and
> "testNonSharedPC()".
> 1.2) A check for uncaught exceptions is added causing a test to fail
> or throw a JDOFatalException in case of failures or errors. Without
> this check both tests would always succeed, even if there are failures
> and/or errors.
> 1.3) The call for increasing the counter for thread synchronization is
> moved into a finally block.
> 1.4) The call "pm.getExtent" is executed inside a transaction due to
> non-transactional read exception.
>
> 2) StateTransitionObj.java
> 2.1) A private static field "counter" is added.
> 2.2) A private field "id" is added. This is the PK field in case of
> application identity.
> 2.3) The no-arg constructor sets field "id to "++counter".
> 2.4) The second constructor calls "this()";
> 2.5) Getter/setter for field "id" are added.
> 2.6) A public static class "Oid" is added. This class is the object id
> class in case of application identity.
>
> 3) alltests.list
> 3.1) Class "PMsCanSharePCClassesButNotPCInstances" is added.
>
> 4) StateTransitionObj.jdo (for application identity)
> 4.1) An attribute "objectid-class" is added to class
> "StateTransitionObj".
>
>
>------------------------------------------------------------------------
>
>Index: test/sql/derby/schema1.sql
> ========================================
===========================
>--- test/sql/derby/schema1.sql (revision 189565)
>+++ test/sql/derby/schema1.sql (working copy)
>@@ -7082,7 +7082,7 @@
> CREATE TABLE STATETRANSITIONOBJ (
> ID INTEGER NOT NULL,
> INT_FIELD INTEGER NOT NULL,
>- CONSTRAINT ICNP_PK PRIMARY KEY (ID)
>+ CONSTRAINT STOBJ_PK PRIMARY KEY (ID)
> );
>
> disconnect;
>Index: test/java/org/apache/jdo/tck/lifecycle/PMsCanSharePCClassesButNotPCInstances.java
> ========================================
===========================
>--- test/java/org/apache/jdo/tck/lifecycle/PMsCanSharePCClassesButNotPCInstances.java (revision 189565)
>+++ test/java/org/apache/jdo/tck/lifecycle/PMsCanSharePCClassesButNotPCInstances.java (working copy)
>@@ -16,9 +16,20 @@
>
> package org.apache.jdo.tck.lifecycle;
>
>-import java.util.*;
>-import javax.jdo.*;
>+import java.util.Collection;
>+import java.util.Iterator;
>+import java.util.Map;
>
>+import javax.jdo.Extent;
>+import javax.jdo.JDOException;
>+import javax.jdo.JDOFatalException;
>+import javax.jdo.JDOHelper;
>+import javax.jdo.PersistenceManager;
>+import javax.jdo.PersistenceManagerFactory;
>+import javax.jdo.Transaction;
>+
>+import junit.framework.AssertionFailedError;
>+
> import org.apache.jdo.tck.JDO_Test;
> import org.apache.jdo.tck.pc.lifecycle.StateTransitionObj;
> import org.apache.jdo.tck.util.BatchTestRunner;
>@@ -74,14 +85,16 @@
> addTearDownClass(StateTransitionObj.class);
> }
>
>- public void test() {
>+ public void testSharedPC() {
> // test shared PC - only one PM should succeed to insert the shared PC
> threads = 0;
> attempts = 0;
> insertedCount = 0;
> insertedCountExpected = 1;
> insertObjects(true);
>-
>+ }
>+
>+ public void testNonSharedPC() {
> // test non-shared PCs - each PM should succeed to insert its own non-shared PC
> threads = 0;
> attempts = 0;
>@@ -125,6 +138,19 @@
> logger.debug("interrupted while waiting for threads to finish");
> }
> }
>+
>+ Collection exceptions = threadGroup.getAllUncaughtExceptions();
>+ for (Iterator i = exceptions.iterator(); i.hasNext(); ) {
>+ Map.Entry entry = (Map.Entry) i.next();
>+ Thread thread = (Thread)entry.getKey();
>+ Throwable throwable = (Throwable)entry.getValue();
>+ String message = "Uncaught exception " + throwable + " in thread " + thread;
>+ if( throwable instanceof AssertionFailedError )
>+ fail(ASSERTION_FAILED, message);
>+ else
>+ throw new JDOFatalException(message, throwable);
>+ }
>+
> }
>
> synchronized void signal() {
>@@ -176,10 +202,10 @@
> throw ex;
> }
> finally {
>+ incrAttempts();
> if (tx != null && tx.isActive())
> tx.rollback();
> }
>- incrAttempts();
>
> while (!attemptsComplete()) {
> try {
>@@ -201,11 +227,13 @@
> int objCount = 0;
> if (debug)
> logger.debug("getting Extent of " + instanceClass.getName());
>+ tx.begin();
> Extent e = pm.getExtent(instanceClass, false);
> for (Iterator i = e.iterator(); i.hasNext();) {
> Object instance = (Object)i.next();
> objCount++;
> }
>+ tx.commit();
>
> //Verify that the number of inserted objects matches the number of objects in the extent
> if (insertedCount!=objCount)
>Index: test/java/org/apache/jdo/tck/pc/lifecycle/StateTransitionObj.java
> ========================================
===========================
>--- test/java/org/apache/jdo/tck/pc/lifecycle/StateTransitionObj.java (revision 189565)
>+++ test/java/org/apache/jdo/tck/pc/lifecycle/StateTransitionObj.java (working copy)
>@@ -17,16 +17,23 @@
>
> package org.apache.jdo.tck.pc.lifecycle;
>
>+import java.io.Serializable;
>+
> public class StateTransitionObj {
>+ private static int counter = 0;
>+
>+ private int id;
> private int int_field;
> private transient int nonmanaged_field;
>
> public StateTransitionObj()
> {
>+ id = ++counter;
> int_field = 0;
> }
> public StateTransitionObj(int v)
> {
>+ this();
> int_field = v;
> }
> public int readField()
>@@ -46,4 +53,73 @@
> {
> nonmanaged_field = value;
> }
>+ /**
>+ * @return Returns the id.
>+ */
>+ public int getId() {
>+ return id;
>+ }
>+ /**
>+ * @param id The id to set.
>+ */
>+ public void setId(int id) {
>+ this.id = id;
>+ }
>+
>+ /**
>+ * The class to be used as the application identifier
>+ * for the <code>StateTransitionObj</code> class.
>+ */
>+ public static class Oid implements Serializable, Comparable {
>+
>+ /**
>+ * This field is part of the identifier and should match in name
>+ * and type with a field in the <code>StateTransitionObj</code> class.
>+ */
>+ public int id;
>+
>+ /** The required public no-arg constructor. */
>+ public Oid() { }
>+
>+ /**
>+ * Initialize the identifier.
>+ * @param companyid The id of the company.
>+ */
>+ public Oid(int id) {
>+ this.id = id;
>+ }
>+
>+ public Oid(String s) { id = Integer.parseInt(justTheId(s)); }
>+
>+ public String toString() { return this.getClass().getName() + ": " + id;}
>+
>+
>+ /** */
>+ public boolean equals(Object obj) {
>+ if (obj==null || !this.getClass().equals(obj.getClass()))
>+ return false;
>+ Oid o = (Oid) obj;
>+ if (this.id != o.id)
>+ return false;
>+ return true;
>+ }
>+
>+ /** */
>+ public int hashCode() {
>+ return id;
>+ }
>+
>+ protected static String justTheId(String str) {
>+ return str.substring(str.indexOf(':') + 1);
>+ }
>+
>+ /** */
>+ public int compareTo(Object obj) {
>+ // may throw ClassCastException which the user must handle
>+ Oid other = (Oid) obj;
>+ return id - other.id;
>+ }
>+
>+ }
>+
> }
>Index: test/conf/alltests.list
> ========================================
===========================
>--- test/conf/alltests.list (revision 189565)
>+++ test/conf/alltests.list (working copy)
>@@ -171,6 +171,7 @@
> org.apache.jdo.tck.lifecycle. MultiplePMsReturnInstancesRepresentingSa
mePC \
> org.apache.jdo.tck.lifecycle. ObjectIdNotModifiedWhenObjectIdInstanceM
odified \
> org.apache.jdo.tck.lifecycle. PMReturnsIdenticalInstancesForEqualObjId
s \
>+org.apache.jdo.tck.lifecycle.PMsCanSharePCClassesButNotPCInstances \
> org.apache.jdo.tck.lifecycle.StateTransitions \
> org.apache.jdo.tck.lifecycle.TransientTransactionalStateCommit \
> org.apache.jdo.tck.lifecycle.TransientTransactionalStateRollback \
>Index: test/jdo/applicationidentity/org/apache/jdo/tck/pc/lifecycle/StateTransitionObj.jdo
> ========================================
===========================
>--- test/jdo/applicationidentity/org/apache/jdo/tck/pc/lifecycle/StateTransitionObj.jdo (revision 189565)
>+++ test/jdo/applicationidentity/org/apache/jdo/tck/pc/lifecycle/StateTransitionObj.jdo (working copy)
>@@ -3,8 +3,10 @@
> <jdo>
> <package name="org.apache.jdo.tck.pc.lifecycle">
>
>- <class name="StateTransitionObj" identity-type="application">
>- <field name="int_field" primary-key="true"/>
>- </class>
>+ <class name="StateTransitionObj"
>+ identity-type="application"
>+ objectid-class="org.apache.jdo.tck.pc.lifecycle.StateTransitionObj$Oid">
>+ <field name="id" primary-key="true"/>
>+ </class>
> </package>
> </jdo>
>
>



Sponsored Links






Free braindumps | Software forum | Database administration forum

Copyright 2003 - 2008 webservertalk.com