I think you should just start from a much smaller class
(one or two fields), and identify which field(s) causes the
problem.



Thomas


-----Original Message-----
>From: Jamal Jackson [mailto:[EMAIL PROTECTED]]
>Sent: Friday, April 26, 2002 1:33 PM
>To: [EMAIL PROTECTED]
>Subject: [castor-dev] Long Transaction still giving ObjectModifiedExce
ption
>
>Does anyone out there have any ideas as to why I am having so many problems
>doing something that should be very straight forward?
>
>Any and all help is GREATLY, GREATLY appreciated.
>
>-----Original Message-----
>From: Jamal Jackson
>Sent: Friday, April 19, 2002 4:54 PM
>To: '[EMAIL PROTECTED]'
>Subject: RE: [castor-dev] Long Transaction still giving
>ObjectModifiedExce ption
>
>
>Thanks for the note.  I haven't set my object variables to anything yet,
>including  "" .  So I imagine that the ones that were null from when I
>loaded the object are still null
>
>-----Original Message-----
>From: Ebersole, Steven [mailto:[EMAIL PROTECTED]]
>Sent: Friday, April 19, 2002 11:38 AM
>To: [EMAIL PROTECTED]
>Subject: Re: [castor-dev] Long Transaction still giving
>ObjectModifiedExce ption
>
>
>Do not know if this is the cause of your problem or not, but we ran into a
>similar issue using Oracle due to their infamous "empty string -> NULL"
>feature (though most say bug) and Castor caching.
>
>The idea is basically having a String attribute on your class set to ""
>(empty string).  When you store this, Oracle WILL convert the empty string
>to NULL.  So at this point the database contains NULL, but the cache
>contains empty string.  Now when attempting to later update this object,
>Castor will do the update  based on a WHERE clause where all the object's
>mapped attributes are the same as in the database (to guard against
>concurrent updates).  However, when querying where "" = NULL Oracle will
>return false so the update fails because it appears the table has been
>updated since you read your object.
>
>This is a very fine nuance and was difficult to track down.
>
>
>
>
>********************************************
>Steve Ebersole
>IT Integration Engineer
>Vignette Corporation
>512.741.4195
>
>Visit http://www.vignette.com
>
>********************************************
>
>
>-----Original Message-----
>From: Jamal Jackson [mailto:[EMAIL PROTECTED]]
>Sent: Friday, April 19, 2002 1:09 PM
>To: [EMAIL PROTECTED]
>Subject: [castor-dev] Long Transaction still giving
>ObjectModifiedException
>
>
>Thanks for the help in advance.
>
>
>I created a test program that creates an object in one transaction and
>updates it in the next, but it still throws an ObjectModifiedException.  I
>don't understand how to fix this.
>
>THIS IS MY MAIN METHOD FOR MY TEST CLASS ORMappingTest2
>
>public static void main(String[] argv) {
>
>        try {
>                System.setProperty("pcorder.query","SELECT p FROM
>com.satisfusion.ecommerce.model.EWPCOrderCreditCard p WHERE
p.objectId=$1");
>                ORMappingTest2 test2 = new ORMappingTest2();
>                test2.init();
>
>                System.out.println("Database begin called:
>"+System.currentTimeMillis());
>
>                EWPCOrder pcOrder = test2.process();
>                System.out.println("About to begin TRANSACTION II");
>                db.begin();
>                //System.out.println("PCOrder is persistent:
>"+db.isPersistent(pcOrder));
>                //Object id = db.getIdentity(pcOrder);
>                //System.out.println("Retrieved the objects identity:
"+id);
>                //EWPCOrder aPCOrder =
>(EWPCOrder)db.load(pcOrder.getClass(),pcOrder.getObjectId());
>                //System.out.println("aPCOrder is persistent:
>"+db.isPersistent(aPCOrder));
>                //String status = aPCOrder.getStatusof855();
>
>                //System.out.println("The status is: "+status+"  The order
>tracking number: "+aPCOrder.getOrderTrackingNumber());
>                //aPCOrder.setStatusof855("Hey now");
>                //db.update(aPCOrder);
>
>
>                System.out.println("pcOrder is persistent:
>"+db.isPersistent(pcOrder));
>                pcOrder.setStatusof855("Hey now");
>                db.update(pcOrder);
>                System.out.println("pcOrder is persistent:
>"+db.isPersistent(pcOrder));
>                db.commit();
>                System.out.println("Database commit called:
>"+System.currentTimeMillis());
>                System.out.println("Ending TRANSACTION II");
>        }
>        catch (Exception e) {
>                System.out.println(e.getMessage());
>                e.printStackTrace();
>        }
>
>}
>
>
>
>I LOAD MY JDO variables in my init method:
>
>public void init() throws Exception {
>
>        System.out.println("ORMappingTest2.init called");
>
>        //INSTANTIATE DAO
>        //CONNECT HERE TO THE DATABASE
>
>        // Lookup databse in JNDI
>
>        jdo = new JDO();
>        jdo.setDatabaseName("ewdev2");
>
>        jdo.setConfiguration("database.xml");
>        jdo.setClassLoader(ORMappingTest2.class.getClassLoader());
>        db = jdo.getDatabase();
>
>        pcOrderDAO = new PCOrderDAO();
>        pcOrderDAO.init(db);
>        System.out.println("Created PCOrderDAO");
>
>        pcOrderQuery = System.getProperty("pcorder.query");
>
>        System.out.println("Running from the command line");
>
>}
>
>
>I PROCESS MY ORDER IN THIS METHOD
>
>
>public EWPCOrder process() throws Exception{
>
>        EWPCOrder pcOrder =
>pcOrderDAO.findByPrimaryKey(pcOrderQuery,"SF-1008980755-11322");
>        return pcOrder;
>}
>
>
>MY DAO CLASS IS VERY STRAIGHT FORWARD, THE FINDMYPRIMARYKEY METHOD IS:
>
>
>public EWPCOrder findByPrimaryKey(String primaryKeyQuery, String value)
>throws Exception {
>
>        System.out.println("PCOrderDAO.findByPrimaryKey called");
>        System.out.println("About to begin TRANSACTION I");
>        database.begin();
>
>        OQLQuery     oql;
>        QueryResults results;
>        EWPCOrder pcOrder = null;
>
>        // Construct a new query and bind its parameters
>        oql = database.getOQLQuery(primaryKeyQuery);
>        oql.bind( value );
>        // Retrieve results and print each one
>        results = oql.execute();
>        if (results.hasMore())
>          pcOrder = (EWPCOrder)results.next();
>
>        database.commit();
>        System.out.println("Ending TRANSACTION I");
>        return pcOrder;
>
>}
>
>
>
>
>AND LAST BUT NOT LEAST MY MAPPING FILE LOOKS LIKE:
>
><!--  Mapping for PCOrderCreditCardTable  -->
>        <class name="com.satisfusion.ecommerce.model.EWPCOrderCreditCard"
>extends="com.satisfusion.ecommerce.model.EWPCOrder"
>                identity="objectId" key-generator="UUID">
>                <cache-type type="unlimited"/>
>                <description>PC Order</description>
>
>            <map-to table="ew_pcordercreditcard" xml="ewpcordercc" />
>
>            <field name="objectId">
>                        <sql name="objectId"/>
>                        <!--  xml bind  -->
>                        <bind-xml node="attribute"/>
>                </field>
>
>            <field name="createDate" type="date">
>                        <sql name="CREATEDATE" type="date"/>
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="createBy" type="string">
>                        <sql name="CREATEBY" type="varchar"/>
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="lastUpdate" type="date">
>                        <sql name="LASTUPDATE" type="date"/>
>                        <bind-xml node="text" />
>            </field>
>
>                <field name="lastUpdateBy" type="string">
>                        <sql name="LASTUPDATEBY" type="varchar"/>
>                        <bind-xml node="text" />
>                </field>
>
>                <field name="status" type="string">
>                        <sql name="STATUS" type="varchar"/>
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="dateOrdered" type="date">
>                        <sql name="DATEORDERED" type="date"/>
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="orderTrackingNumber" type="string">
>                        <sql name="ORDERTRACKINGNUMBER" type="varchar" />
>
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="dateProcessed" type="date">
>                        <sql name="DATEPROCESSED" type="date" />
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="orderNumberSC" type="string">
>                        <sql name="ORDERNUMBERSC" type="varchar" />
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="shipToName" type="string">
>                        <sql name="SHIPTONAME" type="varchar" />
>
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="shipToCompanyName" type="string">
>                        <sql name="SHIPTOCOMPANYNAME" type="varchar" />
>
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="shipToAddress" type="string">
>                        <sql name="SHIPTOADDRESS" type="varchar" />
>
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="shipToCity" type="string">
>                        <sql name="SHIPTOCITY" type="varchar" />
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="shipToState" type="string">
>                        <sql name="SHIPTOSTATE" type="varchar" />
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="shipToPostalCode" type="string">
>                        <sql name="SHIPTOPOSTALCODE" type="varchar" />
>
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="shipToPhone" type="string">
>                        <sql name="SHIPTOPHONE" type="varchar" />
>
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="shipToCountryKey" type="string">
>                        <sql name="SHIPTOCOUNTRYKEY" type="varchar" />
>
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="errorCode" type="string">
>                        <sql name="ERRORCODE" type="varchar" />
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="overrideShipping" type="string">
>                        <sql name="OVERRIDESHIPPING" type="varchar" />
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="shipToAddress2" type="string">
>                        <sql name="SHIPTOADDRESS2" type="varchar" />
>
>                        <bind-xml node="text" />
>            </field>
>
>            <field name="statusof855" type="string">
>                        <sql name="STATUSOF855" type="varchar" />
>
>                        <bind-xml node="text" />
>            </field>
>
>                <field name="orderCreditCardType" type="string">
>                        <sql name="ORDERCREDITCARDTYPE" type="varchar" />
>
>                        <bind-xml node="text" />
>        </field>
>
>        <field name="acctAccountOID" type="string">
>                        <sql name="ACCTACCOUNTOID" type="varchar" />
>
>                        <bind-xml node="text" />
>        </field>
>
>                <field name="creditCardInfoOID" type="string">
>                        <sql name="CREDITCARDINFOOID" type="varchar" />
>                        <bind-xml node="text" />
>        </field>
>
>                <field name="dateErrorEmailSent" type="date">
>                        <sql name="DATEERROREMAILSENT" type="date" />
>                        <bind-xml node="text" />
>            </field>
>
>        </class>
>
>
>I GET THIS EXCPETION WHEN I RUN MY SAMPLE PROGRAM.
>
>ORMappingTest2.init called
>Created PCOrderDAO
>Running from the command line
>Database begin called: 1019237965045
>PCOrderDAO.findByPrimaryKey called
>About to begin TRANSACTION I
>SET TIMESTAMP CALLED: 1019237965986
>Ending TRANSACTION I
>About to begin TRANSACTION II
>pcOrder is persistent: false
>GET TIMESTAMP CALLED: 1019237965986
>pcOrder is persistent: true
>Transaction aborted: Object of type
>com.satisfusion.ecommerce.model.EWPCOrderCre
>ditCard with identity SF-1008980755-11322 has been modified by a concurrent
>tran
>saction
>org.exolab.castor.jdo.ObjectModifiedException: Transaction aborted: Object
>of ty
>pe com.satisfusion.ecommerce.model.EWPCOrderCreditCard with identity
>SF-10089807
>55-11322 has been modified by a concurrent transaction
>        at org.exolab.castor.jdo.engine.SQLEngine.store(SQLEngine.java:867)
>        at
>org.exolab.castor.persist.ClassMolder.store(ClassMolder.java:1584)
>        at org.exolab.castor.persist.LockEngine.store(LockEngine.java:758)
>        at
>org.exolab.castor.persist.TransactionContext.prepare(TransactionConte
>xt.java:1457)
>        at
>org.exolab.castor.jdo.engine.DatabaseImpl.commit(DatabaseImpl.java:49
>9)
>        at
com.satisfusion.test.ORMappingTest2.main(ORMappingTest2.java:109)
>
>
>I HAVE FOLLOWED THE websites instructions on how to set it up long
>transaction, but somehow this is just not working for me. Can any one see
>what I am doing wrong?
>
>Thanks again.
>
>
>
>"Satisfying Customers by Fusing Sales & Service"!
>
>The information contained in this electronic message and any attachments to
>this message are intended for the exclusive use of the addressee(s) and may
>contain confidential or privileged information. If you are not the intended
>recipient, please notify SATISFUSION, INC., immediately at 562.290.1300, or
>the sender and destroy all copies of this message and any attachments.
>
>-----------------------------------------------------------
>If you wish to unsubscribe from this mailing, send mail to
>[EMAIL PROTECTED] with a subject of:
>        unsubscribe castor-dev
>
>-----------------------------------------------------------
>If you wish to unsubscribe from this mailing, send mail to
>[EMAIL PROTECTED] with a subject of:
>        unsubscribe castor-dev
>
>
>
>"Satisfying Customers by Fusing Sales & Service"!
>
>The information contained in this electronic message and any attachments to
>this message are intended for the exclusive use of the addressee(s) and may
>contain confidential or privileged information. If you are not the intended
>recipient, please notify SATISFUSION, INC., immediately at 562.290.1300, or
>the sender and destroy all copies of this message and any attachments.
>
>-----------------------------------------------------------
>If you wish to unsubscribe from this mailing, send mail to
>[EMAIL PROTECTED] with a subject of:
>        unsubscribe castor-dev
>

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to