Giu 10 2009

Dump di un database derby (per backup o migrazioni)

Tag: Modellazione, javaGiampiero Granatella @ 07:36

Giusto un appunto su come fare il dump di un DB Apache Derby (ora JavaDB), per avere un backup con tutte le istruzioni DDL, - non DML - (altro modo è avere una copia fisica del DB). Questo è utile per backup testuali o per migrazioni verso altri Data Base.

La classe che fa il backup è dblook e si trova nel package dbtools.jar

Prima di utilizzarla assicurarsi di aver settato le seguenti variabili per Derby (personalizzare sul vostro ambiente)

export DERBY_INSTALL=/home/giampi/programs/db-derby-10.5.1.1-bin
export CLASSPATH=/home/giampi/programs/db-derby-10.5.1.1-bin/lib/derby.jar:
/home/giampi/programs/db-derby-10.5.1.1-bin/lib/derbytools.jar:.

E ora eseguire il dump

java org.apache.derby.tools.dblook -d \
jdbc:derby:/home/giampi/Desktop/demo/apache-tomcat-6.0.18/db/demodb \
-verbose >> dump2009-06-10.sql

Mag 03 2009

Dall’ XML all’ Intelligenza Artificiale in Java

Tag: Ai, Modellazione, Tecnologia, javaGiampiero Granatella @ 08:19

La mia grande passione è l’Intelligenza Artificiale, in questo post continuo un po’ a giocare… sarà il classico post letto da 4 persone, ma sono quelli per me maggiormente divertenti… L’idea alla base è prendere una base dati XML, o SQL o quant’altro e aggiungere ai meri dati, nuove assunzioni e deduzioni legate alla sua semantica.

Tempo fa avevo utilizzato StAX per parserizzare un file XML. In questo post utilizzero la Simple API for XML (SAX) per parserizzare dell’XML e creare una Knowledge Base per Intelligenza Artificiale.Come tutti saprete SAX è un parser XML che si basa sugli eventi che accadono nella lettura sequenziale di un XML, quindi l’apertura di un tag, la chiusura di un tag, ecc… I parser SAX si attivano quando questi eventi accadono e elaborano l’informazione appena letta.

Nel mio esempio prenderò un file “europe.xml” creato sulle informazioni basato presenti sul CIA Factbook (documento scaricabile dal loro sito) e lo trasformerò come informazione in asserzioni per un motore open source di IA: PowerLoom per essere poi interrogato con il suo linguaggio (molto simile al LISP).

Non darò molti dettagli del programma che mi sembra molto semplice. Solo alcune note:

  • all’apertura dei documenti inserisco i concetti per PowerLoom e sempre in questo punto andrò ad aggiungere le relazioni e le assunzioni (non riportate nel codice, le lascio come implementazioni da fare…)
  • Parserizzo i documenti e alla chiusura del tag stampo le asserzioni

Continue reading “Dall’ XML all’ Intelligenza Artificiale in Java”


Mag 02 2009

Cosa fai il 21 Maggio 2009?

Tag: Generale, javaGiampiero Granatella @ 08:15

Dopo lo straordinario successo del Java Ide Day, con il JUG Genova, a cui appartengo, abbiamo organizzato questo interessante (e a quanto ne so unico) appuntamento per il mondo Java: l’application Server Day.

Un momento unico per avere notizie direttamente dai produttori/sviluppatori sulle novità nel mondo degli application server. Riporto il comunicato stampa. Mi raccomando iscrivetevi numerosi.

Application Server Day, la community Java italiana incontra
Sun, Oracle, SpringSource e JBoss

L’Application Server Day è l’evento organizzato dal Java User Group di
Genova e promosso dalla comunità Java italiana per mettere a
confronto i principali produttori sullo stato dell’arte e le
prospettive nel settore degli application server, elemento chiave nei
progetti software aziendali. L’incontro aperto e gratuito si terrà
Giovedì 21 Maggio 2009, dalle 14:30 alle 18:00 presso la Facoltà di
Ingegneria di Genova.

L’incontro, che è una prima assoluta per l’Italia, vedrà la
partecipazione di speaker di primo piano a livello internazionale in
rappresentanza dei principali prodotti del settore: Alexis Moussine-
Pouchkine per Sun Glassfish, Paolo Ramasso per Oracle Fusion
Middleware, Alessio Soldano per RedHat JBoss, Alef Arendsen per
SpringSource dm Server. L’incontro sarà moderato da Carlo Bonamico del
Java User Group di Genova. Gli speaker si confronteranno sulle
caratteristiche distintive dei prodotti, sul ruolo degli standard e
dell’innovazione, sulle best practice e sulle direzioni future.

