Archivi categoria: VARIE

TUTORIAL – CONFIGURARE CLIENT PER CANTALOUPE IMAGE SERVER

L’articolo illustra come configurare un client che si colleghi a Cantaloupe. Una volta configurato Cantaloupe occorre realizzare un client per poter usare i servizi esposti e mostrare le derivate richieste. Per poter usare i servizi andrebbe realizzato un rest client, ma il mercato già offre dei client in javascript che permettono di vedere l’immagine con comodo funzioni di zoom,

La prima scelta è leaflet  che implementa la gestione di una mappa interattiva.  Per poterla usare è sufficiente realizzare una pagina html che chiami la pagina la pagina info.json dell’immagine desiderata, come illustrato sotto

se  avete operato bene chiamando la pagina html vedremo la nostra immagine con le funzioni di zoom attive.

 

Un altro client utilizzabile è  Openseadragon  , che aumenta il numero di funzioni a disposizione e presenta opzioni per gestire tutti i casi d’uso comuni. Se la banda non è un problema è possibile integrare l’immagine completa e demandare al client la gestione dello zoom

In questo modo scarichiamo il carico computazionale sul client e Cantaloupe non effettua elaborazioni, mentre se vogliamo sfruttare la potenza di Cantaloupe il codice da usare è il seguente

TUTORIAL – CANTALOUPE IMAGE SERVER

Per esigenze lavorative ho dovuto utilizzare un image server, capace di effettuare trasformazione di immagini a runtime per adattare le immagini a qualsiasi dispositivo. La scelta è caduta su Cantaloupe, un image server scritto in java compliant con le API IIIF, che definiscono un interfaccia di servizi da invocare per effettuare le principali operazioni sulle immagini. Installare e avviare Cantaloupe è molto semplice, è sufficiente scaricare dalla homepage  il file zip contenente i binari, scompattare e lanciare l’eseguibile non prima di aver creato il file di configurazione nella stessa cartella. Per la mia installazione ho usato Cantaloupe v. 3.3.5 e per avviare il server ho usato la direttiva

La configurazione di default prevede che il server stia in ascolto sulla porta 8182, pertanto se avete fatto tutto correttamente accedendo al link http://localhost:8182/ comparirà la nostra home page, ovvero una bella fetta di cantalupo indicante la versione corrente.

A questo punto attiviamo il pannello di amministrazione. Per farlo accediamo al file di configurazione e attiviamo tramite la sezione

Nel mio caso ho scelto admin come password, riavviamo e accediamo al link http://localhost:8182/admin, inseriamo i dati accesso ed ecco il nostro pannello

Per le informazioni sulle varie funzionalità a disposizione rimando al manuale, soffermiaci su 2 schede in particolare: resolvers e processors. I processors sono gli oggetti che effettuano le trasformazioni sulle immagini e sono legate ai formati che dobbiamo gestire e gli standard supportati sono rappresentati nella scheda in una comodo tabella. La configurazione di default prevede l’uso di java2dprocessor, ma siamo liberi di fare quello che vogliamo.

I resolvers sono gli oggetti che a partire da un identificativo alfanumerico sono in grado di recuperare l’immagini. Sono presenti vari tipi, ma quello di default è il FilesystemResolver che a partire da una directory recupera l’immagine grazie al nome

Se voglio ottenere i metadati di una immagine occorre invocare l’url

dove 0001_2.jpg è il nome del file. Con tale direttiva ottengo i metadati del file in formato json

Per ottenere l’immagine originale il link da invocare è il seguente

Per ottenere le varie derivate occorre variare i parametri che seguono l’identificativo del file nel rispetto delle api IIIF, per maggiori dettagli leggete le specifiche disponibili qui

ECCEZIONI JAVA – org.springframework.jdbc.BadSqlGrammarException

Ultimamente mi sono imbattuto in un problema interessante legato ai driver Oracle: una funzione rilasciata non funzionava nel nuovo ambiente e dava l’eccezione BadSqlGrammarException e più precisamente .

Comincio l’analisi del problema e la segnalazione fa pensare che l’applicativo stia invocando in modo errato la function, che effettivamente in ingresso riceve 5 parametri e non 4 come fa vedere il log. Rigenero il war pensando che sia stata installata una versione diversa ma il problema persiste. A questo punto penso che il problema possa essere lato db, pertanto rigenero gli script sql e vengono reinstallati nell’ambiente di riferimento. Niente da fare. Mi accorgo che la versione Oracle tra i 2 ambienti è differente, ma questo non dovrebbe spiegare l’errore. Non mi resta che controllare i 2 ambienti, in questo caso un tomcat 7 e mi accordo che  i 2 ambienti presentano versioni di driver oracle differenti. Il cliente aveva effettuato l’aggiornamento della versione Oracle alla 12 e di conseguenza aveva aggiornato la versione del driver Oracle, passando dalla 10 alla 12. Ecco individuato il problema, la chiamata falliva se fatta con il nuovo driver. La chiamata sfrutta la classe SimpleJdbcCall offerta da Spring

Per risolvere il problema ho dovuto modificare il sorgente, rinunciare alla SimpleJdbcCall  e utilizzare la classica CallableStatement

 

TERMINARE UN PROCESSO JAVA

Ultimamente mi capita di aver dei processi JAVA attivi e non vederli tra quelli indicati nel taskmanager. Mi capita con il plugin jetty che a seguito di errore risulta non attivo, ma in realtà mi ha lasciato un processo che blocca l’accesso alle risorse.

Per fortuna ci viene in soccorso il jps – Java Virtual Machine Process Status Tool che mi permette di sapere quanti processi java sono attivi e relativo PID per poterli chiudere con il comando taskkill.

Pertanto apriamo una shell e lanciamo il comando

jps -m

che mi restituirà l’elenco dei processi java attivi

984 DevMode -gen C:\Users\Valerio\eclipse-workspace-oxygen\gwtwebapp\target\.generated -war C:\Users\Valerio\eclipse-workspace-oxygen\gwtwebapp\target\gwtwebapp-1.0-SNAPSHOT -logLevel INFO -port 8888 -codeServerPort 9997 -startupUrl application.html -sourceLevel 1.8 it.valeriofinazzo.application
7876
2492 Launcher gwt:run
7308 Jps -m

A questo punto possiamo lanciare il comando taskkill /F /PID 984 e il sistema ci restituirà il messaggio

OPERAZIONE RIUSCITA: il processo con il PID 984 è stato terminato.