Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì...

56
Programmazione Java Avanzata Struts2 Avanzato Ing. Giuseppe D'Aquì

Transcript of Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì...

Page 1: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Programmazione Java Avanzata

Struts2 Avanzato

Ing. Giuseppe D'Aquì

Page 2: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Struts2 Action Method

● Struts2 permette di definire metodi diversi da execute() per l'esecuzione del codice delle Action

● Può capitare, infatti, che due operazioni siano molto vicine tra loro e non abbia senso fare una classe per ciascuna

● Nella definizione xml delle Action possiamo aggiungere l'attributo “method”:

● <action name=”actionSalva” class=”...” method=”salva” />– Questo fa si che venga chiamato il metodo salva()

invece di execute()

Page 3: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Action Dynamic Method

● Estensione dell'approccio precedente, possiamo assegnare un insieme di metodi all'esecuzione

● Tramite le wildcards (asterisco) possiamo scrivere espressioni che corrispondano ai metodi da chiamare in caso di esecuzione della Action

Page 4: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Action Dynamic Method

● <action name=”miaAction_*” class=”...” method=”{1}”>● <result … /></action>

● Quando usiamo l'asterisco intendiamo “tutti i termini”

● Il simbolo “{1}” indica il termine presente al posto dell'asterisco

● Esempio: se la nostra url è “/miaAction_salva.action” verrà chiamato il metodo salva() della classe action

Page 5: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Struts2 File Upload

● Il default package di Struts2 contiene un interceptor utile per semplificare l'upload di file● FileUploadInterceptor

● Si occupa di intercettare i parametri Http che corrispondono ad upload di file, trasformandoli in oggetti Java più gestibili

● Si abbina con il tag <s:file> delle viste

Page 6: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Struts2 File Upload

● La form deve avere l'attributo enctype=”multipart/form-data” ● (richiesto da HTML per l'invio di file)

● Impostato l'attributo, possiamo usare il tag <s:file />, che genera una casella di input con pulsante “sfoglia...”● <s:file /> permette due attributi:

– name: il nome che verrà usato per passare i dati alla Action

– label: Messaggio per l'utente

Page 7: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Struts2 File Upload

● Il FileUploadInterceptor interviene fornendo tre parametri

● Supponendo che abbiamo impostato name=”avatar” in <s:file /> della form, avremo:● avatar : di tipo File [viene inserito nella

Action tramite setAvatar(File file)]● avatarContentType: di tipo String● avatarFileName: di tipo String, è il nome del

file

Page 8: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Programmazione Java Avanzata

Struts2 e Ajax

Ing. Giuseppe D'Aquì

Page 9: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

9

AJAX● AJAX è un acronimo che significa

● Asynchronous Javascript And Xml● E' un insieme di tecnologie per l'aggiornamento

asincrono delle pagine web (ovvero, aggiornamento senza intervenire sullo stato corrente della pagina)

Page 10: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

10

AJAX● Ajax è composto dalle seguenti tecnologie:

● HTML e CSS per gli aspetti di presentation● DOM (Document Object Model, la struttura dati

che rappresenta i tag HTML sotto forma di albero)● XML per l'interscambio di dati (molto usato anche

JSON)● XmlHttpRequest● Javascript

Page 11: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

11

Javascript● A dispetto del nome, c'entra poco e niente con

Java● È un linguaggio ad oggetti, ma dall'impronta

prettamente funzionale● È usato per effettuare le varie request

asincrone e manipolare il DOM con le risposte

Page 12: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

12

Struts2 e Ajax● Struts2 ha cambiato più volte la modalità di

inserimento di funzionalità ajax● Nelle versioni 2.0.x e 2.1.x si sfrutta il Dojo

Plugin● Nelle ultime versioni (2.2.x), è stato riscritto il

supporto ajax

Page 13: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Double Select

● //doubleselect è un componente composto da due select box, in cui la seconda cambia il suo contenuto a seconda della scelta della prima

● <s:doubleselect label="doubleselect test1" name="menu" list="{'fruit','other'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />

Page 14: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Datetimepicker

