[Gfoss] spatialite e geoserver

Salve a tutti
sto cercando di connettere spatialite a geoserver su win32.
Ho seguito le raccomandazioni trovate qui [1]
ma non riesco a farlo funzionare correttamente.
Al momento di aggiungere un nuovo "data store", geoserver correttamente mi da l'opzione di Spatialite; seleziono il db e nella publicazione dei nuovi Layers vede correttamente le tabelle del db spatialite.
Quando però cerco di fargli calcolare il BBox del layer da pubblicare, fallisce; inserendo manualmente i valori di envelope, riesco a pubblicare il layer ma poi geoserver non eroga il servizio. La preview di geoserver su openlayers mi ritorna il seguente errore: [SQLITE_ERROR] sql error or missing database (no such function:AsText)
che dovrebbe indicare un errore sulle shared lib di splite (da quì l'errore anche sulla funzione envelope per il calcolo del bbox)
Dalle poche info che ho trovato sembra dovuto alle dll di proj e geos che devono risiedere nelle PATH di sistema. Per andare sul sicuro le ho copiate tutte in windows\system32, ma non mi funziona lo stesso.
Analogamente provando a caricare su qgis il wfs del layer pubblicato, lo individua, lo carica, ma rimane inesorabilmente vuoto.
Qualcuno mi sa indicare una soluzione?

[1] http://docs.geoserver.org/latest/en/user/community/spatialite/index.html#spatialite-install

On Thu, 09 Jun 2011 17:02:57 +0200, Benedetto Porfidia wrote

Salve a tutti
sto cercando di connettere spatialite a geoserver su win32.
Ho seguito le raccomandazioni trovate qui [1]
ma non riesco a farlo funzionare correttamente.

Benedetto,

giusto un paio di puntualizzazioni per spiegarti
bene come funziona.

a) GeoServer è scritto in Java: quindi per
  prima cosa deve caricarsi un appropriato
  connector JNI che gli consenta di caricare
  la DLL nativa (codice binario) per SQLite

b) a questo punto verrà caricata una ulteriore
  DLL (quella di spatialite) che aggiunge il
  supporto Spatial a SQLite.
  ovvio che se per qualsiasi motivo il caricamento
  della DLL di spatialite fallisce, GeoServer
  si troverà nell'assoluta impossibilità di usare
  l'estensione Spatial

ed è esattamente quello che succede a te: quando
ti ritrovi l'errore "no such function: AsText"
significa esattamente che la DLL di spatialite
non è stata affatto caricata.

non ho esperienza diretta, ma immagino che nel
logfile di GeoServer dovresti sicuramente trovare
qualche indicazione in merito (in genere il log
di GeoServer è molto verboso, ma è anche assai
dettagliato e preciso).

