You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2006/08/16 01:17:03 UTC

svn commit: r431730 - in /db/ojb/trunk/src/test/org/apache/ojb: broker/AllTests.java broker/StoredProcedureMaxDBTest.java broker/StoredProcedureTest.java repository_junit.xml

Author: arminw
Date: Tue Aug 15 16:17:03 2006
New Revision: 431730

URL: http://svn.apache.org/viewvc?rev=431730&view=rev
Log:
add test: persistence via stored procedures

Added:
    db/ojb/trunk/src/test/org/apache/ojb/broker/StoredProcedureMaxDBTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/StoredProcedureTest.java
Modified:
    db/ojb/trunk/src/test/org/apache/ojb/broker/AllTests.java
    db/ojb/trunk/src/test/org/apache/ojb/repository_junit.xml

Modified: db/ojb/trunk/src/test/org/apache/ojb/broker/AllTests.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/broker/AllTests.java?rev=431730&r1=431729&r2=431730&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/broker/AllTests.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/broker/AllTests.java Tue Aug 15 16:17:03 2006
@@ -147,6 +147,7 @@
         suite.addTestSuite(UnwrapHelperTest.class);
         suite.addTestSuite(LOBTest.class);
         suite.addTestSuite(JdbcJavaObjectTest.class);
+        suite.addTestSuite(StoredProcedureMaxDBTest.class);
         suite.addTestSuite(CreationTest.class);
         suite.addTestSuite(IdentityPerformanceTest.class);
 

Added: db/ojb/trunk/src/test/org/apache/ojb/broker/StoredProcedureMaxDBTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/broker/StoredProcedureMaxDBTest.java?rev=431730&view=auto
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/broker/StoredProcedureMaxDBTest.java (added)
+++ db/ojb/trunk/src/test/org/apache/ojb/broker/StoredProcedureMaxDBTest.java Tue Aug 15 16:17:03 2006
@@ -0,0 +1,71 @@
+package org.apache.ojb.broker;
+
+/* Copyright 2002-2006 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.
+ */
+
+import org.apache.ojb.broker.platforms.PlatformMaxDBImpl;
+import org.apache.ojb.broker.platforms.PlatformSapdbImpl;
+
+/**
+ * This class
+ *
+ * @version $Id: $
+ */
+public class StoredProcedureMaxDBTest extends StoredProcedureTest
+{
+    public static void main(String[] args)
+    {
+        String[] arr = {StoredProcedureMaxDBTest.class.getName()};
+        junit.textui.TestRunner.main(arr);
+    }
+
+    public StoredProcedureMaxDBTest(String name)
+    {
+        super(name);
+    }
+
+    protected void initDBDependend() throws Exception
+    {
+        databaseName = "SapDB/MaxDB";
+        String schemaName = broker.serviceConnectionManager().getConnectionDescriptor().getUserName() + ".";
+
+        createTable = "CREATE TABLE SP_CUSTOMER(ID_ SERIAL PRIMARY KEY, NAME VARCHAR(150))";
+        deleteTable = "DROP TABLE SP_CUSTOMER CASCADE";
+
+        insertProcedure =
+                "CREATE DBPROC SP_CUSTOMER_INSERT (IN NAME VARCHAR(150), OUT CUSTOMER_ID FIXED(10)) " +
+                        "AS SET CUSTOMER_ID = 0;" +
+                        "INSERT INTO " + schemaName + "SP_CUSTOMER (NAME) VALUES (:NAME);" +
+                        "BEGIN " +
+                        "SET CUSTOMER_ID=SP_CUSTOMER.CURRVAL;" +
+                        "END;";
+        updateProcedure = "CREATE DBPROC SP_CUSTOMER_UPDATE" +
+                " (IN ID_ FIXED(10), IN NAME VARCHAR(150)) AS " +
+                "UPDATE " + schemaName + "SP_CUSTOMER SET NAME=:NAME WHERE ID_=:ID_;";
+        deleteProcedure = "CREATE DBPROC SP_CUSTOMER_DELETE" +
+                " (IN ID_ FIXED(10)) AS " +
+                "DELETE FROM " + schemaName + "SP_CUSTOMER WHERE ID_=:ID_;";
+
+        dropInsertProcedure = "DROP DBPROC SP_CUSTOMER_INSERT";
+        dropUpdateProcedure = "DROP DBPROC SP_CUSTOMER_UPDATE";
+        dropDeleteProcedure = "DROP DBPROC SP_CUSTOMER_DELETE";
+    }
+
+    protected boolean isSupportedDatabase()
+    {
+        return broker.serviceConnectionManager().getSupportedPlatform() instanceof PlatformSapdbImpl
+                || broker.serviceConnectionManager().getSupportedPlatform() instanceof PlatformMaxDBImpl;
+    }
+}

