/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.jdbc; import java.io.IOException; import org.geotools.data.DefaultTransaction; import org.geotools.data.FeatureStore; import org.geotools.data.FeatureWriter; import org.geotools.data.Query; import org.geotools.data.Transaction; import org.geotools.feature.DefaultFeatureCollection; import org.geotools.feature.FeatureCollection; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; public abstract class JDBCTransactionTest extends JDBCTestSupport { public void testCommit() throws IOException { JDBCFeatureStore fs = (JDBCFeatureStore) dataStore.getFeatureSource("ft1"); Transaction tx = new DefaultTransaction(); //tx.putState( fs, new JDBCTransactionState( fs ) ); FeatureWriter<SimpleFeatureType, SimpleFeature> writer = dataStore.getFeatureWriterAppend("ft1", tx); SimpleFeature feature = writer.next(); feature.setAttribute("intProperty", new Integer(100)); writer.write(); writer.close(); tx.commit(); tx.close(); FeatureCollection<SimpleFeatureType, SimpleFeature> fc = dataStore.getFeatureSource("ft1").getFeatures(); assertEquals(4, fc.size()); } public void testNoCommit() throws IOException { JDBCFeatureStore fs = (JDBCFeatureStore) dataStore.getFeatureSource("ft1"); Transaction tx = new DefaultTransaction(); //tx.putState( fs, new JDBCTransactionState( fs ) ); FeatureWriter<SimpleFeatureType, SimpleFeature> writer = dataStore.getFeatureWriterAppend("ft1", tx); SimpleFeature feature = writer.next(); feature.setAttribute("intProperty", new Integer(100)); writer.write(); writer.close(); tx.rollback(); tx.close(); FeatureCollection<SimpleFeatureType, SimpleFeature> fc = dataStore.getFeatureSource("ft1").getFeatures(); assertEquals(3, fc.size()); } public void testConcurrentTransactions() throws IOException { JDBCFeatureStore fs = (JDBCFeatureStore) dataStore.getFeatureSource("ft1"); Transaction tx1 = new DefaultTransaction(); //tx1.putState( fs, new JDBCTransactionState( fs ) ); Transaction tx2 = new DefaultTransaction(); //tx2.putState( fs, new JDBCTransactionState( fs ) ); FeatureWriter<SimpleFeatureType, SimpleFeature> w1 = dataStore.getFeatureWriterAppend("ft1", tx1); FeatureWriter<SimpleFeatureType, SimpleFeature> w2 = dataStore.getFeatureWriterAppend("ft1", tx2); SimpleFeature f1 = w1.next(); SimpleFeature f2 = w2.next(); f1.setAttribute("intProperty", new Integer(100)); f2.setAttribute("intProperty", new Integer(101)); w1.write(); w2.write(); w1.close(); w2.close(); tx1.commit(); tx2.commit(); tx1.close(); tx2.close(); FeatureCollection<SimpleFeatureType, SimpleFeature> fc = dataStore.getFeatureSource("ft1").getFeatures(); assertEquals(5, fc.size()); } public void testSerialTransactions() throws IOException { FeatureStore<SimpleFeatureType, SimpleFeature> st = (FeatureStore<SimpleFeatureType, SimpleFeature>) dataStore.getFeatureSource( "ft1" ); SimpleFeatureBuilder b = new SimpleFeatureBuilder(st.getSchema()); b.set( "intProperty", new Integer(100)); SimpleFeature f1 = b.buildFeature(null); FeatureCollection<SimpleFeatureType, SimpleFeature> features = new DefaultFeatureCollection(null,null); features.add( f1 ); Transaction tx1 = new DefaultTransaction(); st.setTransaction(tx1); st.addFeatures( features ); tx1.commit(); tx1.close(); assertEquals(4, dataStore.getFeatureSource("ft1").getCount(Query.ALL)); Transaction tx2 = new DefaultTransaction(); st.setTransaction(tx2); st.addFeatures( features ); tx2.commit(); tx2.close(); assertEquals(5, dataStore.getFeatureSource("ft1").getCount(Query.ALL)); } }