La motivazione che dà spunto all’evento è il fermento di novità nel
settore degli application server Java, testimoniata nell’ultimo anno
dal rilascio da parte dei produttori di nuove “major release”, da
acquisizioni aziendali e dalla nascita di nuovi player. L’Application
Server Day è l’occasione per tutti i professionisti e appassionati -
cioè la community Java italiana - di essere al centro di queste
novità e interagire con gli esperti internazionali del settore.

Costo:
L’evento è gratuito, ma è gradita la registrazione.

Organizzazione:
L’Application Server Day è organizzato dal Jug Genova e gentilmente ospitato dalla Facoltà di Ingegneria dell’ Università di Genova

Quando e dove:
21 maggio 2009
L’evento si svolgerà nel pomeriggio, all’interno delle Università.

Per gli orari, agenda e informazioni logistiche si rimanda al sito dell’ evento.

Sito di riferimento: http://www.serverday.org/


Mag 02 2009

Wicket – Uno snello Web Framework a componenti

Tag: Web, javaGiampiero Granatella @ 08:02

Nella miriade di web framework scritti per Java, ho preso in considerazione e apprezzato, Apache Wicket.

I Framework a componenti in Java, vedono il loro massimo esponente nelle Java ServerFaces di Sun, ma queste ultime non mi hanno mai pienamente convinto per i seguenti motivi:

  • non sono immediate, ci vuole sempre un po’ di tempo per entrare nella loro ottica

  • è difficile creare dei componenti riutilizzabili in maniera orizzontale in più applicazioni

  • è un framework abbastanza pesante come utilizzo di risorse

  • mi oriento male fra le varie implementazioni e sottoframewok che si appoggiano alle JSF

Per questo motivo ho iniziato a giocare con Wicket, e ne sono rimasto soddisfatto.

Wicket si basa sulla modellazione ad oggetti di tutto il vostro applicativo web, quindi l’applicazione, le pagine, i componenti html sono gestiti come Oggetti e godono di tutti i benefici della programmazione OO. Per le pagine si utilizza un meccanismo di template dove queste vengono rese in base a delle vere e proprie pagine html con riferimenti ai vostri oggetti. Questi template sono delle vere e proprie pagine html e quindi creabili e componibili con qualsiasi editor WYSIWYG.

Vediamo i concetti principali di una applicazione Wicket.

L’applicazione

public class MyApplication extends WebApplication {

public MyApplication() {

}

@Override

public Session newSession(Request req, Response resp) {

return new MySession(req);

}

public Class getHomePage() {

return ConnectionPage.class;

}
@Override

protected void init() {

super.init();

mount(new IndexedParamUrlCodingStrategy(”/connection”, ConnectionPage.class));

mount(new IndexedParamUrlCodingStrategy(”/table”, TablePage.class));

mount(new IndexedParamUrlCodingStrategy(”/home”, AddTablePage.class));

// initialize velocity

try {

Velocity.init();

}

catch (Exception e) {

throw new WicketRuntimeException(e);

}

}

}

Per illustrare una applicazione prendo ad esempio una mia classe. Per ogni progetto (war) esiste una classe che modella l’applicazione. La vostra classe deve estendere la Classe WebApplication. Di che cosa si occupa la WebApplication? Principalmente di gestire le pagine, di specificare la HomePage, e tutti quei concetti dell’http quali la sessione, la request e la response, che verranno nascosti alle pagine sottostanti. Questa è l’unica classe che verrà mappata nel web.xml.

La pagina

Le pagine in wicket si compongono di 2 componenti. La vera e propria Classe Java che estende la WebPage e il template html che deve avere lo stesso nome della classe e risiedere nello stesso package.
AddTablePage.java

public class AddTablePage extends WebPage{
public AddTablePage() {

add(new Label(”label1″, “Add a new table” ));

}

}

Come noterete nel costruttore della pagina vengono aggiunti con il metodo add tutti i componenti. Nel caso sopra ho aggiunto una label a cui ho dato il riferimento “label1” e gli ho associato un modello statico definito grazie alla stringa “Add a new table”.

Wicket ha diversi componenti: quelli base che definiscono oggetti html (form, bottoni, campi a scelta multipla,…), e quelli più aggregati e complessi che racchiudono più funzionalità: tabelle paginate, viste ad albero, componenti ajax…

AddTablePage.html

<html>

<head>

<title>Add a new Table</title>

</head>

<body>

<h1><span wicket:id=”label”>Add a new Table</span></h1>

</body>

</html>

