sabato 18 settembre 2010

blog da seguire

http://www.germanescobar.net/2010/04/4-areas-of-possible-confusion-in-jee6.html


http://smokeandice.blogspot.com/2009/12/cdi-and-declarative-transactions.html

approfondire:

http://seamframework.org/Community/SingletonEJBs

domenica 12 settembre 2010

jsf: come bypassare la fase di validazione senza perdere i dati

Interessante diatriba: immaginate un utente che compila dei dati su un form. A metà dell'opera si accorge che prima di completare il form ha bisogno di inserire dei dati collegati, in un altra sezione (banalmente per emettere una fattura va prima inserito il cliente).

A meno che l'interfaccia non glielo permetta in modo contestuale (senza quindi abbandonare i dati inseriti - ad esempio mediante un popup modale), spesso è necessario chiudere la pagina in cui si sta lavorando, per poi tornarci una volta inseriti i dati utili, riscrivendo quanto già inserito.

Un po di links...utili...

http://www.ibm.com/developerworks/web/library/wa-aj-jsf1.html
http://www.ibm.com/developerworks/web/library/wa-aj-jsf2/index.html
http://wiki.apache.org/myfaces/How_The_Immediate_Attribute_Works
http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html
http://radio.javaranch.com/gthought/2005/01/04/1104874993000.html
http://wiki.apache.org/myfaces/OptionalValidationFramework
http://www.jsfcentral.com/articles/myfaces_extval_2.html

domenica 20 settembre 2009

un cms semplice semplice con jsf-facelets

Dopo anni di sviluppo in PHP, è arrivato il momento di fare siti web in giava.
Molto leggeri, senza usare tutto j2ee, limitandosi a JPA+JSF+GUICE.
Scelta obbligata dai pochi mezzi a disposizione, usare tomcat invece del caro jboss.
L'idea è questa:
  1. si crea una applicazione di management (che gestisce css, templates e pagine) che verrà clonata ogni volta con tutte le funzioni di gestione.
  2. ed una applicazione web che verrà popolata da quella di management, ed inzialmente conterrà soltanto i files base:
    cartella WEB-INF con files di configurazione generici,
    prettyfaces per rewrite-url nativo
    librerie guice-jsf -primefaces/richfaces
Problematiche da gestire:
  1. creazione al volo pagine xhtml partendo dai templates e gestire i contenuti in esse tramite textarea avanzate (stile tinymce)
  2. aggiungere moduli standard per i comuni siti web: news/gallerie di foto/google maps nella pagina contatti/forum
  3. creazione al volo di componenti facelets (come tag per lista news o tag per singola news) da riutilizzare tra i contenuti html inseriti mediante tinymce
Progetti di partenza:
  1. per la gestione templates: http://code.google.com/p/prime-flowers/source/browse/#svn/trunk/simpleCMSgenerator
  2. per i contentuti del sito web in jsf_facelets_jpa: http://code.google.com/p/prime-flowers/source/browse/#svn/trunk/ZetaWeb
