programmazione java avanzataprogrammazione java avanzata altri framework ing. giuseppe d'aquì...

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

Upload: others

Post on 24-Jan-2020

39 views

Category:

Documents


0 download

TRANSCRIPT

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