db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Craig L Russell <Craig.Russ...@Sun.COM>
Subject Re: svn commit: r384378 - in /db/jdo/trunk/tck20/src: conf/pm.conf java/org/apache/jdo/tck/JDO_Test.java java/org/apache/jdo/tck/api/persistencemanager/DataStoreConnection.java java/org/apache/jdo/tck/api/persistencemanager/DataStoreConnectionThrows.java
Date Thu, 09 Mar 2006 23:30:26 GMT
Hi Michael,

Right. I had checked all usages of the array in JDO_Test but not the  
variables that define the limits of the arrays used in other tests.  
I'll update this test.

Thanks,

Craig

On Mar 9, 2006, at 2:45 PM, Michael Bouschen wrote:

> Hi Craig,
>
> I think with this JDO_Test change we have to extend the  
> StateTransitions test case and add the new lifecycle states  
> PERSISTENT_NONTRANSACTIONAL_DIRTY and DETACHED there. Class  
> StateTransitions iterates over all states using the constant  
> NUM_STATES (see line 297) and expects to find the new state after a  
> transition in the transitions array. Unfortunately, the transitions  
> array does not have entries for the new states which results in a  
> ArrayIndexOutOfBoundsException during the lifecycle test.
>
> Regards Michael
>
>> Author: clr
>> Date: Wed Mar  8 15:45:25 2006
>> New Revision: 384378
>>
>> URL: http://svn.apache.org/viewcvs?rev=384378&view=rev
>> Log:
>> JDO-191 Added tests for DataStoreConnection
>>
>> Added:
>>    db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/ 
>> persistencemanager/DataStoreConnection.java
>>    db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/ 
>> persistencemanager/DataStoreConnectionThrows.java
>> Modified:
>>    db/jdo/trunk/tck20/src/conf/pm.conf
>>    db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/JDO_Test.java
>>
>> Modified: db/jdo/trunk/tck20/src/conf/pm.conf
>> URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/conf/ 
>> pm.conf?rev=384378&r1=384377&r2=384378&view=diff
>> ===================================================================== 
>> =========
>> --- db/jdo/trunk/tck20/src/conf/pm.conf (original)
>> +++ db/jdo/trunk/tck20/src/conf/pm.conf Wed Mar  8 15:45:25 2006
>> @@ -9,6 +9,8 @@
>> org.apache.jdo.tck.api.persistencemanager.ConcurrentPersistenceManage 
>> rsSameClasses \
>> org.apache.jdo.tck.api.persistencemanager.CurrentTransaction \
>> org.apache.jdo.tck.api.persistencemanager.DataStoreCacheTest \
>> +org.apache.jdo.tck.api.persistencemanager.DataStoreConnection \
>> +org.apache.jdo.tck.api.persistencemanager.DataStoreConnectionThrows  
>> \
>> org.apache.jdo.tck.api.persistencemanager.DeletePersistent \
>> org.apache.jdo.tck.api.persistencemanager.DeletePersistentAllFails \
>> org.apache.jdo.tck.api.persistencemanager.DeletePersistentFailsIfInst 
>> anceIsTransient \
>>
>> Modified: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/ 
>> JDO_Test.java
>> URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/ 
>> apache/jdo/tck/JDO_Test.java?rev=384378&r1=384377&r2=384378&view=diff
>> ===================================================================== 
>> =========
>> --- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/JDO_Test.java  
>> (original)
>> +++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/JDO_Test.java  
>> Wed Mar  8 15:45:25 2006
>> @@ -62,8 +62,10 @@
>>     public static final int PERSISTENT_NEW_DELETED      = 7;
>>     public static final int PERSISTENT_DELETED          = 8;
>>     public static final int PERSISTENT_NONTRANSACTIONAL = 9;
>> -    public static final int NUM_STATES = 10;
>> -    public static final int ILLEGAL_STATE = 10;
>> +    public static final int PERSISTENT_NONTRANSACTIONAL_DIRTY = 10;
>> +    public static final int DETACHED = 11;
>> +    public static final int NUM_STATES = 12;
>> +    public static final int ILLEGAL_STATE = 12;
>>     public static final String[] states = {
>>         "transient",
>> @@ -76,6 +78,8 @@
>>         "persistent-new-deleted",
>>         "persistent-deleted",
>>         "persistent-nontransactional",
>> +        "persistent-nontransactional-dirty",
>> +        "detached",
>>         "illegal"
>>     };
>>     private static final int IS_PERSISTENT       = 0;
>> @@ -83,7 +87,8 @@
>>     private static final int IS_DIRTY            = 2;
>>     private static final int IS_NEW              = 3;
>>     private static final int IS_DELETED          = 4;
>> -    private static final int NUM_STATUSES        = 5;
>> +    private static final int IS_DETACHED         = 5;
>> +    private static final int NUM_STATUSES        = 6;
>>     /*
>>      * This table indicates the values returned by the status  
>> interrogation
>> @@ -91,36 +96,42 @@
>>      * state of an object.
>>      */
>>     private static final boolean state_statuses[][] = {
>> -        // IS_PERSISTENT IS_TRANSACTIONAL    IS_DIRTY       
>> IS_NEW      IS_DELETED
>> +        // IS_PERSISTENT IS_TRANSACTIONAL    IS_DIRTY       
>> IS_NEW      IS_DELETED  IS_DETACHED
>>         // transient
>> -        {   false,          false,              false,       
>> false,      false},
>> +        {   false,          false,              false,       
>> false,      false,        false},
>>         // persistent-new
>> -        {   true,           true,               true,        
>> true,       false},
>> +        {   true,           true,               true,        
>> true,       false,        false},
>>         // persistent-clean
>> -        {   true,           true,               false,       
>> false,      false},
>> +        {   true,           true,               false,       
>> false,      false,        false},
>>         // persistent-dirty
>> -        {   true,           true,               true,        
>> false,      false},
>> +        {   true,           true,               true,        
>> false,      false,        false},
>>         // hollow
>> -        {   true,           false,              false,       
>> false,      false},
>> +        {   true,           false,              false,       
>> false,      false,        false},
>>         // transient-clean
>> -        {   false,          true,               false,       
>> false,      false},
>> +        {   false,          true,               false,       
>> false,      false,        false},
>>         // transient-dirty
>> -        {   false,          true,               true,        
>> false,      false},
>> +        {   false,          true,               true,        
>> false,      false,        false},
>>         // persistent-new-deleted
>> -        {   true,           true,               true,        
>> true,       true},
>> +        {   true,           true,               true,        
>> true,       true,         false},
>>         // persistent-deleted
>> -        {   true,           true,               true,        
>> false,      true},
>> +        {   true,           true,               true,        
>> false,      true,         false},
>>         // persistent-nontransactional
>> -        {   true,           false,              false,       
>> false,      false}
>> +        {   true,           false,              false,       
>> false,      false,        false},
>> +
>> +        // persistent-nontransactional-dirty
>> +        {   true,           true,               false,       
>> false,      false,        false},
>> +
>> +        // detached
>> +        {   false,          false,              false,       
>> false,      false,        true}
>>     };
>>       /** identitytype value for applicationidentity. */
>> @@ -706,6 +717,30 @@
>>             "javax.jdo.query.SQL");
>>     }
>>     +    /** Reports whether getting the DataStoreConnection is  
>> supported. */
>> +    public boolean isDataStoreConnectionSupported() {
>> +        return getPMF().supportedOptions().contains(
>> +            "javax.jdo.option.GetDataStoreConnection");
>> +    }
>> +    +    /**
>> +     * Determine if a class is loadable in the current environment.
>> +     */
>> +    public static boolean isClassLoadable(String className) {
>> +        try {
>> +            Class.forName(className);
>> +            return true;
>> +        } catch (ClassNotFoundException ex) {
>> +            return false;
>> +        }
>> +    }
>> +
>> +    /** +     * Determine if the environment is 1.4 version of  
>> JRE or better.
>> +     */
>> +    public static boolean isJRE14orBetter() {
>> +        return isClassLoadable("java.util.Currency");
>> +    }
>>     /**
>>      * This utility method returns a <code>String</code> that  
>> indicates the
>> @@ -741,6 +776,10 @@
>>             if( existingEntries ) buff.append(", ");
>>             buff.append("deleted");
>>         }
>> +        if( JDOHelper.isDetached(o) ){
>> +            if( existingEntries ) buff.append(", ");
>> +            buff.append("detached");
>> +        }
>>         buff.append("}");
>>         return buff.toString();
>>     }
>> @@ -750,12 +789,13 @@
>>      */
>>     public static int currentState(Object o)
>>     {
>> -        boolean[] status = new boolean[5];
>> +        boolean[] status = new boolean[NUM_STATUSES];
>>         status[IS_PERSISTENT]       = JDOHelper.isPersistent(o);
>>         status[IS_TRANSACTIONAL]    = JDOHelper.isTransactional(o);
>>         status[IS_DIRTY]            = JDOHelper.isDirty(o);
>>         status[IS_NEW]              = JDOHelper.isNew(o);
>>         status[IS_DELETED]          = JDOHelper.isDeleted(o);
>> +        status[IS_DETACHED]         = JDOHelper.isDetached(o);
>>         int i, j;
>>     outerloop:
>>         for( i = 0; i < NUM_STATES; ++i ){
>>
>> Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/ 
>> persistencemanager/DataStoreConnection.java
>> URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/ 
>> apache/jdo/tck/api/persistencemanager/DataStoreConnection.java? 
>> rev=384378&view=auto
>> ===================================================================== 
>> =========
>> --- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/ 
>> persistencemanager/DataStoreConnection.java (added)
>> +++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/ 
>> persistencemanager/DataStoreConnection.java Wed Mar  8 15:45:25 2006
>> @@ -0,0 +1,130 @@
>> +/*
>> + * 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.tck.api.persistencemanager;
>> +
>> +import java.sql.Connection;
>> +import java.sql.PreparedStatement;
>> +import java.sql.ResultSet;
>> +
>> +import java.util.Collection;
>> +import java.util.HashSet;
>> +
>> +import javax.jdo.datastore.JDOConnection;
>> +
>> +import org.apache.jdo.tck.pc.mylib.PCPoint;
>> +
>> +import org.apache.jdo.tck.util.BatchTestRunner;
>> +
>> +/**
>> + *<B>Title:</B> DataStoreConnection
>> + *<BR>
>> + *<B>Keywords:</B>
>> + *<BR>
>> + *<B>Assertion ID:</B> A12.5.2-1
>> + *<BR>
>> + *<B>Assertion Description: </B>
>> +In order for the application to perform some +datastore-specific  
>> functions, such as to execute +a query that is not directly  
>> supported by JDO, +applications might need access to the  
>> +datastore connection used by the JDO implementation. +This method  
>> returns a wrapped +connection that can be cast to the appropriate  
>> +datastore connection and used by the application. +The capability  
>> to get the datastore connection is +indicated by the optional  
>> feature string +javax.jdo.option.GetDataStoreConnection. +
>> + */
>> +
>> +public class DataStoreConnection extends PersistenceManagerTest {
>> +
>> +    /** */
>> +    private static final String ASSERTION_FAILED = +         
>> "Assertion A12.5.2-1 (DataStoreConnection) failed: ";
>> +    +    protected PCPoint goldenPoint;
>> +    +    /**
>> +     * The <code>main</code> is called when the class
>> +     * is directly executed from the command line.
>> +     * @param args The arguments passed to the program.
>> +     */
>> +    public static void main(String[] args) {
>> +        BatchTestRunner.run(DataStoreConnection.class);
>> +    }
>> +    +    /** */
>> +    protected void localSetUp() {
>> +        addTearDownClass(PCPoint.class);
>> +        PCPoint point = new PCPoint(50, 100);
>> +        goldenPoint = new PCPoint(point.getX(), point.getY());
>> +        getPM().currentTransaction().begin();
>> +        pm.makePersistent(point);
>> +        pm.currentTransaction().commit();
>> +    }
>> +
>> +    /** */
>> +    public void testDataStoreConnection() {
>> +        if (!(isDataStoreConnectionSupported() && isSQLSupported 
>> ())) {
>> +            printUnsupportedOptionalFeatureNotTested(
>> +                    this.getClass().getName(),
>> +                    "getDataStoreConnection AND SQLSupported.");
>> +            return;
>> +        }
>> +        String schema = getPMFProperty("javax.jdo.mapping.Schema");
>> +        String sql = "SELECT X, Y FROM " + schema + ".PCPoint";
>> +        JDOConnection jconn = pm.getDataStoreConnection();
>> +        try {
>> +            getPM().currentTransaction().begin();
>> +            jconn = pm.getDataStoreConnection();
>> +            Connection conn = (Connection) 
>> jconn.getNativeConnection();
>> +            if (conn.getAutoCommit()) {
>> +                appendMessage(ASSERTION_FAILED +  
>> +                        "Autocommit must not be true in native  
>> connection.");
>> +            };
>> +            PreparedStatement ps = conn.prepareStatement(sql);
>> +            ResultSet rs = ps.executeQuery();
>> +            Collection actuals = new HashSet();
>> +            while (rs.next()) {
>> +                PCPoint p = new PCPoint(rs.getInt(1), rs.getInt(2));
>> +                actuals.add(p);
>> +            }
>> +            if (actuals.size() != 1) {
>> +                appendMessage(ASSERTION_FAILED + "Wrong size of  
>> result of " +
>> +                        sql + NL + "expected: 1, actual: " +  
>> actuals.size());
>> +            } else {
>> +                PCPoint actual = (PCPoint)actuals.iterator().next();
>> +                if (goldenPoint.getX() != actual.getX() ||
>> +                        !goldenPoint.getY().equals(actual.getY())) {
>> +                    appendMessage(ASSERTION_FAILED +  
>> +                            "Wrong values of PCPoint from SQL" +
>> +                            "expected x: " + goldenPoint.getX() +
>> +                            ", y: " + goldenPoint.getX() + NL +
>> +                            "actual x: " + actual.getX() +
>> +                            ", y: " + actual.getX()
>> +                            );
>> +                }
>> +            }
>> +        } catch (Exception ex) {
>> +            appendMessage(ASSERTION_FAILED + " caught exception:"  
>> + ex);
>> +        } finally {
>> +            jconn.close();
>> +            failOnError();
>> +        }
>> +    }
>> +}
>>
>> Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/ 
>> persistencemanager/DataStoreConnectionThrows.java
>> URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/ 
>> apache/jdo/tck/api/persistencemanager/ 
>> DataStoreConnectionThrows.java?rev=384378&view=auto
>> ===================================================================== 
>> =========
>> --- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/ 
>> persistencemanager/DataStoreConnectionThrows.java (added)
>> +++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/ 
>> persistencemanager/DataStoreConnectionThrows.java Wed Mar  8  
>> 15:45:25 2006
>> @@ -0,0 +1,187 @@
>> +/*
>> + * 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.tck.api.persistencemanager;
>> +
>> +import java.sql.Connection;
>> +import java.sql.PreparedStatement;
>> +import java.sql.ResultSet;
>> +import java.sql.SQLException;
>> +
>> +import java.util.Collection;
>> +import java.util.HashMap;
>> +import java.util.HashSet;
>> +
>> +import javax.jdo.datastore.JDOConnection;
>> +
>> +import org.apache.jdo.tck.pc.mylib.PCPoint;
>> +
>> +import org.apache.jdo.tck.util.BatchTestRunner;
>> +
>> +/**
>> + *<B>Title:</B> DataStoreConnectionThrows
>> + *<BR>
>> + *<B>Keywords:</B>
>> + *<BR>
>> + *<B>Assertion ID:</B> A12.16-2
>> + *<BR>
>> + *<B>Assertion Description: </B>
>> +For portability, a JDBC-based JDO implementation +will return an  
>> instance that implements +java.sql.Connection. The instance +will  
>> throw an exception for any of the +following method calls: commit,  
>> getMetaData, +releaseSavepoint, rollback, setAutoCommit,  
>> +setCatalog, setHoldability, setReadOnly, +setSavepoint,  
>> setTransactionIsolation, and +setTypeMap.
>> + */
>> +
>> +public class DataStoreConnectionThrows extends  
>> PersistenceManagerTest {
>> +
>> +    /** */
>> +    private static final String ASSERTION_FAILED = +         
>> "Assertion A12.16-2 (DataStoreConnectionThrows) failed: ";
>> +    +    protected PCPoint goldenPoint;
>> +    +    /**
>> +     * The <code>main</code> is called when the class
>> +     * is directly executed from the command line.
>> +     * @param args The arguments passed to the program.
>> +     */
>> +    public static void main(String[] args) {
>> +        BatchTestRunner.run(DataStoreConnectionThrows.class);
>> +    }
>> +    +    /** */
>> +    protected void checkThrow(Connection conn, Call call) {
>> +        try {
>> +            call.execute(conn);
>> +            appendMessage(ASSERTION_FAILED +
>> +                    "Failed to throw an exception for " +  
>> call.getName());
>> +        } catch (SQLException ex) {
>> +            appendMessage(ASSERTION_FAILED +
>> +                    "Threw a SQLException for " + call.getName()  
>> + NL + ex);
>> +            return;
>> +        } catch (Exception ex) {
>> +            return;
>> +        }
>> +    }
>> +
>> +    /** */
>> +    interface Call {
>> +        String getName();
>> +        void execute(Connection conn) throws SQLException;
>> +    }
>> +
>> +    /** */
>> +    public void testDataStoreConnectionThrows() {
>> +        if (!(isDataStoreConnectionSupported() && isSQLSupported 
>> ())) {
>> +            printUnsupportedOptionalFeatureNotTested(
>> +                    this.getClass().getName(),
>> +                    "getDataStoreConnection AND SQLSupported.");
>> +            return;
>> +        }
>> +        JDOConnection jconn = getPM().getDataStoreConnection();
>> +        Connection conn = (Connection)jconn.getNativeConnection();
>> +        check13Methods(conn);
>> +        if (isJRE14orBetter()) {
>> +            check14Methods(conn);
>> +        }
>> +        jconn.close();
>> +        failOnError();
>> +    }
>> +
>> +   /** +    * These methods are defined in Java 1.3 Connection.
>> +    */
>> +    protected void check13Methods(Connection conn) {
>> +        checkThrow(conn,
>> +                new Call() {
>> +                    public String getName() {return "commit";}
>> +                    public void execute(Connection conn)  
>> +                        throws SQLException {conn.commit();}
>> +                }
>> +            );
>> +        checkThrow(conn,
>> +                new Call() {
>> +                    public String getName() {return "rollback";}
>> +                    public void execute(Connection conn)  
>> +                        throws SQLException {conn.rollback();}
>> +                }
>> +            );
>> +        checkThrow(conn,
>> +                new Call() {
>> +                    public String getName() {return  
>> "setTransactionIsolation";}
>> +                    public void execute(Connection conn)  
>> +                        throws SQLException {
>> +                        conn.setTransactionIsolation(
>> +                                 
>> Connection.TRANSACTION_READ_COMMITTED);}
>> +                }
>> +            );
>> +        checkThrow(conn,
>> +                new Call() {
>> +                    public String getName() {return  
>> "setAutoCommit";}
>> +                    public void execute(Connection conn)  
>> +                        throws SQLException {conn.setAutoCommit 
>> (true);}
>> +                }
>> +            );
>> +        checkThrow(conn,
>> +                new Call() {
>> +                    public String getName() {return "setCatalog";}
>> +                    public void execute(Connection conn)  
>> +                        throws SQLException {conn.setCatalog 
>> ("NONE");}
>> +                }
>> +            );
>> +    }
>> +
>> +    /**
>> +     * These methods are defined in Java 1.4 Connection.
>> +     */
>> +    protected void check14Methods(Connection conn) {
>> +        checkThrow(conn,
>> +                new Call() {
>> +                    public String getName() {return "setSavepoint";}
>> +                    public void execute(Connection conn)  
>> +                        throws SQLException {conn.setSavepoint();}
>> +                }
>> +            );
>> +        checkThrow(conn,
>> +                new Call() {
>> +                    public String getName() {return  
>> "releaseSavepoint";}
>> +                    public void execute(Connection conn)  
>> +                        throws SQLException {conn.releaseSavepoint 
>> (null);}
>> +                }
>> +            );
>> +        checkThrow(conn,
>> +                new Call() {
>> +                    public String getName() {return  
>> "setHoldability";}
>> +                    public void execute(Connection conn)  
>> +                        throws SQLException {
>> +                        conn.setHoldability(
>> +                                ResultSet.CLOSE_CURSORS_AT_COMMIT);}
>> +                }
>> +            );
>> +        checkThrow(conn,
>> +                new Call() {
>> +                    public String getName() {return "setTypeMap";}
>> +                    public void execute(Connection conn)  
>> +                        throws SQLException {conn.setTypeMap(new  
>> HashMap());}
>> +                }
>> +            );
>> +     }
>> +}
>>
>>
>
>
> -- 
> Michael Bouschen		Tech@Spree Engineering GmbH
> mailto:mbo.tech@spree.de	http://www.tech.spree.de/
> Tel.:++49/30/235 520-33		Buelowstr. 66			
> Fax.:++49/30/2175 2012		D-10783 Berlin			
>

Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!


Mime
View raw message