So if I understand you, our function lookup code may not be threadsafe? We do 
use an out of the box Java FactoryRegistery to manage our functions - in part 
because it is supposed to be threadsafe for lookup?

Can you tell us anymore about your threaded environment?

-- 
Jody Garnett

On Tuesday, 22 March 2011 at 2:36 AM, Alessandro Ferrucci wrote: 
> Sorry to bring this back to life but I have come up against this issue again, 
> when running under threaded environment.  Only happens using geotools 2.7.RC2
> 
> The weird thing is that the shapefile reading code works when running in the 
> main thread.  When I have multiple threads reading different shapefiles, I 
> will receive the following error message:
> 
> 
> ERROR 2011-03-21 11:16:28,250 [Thread-3] Test: Unable to find function Length
> java.lang.RuntimeException: Unable to find function Length
>  at org.geotools.filter.FunctionFinder.findFunction(FunctionFinder.java:103)
>  at org.geotools.filter.FunctionFinder.findFunction(FunctionFinder.java:69)
>  at org.geotools.filter.FilterFactoryImpl.function(FilterFactoryImpl.java:469)
>  at 
> org.geotools.feature.AttributeTypeBuilder.lengthRestriction(AttributeTypeBuilder.java:624)
>  at 
> org.geotools.feature.AttributeTypeBuilder.buildType(AttributeTypeBuilder.java:455)
>  at 
> org.geotools.feature.AttributeTypeBuilder.buildDescriptor(AttributeTypeBuilder.java:516)
>  at 
> org.geotools.data.shapefile.ShapefileDataStore.readAttributes(ShapefileDataStore.java:811)
>  at 
> org.geotools.data.shapefile.ShapefileDataStore.getSchema(ShapefileDataStore.java:714)
>  at 
> org.geotools.data.shapefile.ShapefileDataStore.getSchema(ShapefileDataStore.java:708)
>  at 
> org.geotools.data.shapefile.ShapefileDataStore.getFeatureSource(ShapefileDataStore.java:1040)
>  at Test$geom_reader_thread.run(Test.java:101)
>  at java.lang.Thread.run(Thread.java:619)
> 
> Here is the test program: to run under single thread just run:
> 
> java -cp <jarfiles> Test false
> 
> to run under threaded environment run:
> 
> java -cp <jarfiles> Test true
> 
> import java.io.File;
> import java.util.HashMap;
> import java.util.Map;
> import org.apache.log4j.Logger;
> import org.geotools.data.DataStore;
>  import org.geotools.data.DataStoreFinder;
> import org.geotools.data.FeatureSource;
> import org.geotools.feature.FeatureCollection;
> import org.geotools.feature.FeatureIterator;
> import org.opengis.feature.simple.SimpleFeature;
>  import org.opengis.feature.simple.SimpleFeatureType;
> 
> public class Test {
> 
>  private boolean threaded = false;
>  private String[] testshpfiles = new String[]{
>  "/home/ferru001/COLLECTION-SHAPEFILES/cp_2008_01_collblock_3.shp",
>  "/home/ferru001/COLLECTION-SHAPEFILES/cp_2008_02_collblock_3.shp",
>  "/home/ferru001/COLLECTION-SHAPEFILES/cp_2008_04_collblock_3.shp",
>  "/home/ferru001/COLLECTION-SHAPEFILES/cp_2008_05_collblock_3.shp",
>  "/home/ferru001/COLLECTION-SHAPEFILES/cp_2008_06_collblock_3.shp",
>  "/home/ferru001/COLLECTION-SHAPEFILES/cp_2008_08_collblock_3.shp"
>  };
>  private static final Logger logger = Logger.getLogger(Test.class);
> 
>  public static void main(String[] args) {
>  boolean threaded = Boolean.parseBoolean(args[0]);
> logger.info("threaded=" + threaded);
>  new Test(threaded).runTest();
>  }
> 
>  public Test(boolean threaded) {
>  this.threaded = threaded;
>  }
> 
>  public void runTest() {
>  if (threaded) {
>  for (String testshpfile : testshpfiles) {
>  new Thread(new geom_reader_thread(testshpfile)).start();
>  }
>  }
>  else {
>  for (String testshpfile : testshpfiles) {
> logger.info("reading "+testshpfile);
>  read_geom(testshpfile);
>  }
>  }
>  }
> 
>  public void read_geom(String shpfile) {
>  try {
>  File shpfilef = new File(shpfile);
>  Map map = new HashMap();
>  map.put("url", shpfilef.toURI().toURL());
>  DataStore store = DataStoreFinder.getDataStore(map);
>  String typeName = store.getTypeNames()[0];
>  FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = 
> store.getFeatureSource(typeName);
>  FeatureCollection<SimpleFeatureType, SimpleFeature> collection = 
> featureSource.getFeatures();
>  FeatureIterator<SimpleFeature> iterator = collection.features();
>  while (iterator.hasNext()) {
>  SimpleFeature feature = iterator.next();
>  String colblkst = (String) feature.getAttribute(1);
>  String colblkcou = (String) feature.getAttribute(2);
>  String colblk = (String) feature.getAttribute(3);
>  }
>  }
>  catch (Exception ex) {
>  logger.error(ex.getMessage(), ex);
>  }
>  }
> 
>  class geom_reader_thread implements Runnable {
> 
>  private String shpfile;
> 
>  public geom_reader_thread(String shpfile) {
>  this.shpfile = shpfile;
>  }
> 
>  public void run() {
> logger.info("reading "+shpfile);
>  File shpfilef = new File(shpfile);
>  Map map = new HashMap();
>  try {
>  map.put("url", shpfilef.toURI().toURL());
>  DataStore store = DataStoreFinder.getDataStore(map);
>  String typeName = store.getTypeNames()[0];
>  FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = 
> store.getFeatureSource(typeName);
>  FeatureCollection<SimpleFeatureType, SimpleFeature> collection = 
> featureSource.getFeatures();
>  FeatureIterator<SimpleFeature> iterator = collection.features();
>  while (iterator.hasNext()) {
>  SimpleFeature feature = iterator.next();
>  String colblkst = (String) feature.getAttribute(1);
>  String colblkcou = (String) feature.getAttribute(2);
>  String colblk = (String) feature.getAttribute(3);
>  }
>  }
>  catch (Exception ex) {
>  logger.error(ex.getMessage(), ex);
>  }
>  }
>  }
> }
> 
> 
> On Sat, Mar 19, 2011 at 4:56 PM, Alessandro Ferrucci 
> <[email protected]> wrote:
> > Andrea,
> > 
> > In fact I've decided that it is undoubtedly easier to work with maven when 
> > using geotools.
> > 
> > I will go back to using maven moving forward.
> > 
> > Thanks for your assistance.
> > 
> > Regards,
> > 
> > Alessandro Ferrucci
> > 
> > 
> > On Sat, Mar 19, 2011 at 3:48 AM, Andrea Aime <[email protected]> 
> > wrote:
> > > On Fri, Mar 18, 2011 at 11:31 PM, Alessandro Ferrucci
> > > <[email protected]> wrote:
> > > 
> > > > I've found lots of postings about people having this exact same issue 
> > > > but
> > > > they were all using maven plugin voodoo and creating these service 
> > > > functions
> > > > at build time... I am not using maven but pre-built bin jars downloaded 
> > > > from
> > > 
> > > Alessandro,
> > >  the only way to keep it simple is to use maven, what you're doing is 
> > > trying to
> > >  divine the list or required jars out of thin air, that's the real voodoo.
> > > 
> > >  If you need to read a shapefile the minimum set of jars you need, and 
> > > really
> > >  don't want to use maven to build, you'll still have to use maven, and the
> > >  gt2 sources, to get the list of required jars.
> > > 
> > >  Running mvn depency:list from the gt-shapefile module one gets:
> > > 
> > >  mvn dependency:list -o
> > >  [INFO]
> > >  NOTE: Maven is executing in offline mode. Any artifacts not already in
> > >  your local
> > >  repository will be inaccessible.
> > > 
> > >  [INFO] Scanning for projects...
> > >  [INFO] Searching repository for plugin with prefix: 'dependency'.
> > >  [INFO] 
> > > ------------------------------------------------------------------------
> > >  [INFO] Building Shapefile module
> > >  [INFO] task-segment: [dependency:list]
> > >  [INFO] 
> > > ------------------------------------------------------------------------
> > >  [INFO] [dependency:list {execution: default-cli}]
> > >  [INFO]
> > >  [INFO] The following files have been resolved:
> > >  [INFO] com.vividsolutions:jts:jar:1.11:compile
> > >  [INFO] commons-pool:commons-pool:jar:1.5.4:compile
> > >  [INFO] hsqldb:hsqldb:jar:1.8.0.7:test
> > >  [INFO] java3d:vecmath:jar:1.3.2:compile
> > >  [INFO] javax.media:jai_core:jar:1.1.3:provided
> > >  [INFO] jdom:jdom:jar:1.0:compile
> > >  [INFO] junit:junit:jar:4.4:test
> > >  [INFO] net.java.dev.jsr-275:jsr-275:jar:1.0-beta-2:compile
> > >  [INFO] org.geotools:gt-api:jar:2.8-SNAPSHOT:compile
> > >  [INFO] org.geotools:gt-data:jar:2.8-SNAPSHOT:compile
> > >  [INFO] org.geotools:gt-epsg-hsql:jar:2.8-SNAPSHOT:test
> > >  [INFO] org.geotools:gt-main:jar:2.8-SNAPSHOT:compile
> > > 
> > >  To run you'll need all the compile and provided ones, plugin a epsg db 
> > > plugin,
> > >  like gt-epsg-wkt or gt-epsg-hsql (but not both, see the documentation).
> > > 
> > >  Cheers
> > >  Andrea
> > > 
> > > 
> > > 
> > >  --
> > >  -------------------------------------------------------
> > >  Ing. Andrea Aime
> > >  GeoSolutions S.A.S.
> > >  Tech lead
> > > 
> > >  Via Poggio alle Viti 1187
> > >  55054 Massarosa (LU)
> > >  Italy
> > > 
> > >  phone: +39 0584 962313
> > >  fax: +39 0584 962313
> > >  mob: +39 333 8128928
> > > 
> > > http://www.geo-solutions.it
> > > http://geo-solutions.blogspot.com/
> > > http://www.youtube.com/user/GeoSolutionsIT
> > > http://www.linkedin.com/in/andreaaime
> > > http://twitter.com/geowolf
> > > 
> > >  -------------------------------------------------------
> > > 
> > 
> > 
> > -- 
> > Signed,
> > Alessandro Ferrucci
> > 
> 
> 
> -- 
> Signed,
> Alessandro Ferrucci
> ------------------------------------------------------------------------------
> Colocation vs. Managed Hosting
> A question and answer guide to determining the best fit
> for your organization - today and in the future.
> http://p.sf.net/sfu/internap-sfd2d
> _______________________________________________
> Geotools-gt2-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
> 
------------------------------------------------------------------------------
Enable your software for Intel(R) Active Management Technology to meet the
growing manageability and security demands of your customers. Businesses
are taking advantage of Intel(R) vPro (TM) technology - will your software 
be a part of the solution? Download the Intel(R) Manageability Checker 
today! http://p.sf.net/sfu/intel-dev2devmar
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to