Archivi categoria: VARIE

ERRORE – Plugin execution not covered by lifecycle configuration

Oggi vediamo un problema in cui mi sono imbattuto recentemente. Importando un progetto maven in Spring Tool Suite 4 (STS) a fine processo l’IDE mostrava un fastidioso messaggio rosso

Errore su STS

Sostanzialmente il messaggio indicava che uno dei vari plugin configurati nella build del processo non era gestito correttamente nel ciclio di vita gestito da STS. Nel mio caso si trattava del plugin jasperreports-plugin responsabile della compilazione dei file .jrxml in file.jasper e la condizione di errore veniva indicata sul tag execution

plugin che da il problema

Per gestire l’errore è stato sufficiente sfruttare un’altra feature del maven, ovvero il dependency management e definire tramite un altro plugin (lifecycle-mapping) il comportamento di Eclipse. Il dependency managament è un tag disponibile all’interno del tag build.

configurazione che risolve lanciando l’esecuzione

Una volta aggiornato il pom, STS ha rimosso l’errore, compilato i file e generato i file jasper attesi.

E’ possibile configurare lo stesso plugin anche per ignorare il plugin incriminato all’interno della gestione di STS, in questo caso invece di usare l’action execute si usa l’action ignore

configurazione che risolve ignorando l’esecuzione

Per maggiori informazioni vi invito a leggere la documentazione ufficiale disponibile qui, mentre per l’ottimo plugin di compilazione di report la pagina ufficiale è questa.

SWAGGER: Generare FILE JSON

Swagger è un prodotto che ti consente di documentare i rest service che hai implementato tramite delle comode annotation. Puoi quindi descrivere i campi accettati, le regole di validazione applicati e tutto quanto concorra ad una definizione efficiente delle specifiche.

Una volta che hai completato le tue specifiche ti consente di generare agevolamente il file json delle specifiche tramite il quale poter generare il client per invocare i tuoi servizi.

Per generare il file è sufficiente invocare l’url

http://<hostname>:<port>/v2/api-docs?format=openapi

La risposta sarà il file json da cui poter generare agevolmente il client.

ECCEZIONE – THE PORT MAY ALREADY BE IN USE

Capita che la porta su cui lanciamo il nostro servizio sià già occupata e pertanto riceviamo una eccezione del tipo The Tomcat connector configured to listen on port failed to start. The port may already be in use or the connector may be misconfigured.

La prima soluzione è cambiare la porta che stiamo utilizzando agendo sul file di configurazione, la seconda soluzione è individuare il servizio che sta occupando la nostra parte e stopparlo.

In ambiente window per risolvere il problema occorre usare i comandi netstat per inviduare il processo e taskkill per eliminarlo

con questo comando elenchiamo tutti i processi e filtriamo quello che occupa la porta 10001

L’ultimo parametro indica il PID del processo incriminato e per eliminarlo usiamo taskskill

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.