gvSIG bugs #3966

Updated by JoaquĆ­n del Cerro Murciano over 8 years ago

Se trata de un error dificil de relacionar con lo que el usuario ve.

Al arrancar presentaba en el log el mensaje:

<pre>
INFO main org.gvsig.tools.library.AbstractLibrary - Can't postinitialize library 'org.gvsig.fmap.dal.store.jdbc.JDBCLibrary'.
Error importing classes from file at line 36 column 87. Can't locate DynClass 'Persistence:DBResourceParameters. Look at the extends tag.
at org.gvsig.tools.dynobject.impl.DynClassImportHelper.importDynClass(DynClassImportHelper.java:319)
at org.gvsig.tools.dynobject.impl.DynClassImportHelper.importDefinitions(DynClassImportHelper.java:189)
at org.gvsig.tools.dynobject.impl.DynClassImportHelper.importDefinitions(DynClassImportHelper.java:94)
at org.gvsig.tools.dynobject.impl.DefaultDynObjectManager.importDynClassDefinitions(DefaultDynObjectManager.java:649)
at org.gvsig.tools.persistence.impl.AbstractPersistenceManager.addDefinition(AbstractPersistenceManager.java:387)
at org.gvsig.fmap.dal.store.db.DBHelper.registerParametersDefinition(DBHelper.java:49)
at org.gvsig.fmap.dal.store.jdbc.JDBCLibrary.doPostInitialize(JDBCLibrary.java:61)
at org.gvsig.tools.library.AbstractLibrary.postInitialize(AbstractLibrary.java:358)
at org.gvsig.tools.library.AbstractLibrariesInitializer.initializeLibraries(AbstractLibrariesInitializer.java:252)
at org.gvsig.tools.library.AbstractLibrariesInitializer.postInitialize(AbstractLibrariesInitializer.java:105)
at org.gvsig.tools.library.AbstractLibrariesInitializer.fullInitialize(AbstractLibrariesInitializer.java:116)
at org.gvsig.andami.Launcher.initializeLibraries(Launcher.java:783)
at org.gvsig.andami.Launcher.doMain(Launcher.java:569)
at org.gvsig.andami.Launcher.main(Launcher.java:394)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.gvsig.andamiupdater.Updater.launchApp(Updater.java:106)
at org.gvsig.andamiupdater.Updater.main(Updater.java:68)

</pre>

Despues de muchas vueltas he dado con el problema. Estaba en la ordenacion de las dependencias de DALLibrary:

<pre>
- org.gvsig.timesupport.TimeSupportLibrary
- org.gvsig.fmap.dal.DALLibrary (API of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.impl.DALDefaultImplLibrary (IMPL of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.jdbc.JDBCLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.postgresql.PostgreSQLLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.DALDbLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.resource.db.DBResourceLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.db.DBStoreLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.DALFileLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.dbf.DBFLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.csv.CSVLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.shp.SHPLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.memory.MemoryStoreLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.annotation.AnnotationLibrary (API of org.gvsig.annotation.AnnotationLibrary)

</pre>

Podemos ver que intenta inicializar antes JDBCLibrary que DBResourceLibrary y DBStoreLibrary que son dependencias transitivas de ella. Siempre ignoraba las dependencias transitivas a la hora de ordenar los servicios de una libreria. Esto podia o no deribar en un error, ya que si debido al azar estas podian quedar ordenadas correctamente o de forma que no se produjesen errores.

La correccion puede ocasionar que algunas otras cosas fallen, ya que ahora va a cambiar el orden en como se inicializaban las cosas, pero con la correccion el actual parece que el orden es el indicado en las dependencias, dependencias y ahora es predecible.

Ahora por ejemplo, en lo que se refiera a DALLibrary genera:
<pre>
- org.gvsig.metadata.lib.basic.impl.BasicMetadataLibrary (IMPL of org.gvsig.metadata.MetadataLibrary) xxxx
- org.gvsig.fmap.dal.DALLibrary (API of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.impl.DALDefaultImplLibrary (IMPL of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.DALDbLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.resource.db.DBResourceLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.db.DBStoreLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.jdbc.JDBCLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.postgresql.PostgreSQLLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.DALFileLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.dbf.DBFLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.csv.CSVLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.shp.SHPLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.fmap.dal.store.memory.MemoryStoreLibrary (SERVICE of org.gvsig.fmap.dal.DALLibrary)
- org.gvsig.annotation.AnnotationLibrary (API of org.gvsig.annotation.AnnotationLibrary)

</pre>

El error este lo he detectado cuando iba a intentar corregir #3810, pero no se ti tiene o no que ver con el.

Back