The other thing you could do is to close the current transaction; and then set 
your transaction back to AUTO_COMMIT before you leave the method.

Andrea is correct that you should use a separate feature source for each one of 
your activities; and the Map rendering is an ongoing activity.

Interesting case!

Jody

On 30/04/2010, at 6:48 AM, Andrea Aime wrote:

> David Abdurachmanov ha scritto:
>> Hi,
>> 
>> The only example I found was http://geotools.org/examples/csv2shp.html 
>> (CSV2SHP). I rewrote the code I had and still I am not able to write 
>> Shapefile without any problems. Here is what I get:
> 
> You are leaving the feature store with the same transaction you
> have closed. From there on it won't be possible to do anything
> with it because of that.
> 
> Suggestion -> create a separate feature store if you want to play
> with transactions
> 
> Cheers
> Andrea
> 
>> Collection size (layer): 228
>> 2010-04-29 22.26.34 org.geotools.data.shapefile.ShapefileDataStore 
>> createSchema
>> WARNING: PRJ file not generated for null CoordinateReferenceSystem
>> Collection size: 228
>> 2010-04-29 22.26.35 org.geotools.renderer.lite.StreamingRenderer paint
>> SEVERE: Transaction has been closed
>> java.lang.IllegalStateException: Transaction has been closed
>>        at 
>> org.geotools.data.DefaultTransaction.getState(DefaultTransaction.java:153)
>>        at 
>> org.geotools.data.AbstractDataStore.state(AbstractDataStore.java:448)
>>        at 
>> org.geotools.data.AbstractDataStore.getFeatureReader(AbstractDataStore.java:375)
>>        at 
>> org.geotools.data.DefaultFeatureResults.reader(DefaultFeatureResults.java:210)
>>        at 
>> org.geotools.data.store.DataFeatureCollection.openIterator(DataFeatureCollection.java:224)
>>        at 
>> org.geotools.data.store.DataFeatureCollection.iterator(DataFeatureCollection.java:194)
>>        at 
>> org.geotools.renderer.lite.StreamingRenderer.drawOptimized(StreamingRenderer.java:1859)
>>        at 
>> org.geotools.renderer.lite.StreamingRenderer.processStylers(StreamingRenderer.java:1792)
>>        at 
>> org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:699)
>>        at 
>> org.geotools.swing.RenderingExecutor$Task.call(RenderingExecutor.java:148)
>>        at 
>> org.geotools.swing.RenderingExecutor$Task.call(RenderingExecutor.java:104)
>>        at 
>> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>>        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>>        at 
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>>        at 
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>>        at java.lang.Thread.run(Thread.java:637)
>> 
>> Here is my function user for saving MapLayer to the file:
>> 
>>    private void saveLayer(MapLayer layer, File file) throws Exception {
>>        DataStoreFactorySpi dataStoreFactory = new 
>> ShapefileDataStoreFactory();
>>        Map<String, Serializable> params = new HashMap<String, 
>> Serializable>();
>>        params.put("url", file.toURI().toURL());
>>        params.put("create spatial index", Boolean.TRUE);
>> 
>>        ShapefileDataStore newDataStore = 
>> (ShapefileDataStore)dataStoreFactory.createNewDataStore(params);
>>        FeatureSource featureSource = layer.getFeatureSource();
>> 
>>        System.out.println("Collection size (layer): " + 
>> layer.getFeatureSource().getFeatures().size());
>> 
>>        SimpleFeatureType type = 
>> (SimpleFeatureType)featureSource.getSchema();
>>        newDataStore.createSchema(type);
>>        newDataStore.forceSchemaCRS(DefaultGeographicCRS.WGS84);
>> 
>>        Transaction transaction = new DefaultTransaction("create");
>>        //String typeName = newDataStore.getTypeNames()[0];
>>        //featureSource = newDataStore.getFeatureSource(typeName);
>> 
>>        if (featureSource instanceof FeatureSource) {
>>            FeatureStore featureStore = (FeatureStore)featureSource;
>> 
>>            featureStore.setTransaction(transaction);
>>            FeatureCollection collection = featureSource.getFeatures();
>>            System.out.println("Collection size: " + collection.size());
>>            try {
>>                featureStore.addFeatures(collection);
>>                transaction.commit();
>>            } catch (Exception e) {
>>                e.printStackTrace();
>>                transaction.rollback();
>>            } finally {
>>                transaction.close();
>>            }
>>        } else {
>>            System.out.println("Can't write Shapefile.");
>> 
>>        }
>> }
>> 
>> Any thoughts why it is not working? MapLayer was loaded from Shapefile.
>> 
>> Regards,
>> David
>> 
>> ------------------------------------------------------------------------
>> Hotmail: Trusted email with powerful SPAM protection. Sign up now. 
>> <https://signup.live.com/signup.aspx?id=60969>
>> 
>> 
>> ------------------------------------------------------------------------
>> 
>> ------------------------------------------------------------------------------
>> 
>> 
>> ------------------------------------------------------------------------
>> 
>> _______________________________________________
>> Geotools-gt2-users mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
> 
> 
> -- 
> Andrea Aime
> OpenGeo - http://opengeo.org
> Expert service straight from the developers.
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> Geotools-gt2-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users


------------------------------------------------------------------------------
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to