Added: db/ojb/trunk/src/test/org/apache/ojb/broker/StoredProcedureTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/broker/StoredProcedureTest.java?rev=431730&view=auto
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/broker/StoredProcedureTest.java (added)
+++ db/ojb/trunk/src/test/org/apache/ojb/broker/StoredProcedureTest.java Tue Aug 15 16:17:03 2006
@@ -0,0 +1,278 @@
+package org.apache.ojb.broker;
+
+/* Copyright 2002-2006 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.
+ */
+
+import java.sql.Connection;
+import java.sql.Statement;
+
+import org.apache.ojb.junit.PBTestCase;
+
+/**
+ * Abstract base class to test OJB insert, update, delete operations
+ * via stored procedures. Extend this class to implement database specific
+ * tests. 
+ *
+ * @version $Id: $
+ */
+abstract public class StoredProcedureTest extends PBTestCase
+{
+    protected String databaseName;
+
+    protected String createTable;
+    protected String deleteTable;
+
+
+    protected String insertProcedure;
+    protected String updateProcedure;
+    protected String deleteProcedure;
+
+
+    protected String dropInsertProcedure;
+    protected String dropUpdateProcedure;
+    protected String dropDeleteProcedure;
+
+    public StoredProcedureTest(String name)
+    {
+        super(name);
+    }
+
+    public void setUp() throws Exception
+    {
+        super.setUp();
+
+        initDBDependend();
+
+        try{executeStatement(dropInsertProcedure);}catch(Exception e){}
+        try{executeStatement(dropDeleteProcedure);}catch(Exception e){}
+        try{executeStatement(dropUpdateProcedure);}catch(Exception e){}
+        try{executeStatement(deleteTable);}catch(Exception e){}
+        executeStatement(createTable);
+        executeStatement(insertProcedure);
+        executeStatement(updateProcedure);
+        executeStatement(deleteProcedure);
+    }
+
+    public void tearDown() throws Exception
+    {
+        super.tearDown();
+    }
+
+    /**
+     * Override this method to implement other databases.
+     * @throws Exception
+     */
+    abstract protected void initDBDependend() throws Exception;
+
+    /**
+     * Override this check for each database dependend implementation.
+     * @return Return <em>true</em> if the
+     */
+    abstract protected boolean isSupportedDatabase();
+
+    protected void executeStatement(String statement) throws Exception
+    {
+        try
+        {
+            broker.beginTransaction();
+            Connection con = broker.serviceConnectionManager().getConnection();
+            Statement stmt = con.createStatement();
+            stmt.execute(statement);
+            stmt.close();
+            broker.commitTransaction();
+        }
+        catch(Exception e)
+        {
+            if(broker != null) broker.abortTransaction();
+            throw e;
+        }
+    }
+
+    public void testInsert()
+    {
+        if(!isSupportedDatabase())
+        {
+            this.ojbSkipTestMessage("Skip " + databaseName + " specific test");
+            return;
+        }
+
+        Customer c1 = createCustomer();
+        c1.setName("testInsert_1");
+        Customer c2 = createCustomer();
+        c2.setName("testInsert_2");
+        broker.beginTransaction();
+        try
+        {
+            broker.store(c1);
+            broker.store(c2);
+            broker.commitTransaction();
+        }
+        catch(PersistenceBrokerException e)
+        {
+            if(broker != null) broker.abortTransaction();
+            throw e;
+        }
+        assertNotNull(c1.getId());
+        assertNotNull(c2.getId());
+//        System.out.println("ID: " + c1.getId());
+//        System.out.println("ID: " + c2.getId());
+    }
+
+    public void testUpdate()
+    {
+        if(!isSupportedDatabase())
+        {
+            this.ojbSkipTestMessage("Skip " + databaseName + " specific test");
+            return;
+        }
+
+        Customer c1 = createCustomer();
+        c1.setName("testUpdate_1");
+        Customer c2 = createCustomer();
+        c2.setName("testUpdate_2");
+        broker.beginTransaction();
+        try
+        {
+            broker.store(c1);
+            broker.store(c2);
+            broker.commitTransaction();
+        }
+        catch(PersistenceBrokerException e)
+        {
+            if(broker != null) broker.abortTransaction();
+            throw e;
+        }
+        assertNotNull(c1.getId());
+        assertNotNull(c2.getId());
+
+        c1.setName("update_1");
+        broker.beginTransaction();
+        try
+        {
+            broker.store(c1);
+            broker.store(c2);
+            broker.commitTransaction();
+        }
+        catch(PersistenceBrokerException e)
+        {
+            if(broker != null) broker.abortTransaction();
+            throw e;
+        }
+
+        broker.clearCache();
+
+        Identity oid_1 = broker.serviceIdentity().buildIdentity(Customer.class, c1.getId());
+        Identity oid_2 = broker.serviceIdentity().buildIdentity(Customer.class, c2.getId());
+
+        Customer r1 = (Customer) broker.getObjectByIdentity(oid_1);
+        Customer r2 = (Customer) broker.getObjectByIdentity(oid_2);
+
+        assertNotNull(r1);
+        assertNotNull(r2);
+        assertEquals("update_1", r1.getName());
+        assertEquals("testUpdate_2", r2.getName());
+    }
+
+    public void testDelete()
+    {
+        if(!isSupportedDatabase())
+        {
+            this.ojbSkipTestMessage("Skip " + databaseName + " specific test");
+            return;
+        }
+
+        Customer c1 = createCustomer();
+        c1.setName("testDelete_1");
+        Customer c2 = createCustomer();
+        c2.setName("testDelete_2");
+        broker.beginTransaction();
+        try
+        {
+            broker.store(c1);
+            broker.store(c2);
+            broker.commitTransaction();
+        }
+        catch(PersistenceBrokerException e)
+        {
+            if(broker != null) broker.abortTransaction();
+            throw e;
+        }
+        assertNotNull(c1.getId());
+        assertNotNull(c2.getId());
+
+        broker.clearCache();
+
+        Identity oid_1 = broker.serviceIdentity().buildIdentity(Customer.class, c1.getId());
+        Identity oid_2 = broker.serviceIdentity().buildIdentity(Customer.class, c2.getId());
+
+        Customer r1 = (Customer) broker.getObjectByIdentity(oid_1);
+        Customer r2 = (Customer) broker.getObjectByIdentity(oid_2);
+
+        assertNotNull(r1);
+        assertNotNull(r2);
+        assertEquals("testDelete_1", r1.getName());
+        assertEquals("testDelete_2", r2.getName());
+
+        broker.beginTransaction();
+        try
+        {
+            broker.delete(c1);
+            broker.delete(c2);
+            broker.commitTransaction();
+        }
+        catch(PersistenceBrokerException e)
+        {
+            if(broker != null) broker.abortTransaction();
+            throw e;
+        }
+
+        r1 = (Customer) broker.getObjectByIdentity(oid_1);
+        r2 = (Customer) broker.getObjectByIdentity(oid_2);
+
+        assertNull(r1);
+        assertNull(r2);
+    }
+
+    protected StoredProcedureTest.Customer createCustomer()
+    {
+        return new StoredProcedureTest.Customer();
+    }
+
+    public static class Customer
+    {
+        private Integer id;
+        private String name;
+
+        public Integer getId()
+        {
+            return id;
+        }
+
+        public void setId(Integer id)
+        {
+            this.id = id;
+        }
+
+        public String getName()
+        {
+            return name;
+        }
+
+        public void setName(String name)
+        {
+            this.name = name;
+        }
+    }
+}

