ngageoint / geopackage-java

GeoPackage Java Library
http://ngageoint.github.io/geopackage-java
MIT License
81 stars 26 forks source link

getTileDao thread safety #35

Closed bosborn closed 6 years ago

bosborn commented 7 years ago

Reported by a NGA opensphere developer

Version Information:

Expected Results:

Observed Results:

Output:

FATAL:09/21/2017 21:25:28.726 [Envoy[GeoPackageImageEnvoy]-52] (io.opensphere.core.appl.UncaughtExceptionHandler:28) - Uncaught Exception: mil.nga.geopackage.GeoPackageException: Failed to retrieve TileDao for table name: tiles. Exception retrieving TileMatrixSet. mil.nga.geopackage.GeoPackageException: Failed to retrieve TileDao for table name: tiles. Exception retrieving TileMatrixSet. at mil.nga.geopackage.manager.GeoPackageImpl.getTileDao(GeoPackageImpl.java:250) at io.opensphere.geopackage.envoy.GeoPackageImageEnvoy.query(GeoPackageImageEnvoy.java:126) at io.opensphere.core.data.CachingDataRegistryDataProvider$1.run(CachingDataRegistryDataProvider.java:163) at io.opensphere.core.data.DefaultQueryTracker$RunnableWrapper.run(DefaultQueryTracker.java:517) at io.opensphere.core.util.lang.TaskCanceller$3.lambda$0(TaskCanceller.java:167) at io.opensphere.core.util.lang.TaskCanceller$1.call(TaskCanceller.java:105) at io.opensphere.core.util.lang.TaskCanceller$3.run(TaskCanceller.java:169) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at io.opensphere.core.util.concurrent.PausingThreadPoolExecutor$WorkerProxy.run(PausingThreadPoolExecutor.java:306) at java.lang.Thread.run(Thread.java:745) at io.opensphere.core.util.lang.NamedThreadFactory$1.run(NamedThreadFactory.java:84) Caused by: java.sql.SQLException: Failed to parse date string: 2017-07-31T14:22:03.494Z at mil.nga.geopackage.persister.DatePersister.sqlArgToJava(DatePersister.java:82) at com.j256.ormlite.field.BaseFieldConverter.resultToJava(BaseFieldConverter.java:30) at com.j256.ormlite.field.FieldType.resultToJava(FieldType.java:841) at com.j256.ormlite.stmt.mapped.BaseMappedQuery.mapRow(BaseMappedQuery.java:61) at com.j256.ormlite.jdbc.JdbcDatabaseConnection.queryForOne(JdbcDatabaseConnection.java:310) at com.j256.ormlite.jdbc.JdbcDatabaseConnection.queryForOne(JdbcDatabaseConnection.java:224) at com.j256.ormlite.stmt.mapped.MappedQueryForFieldEq.execute(MappedQueryForFieldEq.java:38) at com.j256.ormlite.field.FieldType.createForeignObject(FieldType.java:1047) at com.j256.ormlite.field.FieldType.assignField(FieldType.java:556) at com.j256.ormlite.stmt.mapped.BaseMappedQuery.mapRow(BaseMappedQuery.java:72) at com.j256.ormlite.stmt.SelectIterator.getCurrent(SelectIterator.java:284) at com.j256.ormlite.stmt.SelectIterator.nextThrow(SelectIterator.java:168) at com.j256.ormlite.stmt.StatementExecutor.query(StatementExecutor.java:202) at com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:277) at com.j256.ormlite.stmt.QueryBuilder.query(QueryBuilder.java:366) at com.j256.ormlite.stmt.Where.query(Where.java:480) at com.j256.ormlite.dao.BaseDaoImpl.queryForEq(BaseDaoImpl.java:253) at mil.nga.geopackage.manager.GeoPackageImpl.getTileDao(GeoPackageImpl.java:244) ... 11 more Caused by: java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Long.parseLong(Long.java:601) at java.lang.Long.parseLong(Long.java:631) at java.text.DigitList.getLong(DigitList.java:195) at java.text.DecimalFormat.parse(DecimalFormat.java:2051) at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:2162) at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1514) at java.text.DateFormat.parse(DateFormat.java:364) at mil.nga.geopackage.db.DateConverter.dateValue(DateConverter.java:127) at mil.nga.geopackage.persister.DatePersister.sqlArgToJava(DatePersister.java:80) ... 28 more

Steps to Reproduce:

Threaded calls to: myGeoPackage.getTileDao(layer);

Relevant Code:

myGeoPackage.getTileDao(layer);

Additional Information:

bosborn commented 7 years ago

Fixed on geopackage-core-java.

Will be released under version 1.3.2 2.0.0 for both geopackage-java and geopackage-core-java.

bosborn commented 6 years ago

Fix released as geopackage-java 2.0.0 and geopackage-core-java 2.0.0.