una della cause più comuni (ma non è affatto l'unica)
che impediscono il caricamento della DLL di spatialite
è proprio dovuta al fatto che manca qualche ulteriore DLL:
come dice correttamente la documentazione di GeoServer
da te indicata, sicuramente occorrono le DLL di
GEOS e di PROJ. Su Linux la storia finisce qua.

Ma su Windows occorre una ulteriore DLL: e precisamente
quella che supporta ICONV (locale charset, UTF-8), che
è un componente 'naturale' su Linux, mentre richiede
una libreria apposita su WinOz.

comunque puoi scaricare libiconv2.dll da qua:
http://www.gaia-gis.it/spatialite-2.4.0-4/dependencies-win-x86.zip

Circa la directory più opportuna in cui piazzare
le DLL, le regole di ricerca di Windows sono abbastanza
capricciose, e spesso quello che funziona su XP non
funziona affatto su Win7 o su WinServer.
ma se le installi tutte su C:\Windows\System32
dovrebbe ragionevolmente funzionare in tutti i casi.

fammi sapere come va a finire, son curioso :wink:
ciao Sandro

Sandro,
grazie
tutto chiarissimo

solo una cosa perchè -ahimè - mi trovo più a mio agio su Linux che non su windows, ma in ufficio quello è quel che passa il convento :frowning:

gli include e le lib sono necessarie? dove vanno messe?
o basta solo copiare le dll in c:blabla\system32?
perchè le dll incriminate (esattamente il pacchetto del link che hai indicato) le ho già installate (sempre in c_win_sys32) come anche le dll di geos e proj.
Adesso purtroppo sono a casa e non ho un pc windows per provare.

In ogni caso il mio obiettivo è testare un WFS per circa un paio di GB di dati (circa 500K poligoni) che vorrei fossero sempre residenti in RAM; ovviamente il servizio non deve erogare tutto il dataset in una volta, ma vorrei che tutto il dataset sia sempre "pronto" evitando i passaggi di lettura su disco.
E' sensato oppure è un'idea totalmente fuori di senno? :slight_smile:

Questa prova la sto facendo su una normale workstation con 4GB di ram e un dataset limitato di 50k poligoni

Grazie ancora ....e sicuramente informerò

Benedetto

Quoting a.furieri@lqt.it:

comunque puoi scaricare libiconv2.dll da qua:
http://www.gaia-gis.it/spatialite-2.4.0-4/dependencies-win-x86.zip

Circa la directory più opportuna in cui piazzare
le DLL, le regole di ricerca di Windows sono abbastanza
capricciose, e spesso quello che funziona su XP non
funziona affatto su Win7 o su WinServer.
ma se le installi tutte su C:\Windows\System32
dovrebbe ragionevolmente funzionare in tutti i casi.

fammi sapere come va a finire, son curioso :wink:
ciao Sandro

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

On Thu, 09 Jun 2011 20:20:49 +0200, benedetto.porfidia wrote

gli include e le lib sono necessarie? dove vanno messe?

no, a te non servono affatto. servono invece agli
sviluppatori che intendono compilare codice C/C++

o basta solo copiare le dll in c:blabla\system32?

si, a te basta il mero supporto binario di run-time,
cioè le DLLs

perchè le dll incriminate (esattamente il pacchetto del link che hai
indicato) le ho già installate (sempre in c_win_sys32) come anche
le dll di geos e proj. Adesso purtroppo sono a casa e non ho un pc
windows per provare.

mmm ... allora sono dolori di pancia.
in bocca al lupo, e buon debugging :wink:
* nota per il lettore: fare questo tipo di debugging
  su WinOz è come andare a cercare un ago in un pagliaio
  in piena notte nell'oscurità più totale :smiley:

In ogni caso il mio obiettivo è testare un WFS per circa un paio di
GB di dati (circa 500K poligoni) che vorrei fossero sempre
residenti in RAM; ovviamente il servizio non deve erogare tutto il
dataset in una volta, ma vorrei che tutto il dataset sia sempre
"pronto" evitando i passaggi di lettura su disco. E' sensato oppure
è un'idea totalmente fuori di senno? :slight_smile:

no, non è affatto fuori di senno.
BTW sqlite implementa un meccanismo molto elegante che ti
consente di trasferire tutto un intero DB in ram (e poi
eventualmente di salvarlo nuovamente su disco al termine).
ed ovviamente le performances diventano "oltre il
muro del suono" :slight_smile:
ma non saprei proprio dirti se il connector JDBC supporti
questa opzione ... a naso direi proprio di no.
in ogni caso puoi ottenere lo stesso risultato
semplicemente dichiarando una cache SQLite molto
generosa:
http://www.sqlite.org/pragma.html#pragma_cache_size

n.b.: una PRAGMA la esegui esattamente come se fosse
una SELECT, quindi basta che la esegui nelle primissime
fasi di avvio della connessione: ma dubito molto che
si possa fare tramite GeoServer.

l'unica differenza è che nel primo caso sicuramente
tutto il db è residente in memoria, nel secondo caso
(cache) le pagine verranno caricate in memoria solo
nel momento in cui sarenno via via interrogate
(insomma, hai un costo di "primo accesso" più alto).

Questa prova la sto facendo su una normale workstation con 4GB di
ram e un dataset limitato di 50k poligoni

qua sbatti contro un muro di cemento armato :frowning:
per WinOz abbiamo disponibile solo la versione 32 bit,
che per ovvi motivi non riesce proprio a vedere più di
2 GB RAM (realisticamante, 1.5GB nel mondo reale).
non dovresti avere problemi con il dataset castrato,
ma con quello completo vai sicuramente fuori memoria.
magari potresti provare su Linux 64 bit.

in ogni caso tieni presente che se il DB "sequestra"
una quantità esagerata di RAM, poi probabilmente le
performances globali *calerano*, perchè entreranno
in sofferenza la JVM ed altri componenti critici ...
insomma, andrebbe monitorato accuratamente facendo
un tuning ultra-fine per avere dei benefici reali.

ciao Sandro

Il 10/06/2011 12.14, a.furieri@lqt.it ha scritto:

mmm ... allora sono dolori di pancia.
in bocca al lupo, e buon debugging :wink:
* nota per il lettore: fare questo tipo di debugging
   su WinOz è come andare a cercare un ago in un pagliaio
   in piena notte nell'oscurità più totale :smiley:

penso che faccio prima a mettere su una macchina lin64, anche perchè non riesco a venirne a capo: copio parte dei log di geoserver (l'error è su Astext ma il log è analogo per le altre funzioni spatial)

Caused by: java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such function: AsText)
  at org.sqlite.DB.newSQLException(DB.java:385)
  at org.sqlite.DB.newSQLException(DB.java:389)
  at org.sqlite.DB.throwex(DB.java:376)
  at org.sqlite.NestedDB.prepare(NestedDB.java:140)
  at org.sqlite.DB.prepare(DB.java:125)
  at org.sqlite.Stmt.executeQuery(Stmt.java:121)
  at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
  at org.geotools.jdbc.JDBCFeatureReader.<init>(JDBCFeatureReader.java:147)
  at org.geotools.jdbc.JDBCFeatureSource.getReaderInternal(JDBCFeatureSource.java:557)
  ... 148 more

sinceramente non so proprio dove andare a parare,
sembra che non vengano caricati i due file jar di plugin di geoserver relativi a spatialite o che abbiano qualche bug.

qua sbatti contro un muro di cemento armato :frowning:
per WinOz abbiamo disponibile solo la versione 32 bit,
che per ovvi motivi non riesce proprio a vedere più di
2 GB RAM (realisticamante, 1.5GB nel mondo reale).
non dovresti avere problemi con il dataset castrato,
ma con quello completo vai sicuramente fuori memoria.
magari potresti provare su Linux 64 bit.

in ogni caso tieni presente che se il DB "sequestra"
una quantità esagerata di RAM, poi probabilmente le
performances globali *calerano*, perchè entreranno
in sofferenza la JVM ed altri componenti critici ...
insomma, andrebbe monitorato accuratamente facendo
un tuning ultra-fine per avere dei benefici reali.

ciao Sandro

ben consapevole dei limiti del sistema, la prova serviva apposta per verificare se il metodo è applicabile.
Ti ringrazio dei suggerimenti preziosi e continuerò a tenervi/ti aggiornati/o

ciao Benedetto

On Fri, 10 Jun 2011 12:46:04 +0200, Benedetto Porfidia wrote

> Caused by: java.sql.SQLException: [SQLITE_ERROR] SQL error or missing

database (no such function: AsText)

blah blah blah

ok, ma l'errore "vero" è ancora più a monte.
tutto questo succede semplicemente perchè non è
stata caricata l'estensione SpatiaLite.
mi aspetterei di trovare in cima alla pila
qualcosa tipo "errore: non riesco a caricare
spatialite causa XXXXX" o roba del genere ...

ciao Sandro