Modified: db/ojb/trunk/src/test/org/apache/ojb/repository_junit.xml
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/repository_junit.xml?rev=431730&r1=431729&r2=431730&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/repository_junit.xml (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/repository_junit.xml Tue Aug 15 16:17:03 2006
@@ -3563,4 +3563,38 @@
              jdbc-type="JAVA_OBJECT"
         />
     </class-descriptor>
+
+
+    <class-descriptor
+        class="org.apache.ojb.broker.StoredProcedureTest$Customer"
+        table="SP_CUSTOMER"
+    >
+        <field-descriptor
+             name="id"
+             column="ID_"
+             jdbc-type="INTEGER"
+             primarykey="true"
+             autoincrement="false"
+        />
+
+        <field-descriptor
+             name="name"
+             column="NAME"
+             jdbc-type="VARCHAR"
+        />
+
+        <insert-procedure name="SP_CUSTOMER_INSERT">
+            <runtime-argument field-ref="name"/>
+            <runtime-argument field-ref="id" return="true"/>
+        </insert-procedure>
+
+        <update-procedure name="SP_CUSTOMER_UPDATE">
+            <runtime-argument field-ref="id"/>
+            <runtime-argument field-ref="name"/>
+        </update-procedure>
+
+        <delete-procedure name="SP_CUSTOMER_DELETE">
+            <runtime-argument field-ref="id"/>
+        </delete-procedure>
+    </class-descriptor>
 <!-- Mapping of classes used in junit tests and tutorials ends here -->



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org