● Struts2 (2.1.x) e Dojo Toolkit [http://dojotoolkit.org/]

● Per utilizzarli, è necessario impostare all'apertura del JSP la seguente riga:

● <%@ taglib prefix="sx" uri="/struts-dojo-tags" %>●

● //esempio● <sx:datetimepicker name="delivery.date" label="Delivery

Date" displayFormat="yyyy-MM-dd" />

Page 15: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Autocomplete

● //autocompletamento a partire da una lista predefinita

● <sx:autocompleter name="test" list="{'apple','banana','grape','pear'}" autoComplete="false"/>

Page 16: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

16

jQuery● È una famosissima libreria Javascript● Si basa su concetti molto semplici (come i

selettori css) per manipolare l'albero DOM, permettendo di fare query elaborate senza dover scrivere interi algoritmi da zero

● Ha la possibilità di essere estesa tramite plugin che fanno di tutto (effetti grafici, animazioni, ajax, ecc)

Page 17: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Struts2 jQuery

● Il jQuery plugin permette di sfruttare jQuery per utilizzare tag con comportamento Ajax

● [http://code.google.com/p/struts2-jquery/w/list]

● Si introduce una nuova taglib “sj” come nel caso di dojo toolkit

Page 18: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Struts2 jQuery

● <%@ taglib prefix="s" uri="/struts-tags"%>

● <%@ taglib prefix="sj" uri="/struts-jquery-tags"%>

● <html>

● <head>

● <sj:head/>

● </head>

● <body>

● <div id="div1">Div 1</div>

● <s:url id="ajaxTest" value="/AjaxTest.action"/>

● <sj:a id="link1" href="%{ajaxTest}" targets="div1">Update Content</sj:a>

● </body>

● </html>

Page 19: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

JSON Result Type

● Implementare una risposta “ajax” in Struts2 prevede l'uso di un result di tipo Stream (Struts2 2.2.x)● Ricordiamo che i result di default sono JSP

● JSON è semplicemente un formato per scrivere oggetti in Javascript sotto forma di stringa (come la serializzazione)

● { "doubleValue": 10.10,● "list": ["A", 10, 20.20],● "array": [10, 20] ● }

Page 20: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Struts Ajax Plugin

● Il JSON restituito non rappresenta una pagina intera, ma spesso una parte di pagina (quella da aggiornare)

● Dal javascript facciamo una richiesta per avere oggetti di tipo JSON

● Struts può avere result di tipo JSON usando un plugin apposito (che si chiama Struts Ajax Plugin)

Page 21: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Programmazione Java Avanzata

Struts2 Advanced Views

Ing. Giuseppe D'Aquì

Page 22: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Velocity

● Apache Velocity è un motore di templating per Java● (vedi pattern “Template View”)

● Alternativo a JSP● Esempio:● ## Velocity Hello World

● <html><body>

● #set( $foo = "Velocity" )

● ## followed by

● Hello $foo World!

● </body></html>

Page 23: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Velocity

● I “tag” Velocity sono scritti premettendo #● Esempi:

● #if( condizione )● #set( $variabile = “valore” )● #foreach( $array_Collection )

● Rispetto al JSP “puro” permettono di inserire funzionalità nell'Html in modo poco invasivo

Page 24: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Struts2 e Velocity

● In Struts2 possiamo avere delle result che usano Velocity al posto di JSP● Basta installare il Jar di Velocity e

configurare un result-type:– <result-type name=”velocity”

class=”org.apache.struts2.dispatcher.VelocityResult” default=”true” />

● Se vogliamo usarlo solo per alcuni result, basta inserire l'attributo type=”velocity” nel tag <result />

Page 25: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Struts2 e Velocity

● Tutti i tag che conosciamo di Struts2 “cambiano forma”, usando lo stile Velocity● <s:property value=”...”> diventa:

– #sproperty(“value=...”)● <s:url> diventa #surl● E così via

Page 26: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Struts2 Form Token

● Ogni volta che un utente preme un tasto di invio della form, i dati vengono inviati

● Se il pulsante viene premuto due volte per sbaglio o perché l'utente è impaziente, viene richiamata la stessa action due volte

● Questo comportamento in alcuni casi potrebbe provocare grossi danni all'utente, se non gestito● Ad es. ordini doppi, messaggi duplicati

eccetera

Page 27: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Struts2 Form Token (2)

● La soluzione è inserire un “id” temporaneo valido per la form corrente (detto “token”), che sia generato per ogni form e che venga accettato solo una volta● Il secondo invio arriverà da una form con lo

stesso token di una precedente e quindi sarà ignorato

● Struts2 prevede il tag <s:token /> da inserire dentro le form● Questo genera un id temporaneo

Page 28: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Struts2 Form Token (3)

● Il controllo del token viene fatto da un interceptor, che non fa parte dello stack di default e quindi deve essere specificato manualmente nelle action che devono controllare il token● <action … >

– <interceptor-ref name=”tokenStack” />– <result … />– …

● </action>

Page 29: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

JFreeChart Plugin

● JFreeChart è una libreria Java per la generazione di grafici

● Esiste un plugin (“struts2-jfreechart-plugin”) che definisce un tipo di result-type (=”chart”) che permette di sfruttare JFreeChart per generare grafici nelle nostre pagine web

Page 30: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Programmazione Java Avanzata

Altri Framework

Ing. Giuseppe D'Aquì

Page 31: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Apache Commons

● Apache Commons è una collezione di librerie “minimali”, che si focalizzano su un certo compito e lo svolgono bene

● Essendo minimali e non-invasive, possono essere usate con pochi problemi in progetti preesistenti

● Riguardano operazioni comuni (da qui il nome) che sono spesso presenti in molti progetti● Invio email, gestione file compressi (zip),

uso dei protocolli di rete ecc...

Page 32: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Inviare Email

● //Con Apache Commons Email● Email email = new SimpleEmail();

● email.setHostName("smtp.gmail.com");

● email.setSmtpPort(587);

● email.setAuthenticator(new DefaultAuthenticator("username", "password"));

● email.setTLS(true);

● email.setFrom("[email protected]");

● email.setSubject("TestMail");

● email.setMsg("This is a test mail ... :-)");

● email.addTo("[email protected]");

● email.send();

Page 33: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Eseguire Applicazioni Esterne

● //Con Apache Commons Exec● String line = "AcroRd32.exe /p /h " + file.getAbsolutePath();

● CommandLine cmdLine = CommandLine.parse(line);

● DefaultExecutor executor = new DefaultExecutor();

● int exitValue = executor.execute(cmdLine);

Page 34: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Apache Commons

● Altre librerie Commons:● Logging● Sanselan (manipolazione immagini)● Compress● VFS (Virtual File System, permette di

accedere a dischi remoti)● http://commons.apache.org/components.html

Page 35: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Spark

● Spark è un micro web framework● È utilizzato per aggiungere funzionalità web

senza dover scomodare un Servlet Container o un Application Server

● Al suo interno c'è sempre un servlet container (Jetty) ma è embedded e parte contemporaneamente all'applicazione

● Con Spark si associano delle URL (dette Route) a delle funzioni

Page 36: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Spark

● public class HelloWorld {

● public static void main(String[] args) {

● spark.Spark.get(new Route("/hello") {

● @Override

● public Object handle(Request request, Response response) {

● return "Hello World!";

● }

● });

● }

● }

Page 37: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

PHP/Java Bridge

● PHP/Java Bridge è un wrapper per eseguire applicazioni PHP all'interno di un Servlet Container

● In questo ambiente, l'applicazione PHP può accedere a tutte le librerie Java

● Viceversa, l'applicazione Java può utilizzare le procedure definite in PHP

Page 38: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

PHP/Java Bridge

Page 39: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

PHP/Java Bridge

● <?php

● require_once("http://localhost:8080/JavaBridge/java/Java.inc");● $System = java("java.lang.System");● echo $System->getProperties();

● ?>

● L'uso principale è l'integrazione di applicazioni PHP esistenti e testate (come Wordpress, Joomla, ecc.) in siti o applicazioni web scritte in Java

Page 40: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

HSQLDB

● HSQLDB (conosciuto anche come HyperSQL) è un DBMS scritto interamente in Java

● È molto veloce e possiede un codice compatto● Implementa SQL:2008 e le transazioni● Può essere usato in modalità client/server

(come gli altri DBMS) oppure embedded

Page 41: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

HSQLDB embedded

● In modalità embedded mostra tutto il suo potenziale, non essendo necessaria la configurazione di un servizio esterno● Il controllo del DBMS può avvenire

interamente dall'interno del codice della nostra applicazione

● Usato come embedded può salvare i dati in due modalità:● Su file● In memoria

Page 42: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

HSQLDB embedded

● Quando si salvano i dati su file, verranno creati file per ogni tabella che creiamo (in pratica il db è una cartella)

● Quando salviamo i dati in memoria, verranno persi al prossimo riavvio● Questa modalità è molto potente per

salvare dati temporanei in modo molto veloce, vedi caching o testing

Page 43: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

HSQLDB Database Manager

● HSQLDB ha al suo interno un'applicazione per gestire i database e per sperimentare

● Si lancia con:● java -cp /path/to/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing

Page 44: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

GWT

● Google Web Toolkit è un framework per la scrittura di applicazioni ajax in Java

● L'obiettivo principale è l'introduzione delle seguenti caratteristiche:● asynchronous remote procedure calls● history management● Bookmarking● Internationalization● cross-browser portability

● Tutto utilizzando gli strumenti classici usati per sviluppare una applicazione Desktop

Page 45: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

GWT● Abbiamo visto che Ajax è un insieme di

tecnologie● Uno sviluppatore, per creare una web app

Ajax, deve conoscere:● Java● Html● CSS● Javascript● …e tutte le incompatibilità tra i vari browser

● Mentre per creare una app desktop basta conoscere Java!

Page 46: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

GWT

● Il principio ispiratore di GWT è scrivere applicazioni web come se fossero desktop

● Questo risultato viene ottenuto separando il codice Java in due parti● Una parte Server, che non contiene

interfaccia, che viene scritta utilizzando Java normalmente

● Una parte client, sempre in Java, che però viene compilata in un insieme di HTML/CSS/Javascript

Page 47: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

GWT

● Il principio ispiratore di GWT è scrivere applicazioni web come se fossero desktop

● Questo risultato viene ottenuto separando il codice Java in due parti● Una parte Server, che non contiene

interfaccia, che viene scritta utilizzando Java normalmente

● Una parte client, sempre in Java, che però viene compilata in un insieme di HTML/CSS/Javascript

Page 48: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

GWT

Page 49: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Eclipse GWT Plugin

● Vedi esempio

Page 50: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Lucene

● Apache Lucene è una libreria per l'Information Retrieval● Motore di ricerca

● Lucene funziona con qualunque sorgente dati, indipendentemente da:● Formato● Lingua● Tipo di Sorgente

● Basta che sia convertibile in testo

Page 51: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Lucene

Page 52: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Lucene

● Per ricercare su grandi quantità di testo, Lucene crea degli indici di ricerca

● I dati vengono dapprima convertiti dal loro formato originale a testo puro, tramite parsing

● Poi vengono analizzati tutti assieme, si crea qualcosa di molto simile all'indice analitico di un libro● Le parole vengono ordinate insieme ai

riferimenti di dove sono state trovate

Page 53: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Lucene

Page 54: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Lucene

● L'indice può anche essere creato a partire da dati strutturati● Es: per un libro, vorremmo gestire

differentemente il campo “autore” dal campo “titolo”

Page 55: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Lucene● Lucene ha, infine, classi usate per la ricerca

● QueryParser● Classi che si occupano di analizzare la stringa

di ricerca inserita dall'utente, e tradurla nelle opportune query sull'indice creato● Es di query di ricerca:

– Java● Cerca la parola “Java”

– Java Spring● Cerca i documenti che contengono “Java” oppure “Spring”

– Java AND Spring– Java*– title:Java

Page 56: Programmazione Java AvanzataProgrammazione Java Avanzata Altri Framework Ing. Giuseppe D'Aquì Apache Commons Apache Commons è una collezione di librerie “minimali”, che si focalizzano

Hibernate e Lucene

● Tra Lucene e gli oggetti c'è lo stesso disadattamento che c'è con i RDBMS● Lucene è progettato per lavorare su grandi

quantità di testo● Il progetto Hibernate Search prova ad

eleminare queste problematiche, aggiungendo annotazioni che permettono di segnalare a Lucene gli oggetti da indicizzare

● Inoltre permette di tradurre le query Lucene in query HQL, permettendo la ricerca full-text