Je crée une fois geotools
'SimpleFeatureCollection
à partir d'un fichier de forme sur le disque dur. J'appelle alors sa méthode .features()
une tonne de fois. Jusqu'à présent, je croyais que c'était une bonne pratique, mais il semble ne pas l'être. Après l'appel de la méthode de fonctionnalité une fois de trop, je reçoisL'appel de SimpleFeatureCollection.features() de geotools entraîne un nombre de fois supérieur à "Nombre maximal de verrous dépassé"
Exception in thread "main" java.lang.Error: Maximum lock count exceeded
at java.util.concurrent.locks.ReentrantReadWriteLock$Sync.fullTryAcquireShared(ReentrantReadWriteLock.java:528)
at java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryAcquireShared(ReentrantReadWriteLock.java:488)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(AbstractQueuedSynchronizer.java:1282)
at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:727)
at org.geotools.data.shapefile.files.ShpFiles.acquireRead(ShpFiles.java:358)
at org.geotools.data.shapefile.files.ShpFiles.getReadChannel(ShpFiles.java:789)
at org.geotools.data.shapefile.shp.ShapefileReader.<init>(ShapefileReader.java:253)
at org.geotools.data.shapefile.ShapefileSetManager.openShapeReader(ShapefileSetManager.java:51)
at org.geotools.data.shapefile.ShapefileFeatureSource.getReaderInternal(ShapefileFeatureSource.java:263)
at org.geotools.data.shapefile.ShapefileFeatureStore.getReaderInternal(ShapefileFeatureStore.java:124)
at org.geotools.data.store.ContentFeatureSource.getReader(ContentFeatureSource.java:563)
at org.geotools.data.store.ContentFeatureCollection.features(ContentFeatureCollection.java:165)
Comment puis-je éviter que cela se produise? Quelle est la bonne pratique de codage ici? Dois-je utiliser le fichier de forme pour créer le SimpleFeatureCollection
chaque fois avant d'appeler sa méthode .features()
? Toute idée serait grandement apprécié.
Eureka! Cela l'a résolu. Merci beaucoup. Je n'ai jamais fermé un itérateur auparavant, mais il y en a toujours un premier. Est-ce que les itérateurs doivent être fermés en général, ou est-ce simplement celui-ci qui doit être fermé? – dotwin
Juste ceux-ci car ils ont de vraies ressources sous eux –