La pagina html mappa il riferimento definito nella WebPage nel proprio html, nel caso di una label si utilizza il tag span, ma a seconda del tipo di componente il wicket:id può essere aggiunto a tag input, form, select…

Il modello

Wicket utilizza i modelli (da non confondere con il Model del paradigma MVC), per mappare gli oggetti (che mutano il loro stato a Runtime attraverso l’interazione con l’utente) associati ai componenti “html” statici creati nei costruttori delle webpage.

I modelli Wicket estendono una semplice interfaccia IModel, che necessita di due soli metodi setObject e getObject.

public interface IModel {

public Object getObject();

public void setObject(final Object object);

}

La natura dell’Oggetto del Modello dipende dal tipo di componente a cui è associato. Ad esempio sarà una stringa per una label, ma può essere una Collection per una lista.

Attraverso l’implementazione di questa interfaccia potete fare tutto quello che vi serve per i vostri componenti Wicket, giocando solo sul set e get dell’Object, ed è qui che all’inizio si troveranno le maggiori difficoltà e gli errori più comuni. Ma presa padronanza con questo concetto, programmare in Wicket diventerà semplicissimo e molto veloce.

In ogni caso Wicket offrè già delle implementazioni di questa interfaccia le più comuni sono:

  • dynamic Model, es new Model(final Object modelObject) associa modelObject ad un modello e questo cambierà lo stato dell’Oggetto
  • PropertyModel(final Object modelObject, final String expression) Lega un modello ad una proprietà di un oggetto
  • WrappedObjectModel, si possono comporre modelli innestandoli fra di loro (in pratica un IModel diventa l’objectModel di un altro modello). Molto utili per la modellazione di strutture complesse

Il componente

Ho detto prima della facilità di Wicket di estendersi e creare nuovi componenti riutilizabili. Questo viene fatto tramite l’uso (ma non solo guardatevi la documentazione) di Pannelli.

Un pannello (panel) è simile ad una WebPage, quindi ha un suo modello, i suoi componenti e il suo template html per il rendering e poi può essere incluso nelle webpage come qualsiasi altro componente.

Riporto alcuni stralci di codice per esempio.

public class DBParamPanel extends Panel {

public DBParamPanel(String s, final MDConnectionParam conn) {

super(s);

BoundCompoundPropertyModel cm = new BoundCompoundPropertyModel(conn);

DBParamSelector param = new DBParamSelector(”choices”);

Form form = new DBParamForm(”form”, cm);

add(form);

form.add(param);

cm.bind(param, “type”);

}

L’html

<wicket:panel>

<fieldset>

<legend>Create Connection params</legend>

<form wicket:id=”form”>

<select wicket:id=”choices”/><br/>

<table border=”0″>

</form>

</fieldset>

</wicket:panel>

La pagina che include il Pannello

public class ConnectionPage extends
WebPage {
    public ConnectionPage(final
PageParameters parameters) throws Exception {
        super(parameters);
..
        DBParamPanel createConnection =
new DBParamPanel("createconn", new MDConnectionParam());
       ...
        add(createConnection);
       ...
    }

<?xml version=”1.0″ encoding=”UTF-8″?>

<span wicket:id=”listPanel”/>

<span wicket:id=”createconn”/>

<span wicket:id=”editPanel”/>

Andiamo oltre

Questo era un breve articolo di introduzione a wicket. Nella mia breve esperienza ad un certo punto mi sono scontrato con il limite dei template html dove tutto deve essere conosciuto a priori… Ma anche in questo caso wicket mi da una mano permettendomi di usare Apache Velocity (o se preferite FreeMarker) per creare dinamicamente dell’Html e qui si aprono nuovi scenari…


Apr 09 2009

Installare Derby sotto Tomcat 6

Tag: Tecnologia, javaGiampiero Granatella @ 19:49

Per avere un piccolo ambiente di sviluppo sul mio eeepc, installo un database embeddable (Apache Derby) scritto in java sotto Tomcat 6. Questo mi servirà per avere un minimale ambiente di sviluppo per semplici sviluppi Java.

Prerequisiti

  • avere un tomcat installato in {TOMCAT_HOME}
  • scaricare il jar di Derby da Apache

Passi da effettuare:

Copiare il jar di Derby - derby.jar - sotto {TOMCAT_HOME}/lib
Per comodità creo un Global datasource in cui salvare il riferimento JNDI per Derby. aggiungere le seguenti righe all’interno di {TOMCAT_HOME}/conf/server.xml all’interno del tag GlobalNamingResources come derbyDB.

Continue reading “Installare Derby sotto Tomcat 6″


Pagina Successiva »