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