Tecnologie da approfondire:
  1. prettyfaces per rewrite_uri: l'uso minimale in ZetaWeb, mostra com'è possibile automatizzare la navigazione tra pagine
    - il cui path reale è in una cartella fissa (es: pages),
    - il cui url completo è www.appname.com/pages/nomePagina.xhtml
    - il cui jsf url è www.appname.com/pages/nomePagina.jsf
    - l'alias www.appname.com/nomePagina

  2. uso di Dynamic Finders (interfacce che contengono query jpa-senza scrivere implementazione): http://www.wideplay.com/dynamicfinders
  3. uso di Custom Units of Work (http://www.wideplay.com/transactionsemantics ) per il caricamento delle lazy collection in jpa in contesti transazionali + lunghi della semplice request.
Accetasi aiuti + o - volontari....

se proprio java non vede la data giusta...

Se proprio le hai tentate tutte ed il tempo stringe..e la tua macchina linux ha una certa ora mentre la tu applicazione giava non la vuole leggere correttamente...

Naturalmente hai già fatto:

  1. run.conf di jboss con opzione-Duser.language=it -Duser.region =IT -Duser.timezone=Europe/Rome

  2. in faces-config.xml hai aggiunto:

    java.util.Date

..........CustomDateTimeConverter



che chiama:

public class CustomDateTimeConverter extends DateTimeConverter {
Logger log = Logger.getLogger(getClass().getName());

public CustomDateTimeConverter() {
super();
TimeZone tz = TimeZone.getTimeZone("Europe/Rome");
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
setTimeZone(tz);
setLocale(new Locale("it/IT"));
setPattern("d/M/yyyy");
}
}


Alla fine incazzato come una iena:

public static Date getDateLinux() {
try {
String data = CommandLauncher.executeCmd(new String[] { "date",
"+%m/%d/%Y %H:%M:%S" });
log.info("DATA LINUX: " + data);
SimpleDateFormat formatLINUX = new SimpleDateFormat(
"MM/dd/yyyy HH:mm:ss");
Date parsed1 = formatLINUX.parse(data);
log.info("DATA LINUX FROM JAVA: " + parsed1);
return parsed1;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}

martedì 4 marzo 2008

Anno 2009: la scelta di campo JSR 299 o Spring?

In attesa di scegliere il framework per i prossimi progetti, continuano le letture..

Segnalo un paio di post:

Annotation Driven JSF-Spring-JPA

A parte l'uso di spring non c'è nulla di nuovo..Le scatole DAO, francamente non mi piacciono, non ne vedo l'utilità.

Aspettando JSR 299:
http://www.jroller.com/RickHigh/

Ho scoperto un progetto interessante:
http://code.google.com/p/krank/

Crank is a master/detail, CRUD, and annotation driven validation framework built with JPA, JSF, Facelets and Ajax. It allows developers to quickly come up with JSF/Ajax based CRUD listings and Master/Detail forms from their JPA annotated Java objects.

Crank uses a lot of the new JSF features from Facelets, Ajax4JSF, etc. that will be used in JSF 2.0. Crank is a use case analysis of what is possible with the new JSF 2.0 stack.

domenica 24 febbraio 2008

Come ricevere le email tramite MDB

In JBOSS.
Per ricever le email tramite un Message Driven Bean (sfruttando quindi le caratteristiche asincrone e la gestione ad eventi), regolandone i tempi di polling, la casella email da monitorare, server posta, etc:
1) scaricare jboss-seam (http://labs.jboss.com/jbossseam/download/)
2) estrarre dalla cartella mail, il file mail-ra.rar e sostituire quello presente in jbossXX/server/SERVER_NAME/deploy
3) creare una applicazione jar contente un mdb simile a questo:

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.mail.Message;

import org.jboss.annotation.ejb.ResourceAdapter;
import org.jboss.resource.adapter.mail.inflow.MailListener;
import org.jboss.logging.Logger;

/**
* A JavaMail based MDB for EJB3 use
*/
@MessageDriven(activationConfig={
@ActivationConfigProperty(propertyName="mailServer", propertyValue="mail.server.it"),
@ActivationConfigProperty(propertyName="mailFolder", propertyValue="INBOX"),
@ActivationConfigProperty(propertyName="storeProtocol", propertyValue="pop3"),
/* se volete verificare cosa succede dietro le quinte /*
@ActivationConfigProperty(propertyName="debug", propertyValue="true"),
/* ogni quanti microsecondi deve scattare il controllo della casella email - es. 30 sec /*
@ActivationConfigProperty(propertyName="pollingInterval", propertyValue="30000"),
@ActivationConfigProperty(propertyName="userName", propertyValue="fiorenzo.pizza@server.it"),
@ActivationConfigProperty(propertyName="password", propertyValue="miapwd")
})
@ResourceAdapter("mail-ra.rar")
public class EmailMDB implements MailListener
{
private static Logger log = Logger.getLogger(EmailMDB.class);

public void onMessage(Message msg) {
log.info("onMessage, msg="+msg);
parseMsg(msg);
........
}

private void parseMsg(Message msg) {

}
}
5) per compilarlo sarà necessario includere tra le librerie il file mail-ra.jar.
6) deployate il file...


Commenti: stavolta funziona...
Nella versione in Seam hanno migliorato il connettore, aggiungendo qualche funzionalità di controllo in più.

riferimento sacro:
http://wiki.jboss.org/wiki/Wiki.jsp?page=InboundJavaMail
http://docs.jboss.com/seam/latest/reference/en/html/mail.html

domenica 3 febbraio 2008

Gestione path file system - URL e URI Java

Passare sempre per la trasformazione URL-->URI, quando si gestiscono path su file system per evitare problemi di portabilità di codice Java tra Linux e Windows.
Infatti i percorsi che includono cartelle contenenti caratteri come lo spazio (per esempio "Documents and settings"), nella formattazione in URL vengono sostituiti con altri caratteri (per lo spazio con il '%20') e le risorse non vengono più riconosciute.

Trasformando sempre l'url nell'uri corrispondente (che non applica nessuna formattazione) si evitano questi imprevisti:

URL url =getClass().getClassLoader().getResource(...path su file system...);

.... = new File(url.toURI().getPath()));