Package org.geotools.jdbc

Source Code of org.geotools.jdbc.JDBCConnectionLifecycleTest$ExceptionListener

/*
*    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 java.sql.Connection;
import java.sql.SQLException;

import org.geotools.data.DefaultTransaction;
import org.geotools.data.Query;
import org.geotools.data.Transaction;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.feature.DefaultFeatureCollection;
import org.geotools.feature.simple.SimpleFeatureBuilder;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;

public abstract class JDBCConnectionLifecycleTest extends JDBCTestSupport {

    protected MockListener mockListener = new MockListener();

   

    JDBCFeatureStore featureStore;

    protected void connect() throws Exception {
        super.connect();
        featureStore = (JDBCFeatureStore) dataStore.getFeatureSource(tname("ft1"));
    }

    /**
     * Check null encoding is working properly
     *
     * @throws IOException
     */
    public void testListenerCalled() throws IOException {
        dataStore.getConnectionLifecycleListeners().add(mockListener);
       
        // read some features, this will force unwrapping in Oracle
        SimpleFeatureIterator fi = null;
        try {
            fi = featureStore.getFeatures().features();
            while(fi.hasNext()) {
                fi.next();
            }
        } finally {
            if(fi != null) {
                fi.close();
            }
        }
        assertTrue(mockListener.onBorrowCalled);
        assertTrue(mockListener.onReleaseCalled);
        assertFalse(mockListener.onCommitCalled);
        assertFalse(mockListener.onRollbackCalled);
       
        // now write something within a transaction
        Transaction t = new DefaultTransaction();
        SimpleFeatureBuilder b = new SimpleFeatureBuilder(featureStore.getSchema());
        DefaultFeatureCollection collection = new DefaultFeatureCollection(null,
                featureStore.getSchema());
        featureStore.setTransaction(t);
        for (int i = 3; i < 6; i++) {
            b.set(aname("intProperty"), new Integer(i));
            b.set(aname("geometry"), new GeometryFactory().createPoint(new Coordinate(i, i)));
            collection.add(b.buildFeature(null));
        }
        featureStore.addFeatures((SimpleFeatureCollection)collection);
        t.commit();
        assertTrue(mockListener.onBorrowCalled);
        assertTrue(mockListener.onReleaseCalled);
        assertTrue(mockListener.onCommitCalled);
        assertFalse(mockListener.onRollbackCalled);
       
        // and now do a rollback
        t.rollback();
        assertTrue(mockListener.onRollbackCalled);
        t.close();
    }
   
    public void testConnectionReleased() throws IOException {
        dataStore.getConnectionLifecycleListeners().add(new ExceptionListener());
       
        // get a count repeatedly, if we fail to release the connections this will eventually lock up
        for (int i = 0; i < 100; i++) {
            // we don't actually expect an exception to percolate up since it's happening
            // on the closeSafe method, that swallows exceptions
            featureStore.getCount(Query.ALL);
        }
    }
   
    private static class MockListener implements ConnectionLifecycleListener {

        boolean onBorrowCalled = false;

        boolean onReleaseCalled = false;

        boolean onCommitCalled;

        boolean onRollbackCalled;

        public void onBorrow(JDBCDataStore store, Connection cx) throws SQLException {
            onBorrowCalled = true;
        }

        public void onRelease(JDBCDataStore store, Connection cx) throws SQLException {
            onReleaseCalled = true;
        }

        public void onCommit(JDBCDataStore store, Connection cx) throws SQLException {
            onCommitCalled = true;
           
        }

        public void onRollback(JDBCDataStore store, Connection cx) throws SQLException {
            onRollbackCalled = true;
           
        }

    }
   
    private static class ExceptionListener implements ConnectionLifecycleListener {

        public void onBorrow(JDBCDataStore store, Connection cx) throws SQLException {
            // nothing to do
        }

        public void onRelease(JDBCDataStore store, Connection cx) throws SQLException {
            throw new SQLException("Ha, are you relasing the connection anyways??");
        }

        public void onCommit(JDBCDataStore store, Connection cx) throws SQLException {
            throw new SQLException("Nope, no writes sir");
        }

        public void onRollback(JDBCDataStore store, Connection cx) throws SQLException {
            // nothing to do
        }

    }

}
TOP

Related Classes of org.geotools.jdbc.JDBCConnectionLifecycleTest$ExceptionListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.