Raible's Wiki

Raible Designs
Wiki Home
News
Recent Changes

AppFuse

Homepage
  - Korean
  - Chinese
  - Italian
  - Japanese

QuickStart Guide
  - Chinese
  - French
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish
  - Japanese

User Guide
  - Korean
  - Chinese

Tutorials
  - Chinese
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish

FAQ
  - Korean

Latest Downloads

Other Applications

Struts Resume
Security Example
Struts Menu

Set your name in
UserPreferences

Edit this page


Referenced by
LeftMenu




JSPWiki v2.2.33

[RSS]


Hide Menu

AppFuse_it


NB: Questo wiki ed il suo contenuto sono dedicati ad AppFuse 1.x. Se preferisci utilizzare AppFuse 2.x, prego vedi il nuovo wiki su http://appfuse.org. Grazie!

Che cos'è AppFuse?

AppFuse LogoCheck out our Frappr! AppFuse è un'applicazione per l'avvio rapido dello sviluppo di una webapp. Scarica, decomprimi ed esegui ant new per avere subito pronta un'applicazione Tomcat/MySQL. Usa Ant, XDoclet, Spring, Hibernate (o iBATIS), JUnit, StrutsTestCase, WebTest di Canoo, Struts Menu, Display Tag Library, OSCache, JSTL e Struts (o Spring MVC). Il framework Spring ha ampiamente migliorato AppFuse da Febbraio 2004. Viene usato ovunque per il suppporto ad Hibernate/iBATIS, le transazioni dichiarative, il binding delle dipendenze ed il disaccoppiamento dei layer. Questo framework semplice e chiaro ha notevolmente ridotto la complessità di AppFuse ed ha anche permesso l'eliminazione di molte righe di codice. In breve, per J2EE - è quanto di meglio si sia visto in giro dai tempi del pane tostato. Per saperne di più su AppFuse vedi questa pagina sul wiki.

Le feature includono l'Autenticazione (con l'uso di Acegi Security), il Remember Me, l'Auto Registrazione, il Suggerimento Password e la Compressione GZip. La fucina per costruire le tue applicazioni.

Demo Live
Screenshot

Video: Nuovo Progetto e Panoramica sulle Feature (in inglese)
Istantanea Setup
Video: Generazione di Codice con AppGen (in inglese)
Istantanea AppGen

Se vuoi partire subito con AppFuse, vai alla QuickStart Guide. Se vuoi saperne di più sull'architettura di AppFuse vedi il mio PowerPoint "About AppFuse" o vai a vederti una demo live. Ho anche scritto una presentazione recente per la conferenza No Fluff Just Stuff di Denver.

Per HowTo sullo sviluppo con AppFuse, vedi i Tutorial AppFuse.

Per domande comuni ed howto, vedi le FAQ, l'archivio della mailing list o visita il canale IRC AppFuse. La pagina iniziale del progetto AppFuse è su http://appfuse.dev.java.net.

Per vedere cosa ti attende con AppFuse, vedi la Roadmap.

23 Ottobre 2006 - AppFuse 1.9.4

La nuove caratteristiche maggiori di questo rilascio sono l'aggiornamento a Spring 2.0, Hibernate 3.2 e l'integrazione di Facelets + Ajax4JSF per l'opzione JSF. In aggiunta, molte librerie sono state corrette ed alcuni bacherozzi sono stati spiaccicati.

11 Luglio 2006 - AppFuse 1.9.3

Questo rilascio è innanzitutto un rilascio di bug fix, ma contiene anche aggiornamenti per diverse dipendenze come librerie, inclusa Acegi Security 1.0.1.

6 Giugno 2006 - AppFuse 1.9.2

Questo rilascio include l'integrazione del Framework CSS, il supporto alla copertura del codice tramite EMMAe il supporto ai sub-package in AppGen. Un grazie ai Vincitori del Concorso di Design del Framework CSS , Doug Hays e Mika Göckel, per il loro aiuto per questo rilascio.

7 Aprile 2006 - AppFuse 1.9.1

Questo rilascio include miglioramenti ed aggiornamenti a Tapestry 4.0.1, WebWork 2.2.2, nonché il supporto per l'uso di AppGen nel reverse engineering delle tabelle di un database (con Middlegen). iBATIS è ora supportato da AppGen ed è stato approntato un tutorial Create DAO per iBATIS. Il supporto ad iBATIS e Middlegen sono stati forniti da Bobby Diaz - grazie Bobby! Inoltre, un bel grazie va a Mika Göckel per aver scritto un Tutorial su XFire e l'installer. Per installare e configurare AppFuse per lo sviluppo, vedi la Guida QuickStart. Grazie a tutti gli sponsor che hanno contribuito fornendo prodotti ed hosting gratuito al progetto AppFuse.

14 Gennaio 2006 - AppFuse 1.9

Questo rilascio include la completa integrazione di Acegi Security, il supporto per Ajax con DWR e Scriptaculous e molti bug fix/aggiornamenti. In aggiunta, si può fare il deploy di AppFuse senza configurare il tuo application server. Ovviamente, se preferisci usare una DataSource JNDI, si può fare lo stesso facilmente. Per installare e configurare AppFuse per lo sviluppo, vedi la AppFuseQuickStart. Grazie a tutti gli sponsor che hanno contribuito fornendo prodotti ed hosting gratuito al progetto AppFuse.

27 Agosto 2005 - AppFuse 1.8.2

​​​​Questo rilascio è principalmente un rilascio di bug fix privo di nuove feature. Include anche aggiornamenti per Acegi Security e Spring Framework. Grazie a tutti gli sponsor che hanno contribuito fornendo prodotti ed hosting gratuito per questo progetto.

15 Giugno 2005 - AppFuse 1.8.1

Questo rilascio è principalmente un rilascio di bug fix senza nuove feature. Include anche diversi aggiornamenti alle librerie di base (Hibernate, Spring, iBATIS, MyFaces). Grazie a tutti gli sponsor che hanno contribuito fornendo prodotti ed hosting gratuito al progetto AppFuse.

15 Giugno 2005 - Tutorial di Thogau

Thomas Gaudin ha messo insieme un paio di tutorial dettagliati e semplici da seguire sul suo sito.

6 Maggio 2005 - Installato JIRA

Creati i Video di AppFuse ed impostato un nuovo Issue Tracker JIRA. Grazie ad Atlassian per la licenza gratuita di JIRA e a Contegix che ce lo sta ospitando. Grazie anche a KGB Internet Solutions per aver sposnsorizzato l'hosting delle Demo di AppFuse.

29 Aprile 2005 - AppFuse 1.8

Questo rilascio sostituisce la Container Managed Authentication (CMA) con Acegi Security. Fra le altre feature principali numerosi bug fix ad AppGen ed un refactoring del build.xml per sfruttare le feature di Ant 1.6. Sono stati migliorati anche i file di progetto per Eclipse ed IDEA in modo che tu possa eseguire facilmente i test dall'interno del tuo IDE. È stato aggiunto anche un installer all-in-one fatto con MyJavaPack in modo che tu possa scaricare in un colpo solo tutto ciò che server per AppFuse. Eclipse e relativi plugin non sono stati inclusi in questo primo rilascio, ma potrebbero esserlo in un rilascio futuro.

8 Dicembre 2004 - AppFuse 1.7

Questo rilascio aggiunge il supporto per JSF/MyFaces e Tapestry come opzioni di framework web. AppGen è stato aggiornato in modo da funzionare con entrambi ed ho aggiunti anche dei nuovi tutorial. Puoi leggere un resoconto della mia esperienza in Integrating JSF and Tapestry into AppFuse.

9 Novembre 2004 - AppFuse 1.6.1

Questo rilascio è principalmente un bug fix, ma contiene anche un utile strumento "AppGen" per la generazione di logica CRUD completa (con dati di esempio e test) a partire da un POJO. AppGen essenzialmente automatizza tutto ciò che fai nei tutorial. Io incoraggio comunque gli utenti a leggere fino in fondo e svolgere i tutorial in modo da capire il codice che viene generato. Per saperne di più su AppGen.

9 Ottobre 2004 - Rilasciato AppFuse 1.6

Le feature principali in questo rilascio sono la sostituzione di Tiles con SiteMesh e l'aggiunta di WebWork come opzione fra i web framework. Ho anche applicato un refactoring sui test delle Struts Action in modo da usare MockStrutsTestCase eliminando così la necessità di usare Cactus per eseguire i test lato web. Ciò ha permesso una riduzione nei tempi di esecuzione dei test di oltre il 50%. Inoltre la relazione fra utenti e ruoli è stata rivista in modo da sfruttare le feature di Hibernate.

27 Maggio 2004 - Rilasciato AppFuse 1.5

Questo rilascio contiene diverse modifiche che intendevo effettuare da un bel po' di tempo. Nello specifico (1) la rimozione della dipendenza da j2ee.jar e (2) la rimozione di Struts dal services layer. Ho anche migliorato il caricamento dei file di contesto di Spring per cui ora dovrebbe essere possibile eseguire gli unit test dal tuo IDE.

Altre cose da notare sono il supporto i18n completo (con traduzioni in danese, portoghese e cinese), un target setup-tomcat migliorato (ora non c'è più bisogno di alcun JAR aggiuntivo), ed un'opzione per usare il framework MVC di Spring al posto di Struts - completo di tutorial! Se ti interessa, puoi leggere altro sul mio passaggio da Struts a Spring. Buon divertimento!


01.03.2004 - Rilasciato AppFuse 1.4

Questa release contiene diverse modifiche: re-arranging packages/directories, integrazione con Spring, refactoring su Remember Me ed ho anche aggiunto iBATIS come opzione per la persistenza. Ho anche speso molto tempo nel ripassare i tutorial per esser sicuro che fossero aggiornati. Uso AppFuse 1.4 da alcune settimane nel mio progetto attuale, ed apprezzo molto il modo in cui Spring semplifica la configurazione di Hibernate, Transazioni e relazioni Interfaccia->Implementazione. Se ti interessa aggiornare la tua applicazione AppFuse 1.x in modo da usare Spring, puoi dare un'occhiata a questo howto.

Ho anche fatto il passo e spostato il progetto AppFuse da SourceForge a java.net. La motivazione è principalmente quella di aver maggior controllo sulle mailing list e sull'aggiunta di altri sviluppatori. Ad oggi i file sul CVS di SourceForge e su quello di Java.net sono gli stessi - ma d'ora in pio aggiornerò solo Java.net. Ho anche effettuato il rilascio dei file su entrambi i progetti, ma in futuro userò solo java.net.

Qui una sequenza dettagliata di tutte le modifiche come da changelog.

  • Aggiunto il task "cactus" per eseguire i test di Cactus su Tomcat 4.x e Resin 3.0.5.
  • Aggiunti i task Ant di Tomcat per gestire tomcat via la webapp Manager ed Ant.
    • Attualmente supporta: install, remove, start, stop, reload e list.
    • Consiglio di usare "ant setup-tomcat deploy", poi "ant reload" dopo aver eseguito "ant deploy" quando modifichi i .java o i file di configurazione.
  • Eliminato il modulo "upload" e il file-upload integrato nella parte core. Eliminate le scriplet inutili da uploadForm.jsp.
  • Miglioramenti nella UI:
    • Modificato il CSS per i messaggi di errore in modo da avere un bordo rosso intorno - in modo da rendere più facile la distinzione fra messaggi di errore ed informativi.
    • Aggiunti i gestori degli eventi onclick ed onfocus ai form di input per selezionare il testo quando viene fatto clic o spostato il focus su di un input type="text".
  • Modificata la struttura delle directory da common/ejb/web a dao/service/web. Leggi ancora...
  • Aggiunto Spring per configurare Hibernate, i DAO ed i Manager. Configurate le transazioni dichiarative sui layer service e dao. Configurato OpenSessionInViewFilter in modo da garantire una transazione per richiesta. Leggi ancora...
  • Modificato UserCounterListener in modo da registrare solo gli utenti che hanno effettuato con successo il login. Aggiunta anche una schermata per mostrare gli utenti attualmente loggati.
  • Modificato il session timeout di default a 10 minuti invece di 60.
  • Implementata una strategia di cookie persistente di login (per il Remember Me) come consigliato da Charles. Leggi ancora...
  • Aggiunta iBATIS come opzione per la scelta del framework di persistenza. Leggi ancora...
  • Aggiunto un template XDoclet custom per web.xml in modo da ordinare filter e listener.
  • Aggiunto il supporto per la generazione di indexed property setter negli ActionForms quando genero i Form con XDoclet. Questo supporto richiede l'aggiunta dei JAR di Velocity all'elenco JAR 3rd party. Attualmente Velocity è usato solo da XDoclet.
  • Aggiunta l'e-mail di "Informazioni Account" come parte del processo di registrazione. A questa e-mail viene inviato l'indirizzo e-mail inserito dall'utente alla registrazione.
  • Dipendenze aggiornate:
    • Cactus 1.6 Nightly (20030119) in modo da supportare il task "cactus" task con Resin 3.0.5
    • JSTL 1.0.5
    • Applicata patch su WebTest di Canoo per farlo funzionare con Ant 1.6
    • Hibernate 2.1.2
    • MySQL JDBC Driver 3.0.11

16.01.2004 - Rilasciato AppFuse 1.3

Questa release corregge alcuni problemi di incompatibilità con Resin ed altri database - nello specifico PostgreSQL e DB2. La principale nuova funzionalità major in questa release è la Possibilità di Cambiare Facilmente Database. In pratica, puoi passare molto facilmente dall'usare MySQL a PostgreSQL modificando solo alcune proprietà nel tuo build.properties. L'ho implementato nel mio attuale progetto settimana scorsa in quanto svolgo la maggior parte della mia attività di sviluppo (presso cliente) su di un PowerBook. Il cliente vuole il deploy sul database DB2 - e non c'è un'installazione di DB2 install per il Mac. Poiché Hibernate permette di passare da un database all'altro facilmente, ho capito che potevo sviluppare usando MySQL sul Mac, ma avere il default (la versione in CVS) che usa DB2. Una delle cose che non volevo fare era avere un a build.properties.sample, perché preferisco i progetti che "funzionano e basta" quando digiti "ant". Pertanto ho modificato il processo di build in modo che il file database.properties sia generato dalle impostazione di default (MySQL) o quelle in build.properties (se specificate). Come parte del processo di build, Ant cerca nei seguenti file build.properties:

  • ${user.home}/.${ant.project.name}-build.properties
  • ${user.home}/.build.properties
  • build.properties

Ciò ti permette di prendere le tue impostazioni database personalizzate e metterle in ~/.build.properties e queste saranno applicate a qualsiasi progetto derivato da AppFuse. Ciò rende semplice mantenere la versione in CVS del tuo progetto legata ad un database e la versione locale dello sviluppatore ad un database diverso.

Per quanto sia vero che molto probabilmente parlerau con un solo database per la durata del tuo progetto, questo esercizio dimostra quanto sia semplice migrare da MySQL ad un altro database. Prova anche quanto AppFuse possa integrarsi facilmente con altri database (almeno da questa release). Roba notevole IMO. Ecco una carrellata dettagliata di tutte le modifiche nel changelog.

  • Diverse modifiche alle impostazioni di accesso al database in modo che il file database.properties venga generato a run-time dalle proprietà in build.properties (default su MySQL). Ciò rende semplice per gli utenti usare un database MySQL per lo sviluppo ed un database DB2 database (o qualsiasi altro) in produzione. Basta che personalizzi le tue impostazioni database e le metti in ~/.build.properties o ~/.appname- build.properties e tali impostazioni verranno usate al posto di quelle di default.
    • All'interno di questo processo, ho effettuato test su AppFuse con DB2 8.1 (si Windows) e PostgreSQL 7.4 (su OS X).
    • Effettuare test su altri server mi ha obbligato a modificare generator-class="native" a generator-class="increment" - che funziona ancora bene su MySQL.
    • Ho anche modificato il tomcat-context.xml in modo da sostituire dinamicamente le proprietà relative al database e defaultAutoCommit vale ora "true" per default.
  • Aggiunte pagine di errore per i codici 404 (pagina non trovata) e 403 (accesso negato), entrambe con delle belle immagini. ;0) Protetto /editUser.do solo per il ruolo admin.
  • Spostati i filter-mapping dai JavaDoc (XDoclet) del Filter a metadata/web/filter-mappings.xml in modo da controllarne l'ordine di esecuzione.
  • Resa configurabile la funzionalità del RememberMe tramite una proprietà "rememberMe.enabled" in app-settings.xml. Questa non viene letta su Resin finché il filtro non viene invocato almeno una volta. Tomcat inizializza i filter all'avvio.
  • Aggiornata oscache.jar in Hibernate 2.1.1 as OSCache 2.0.1 e configurata OSCache in modo da fare il caching delle modifiche alle JSP. Modificato anche il oscache-2.0.1.jar in modo da avere una URI per la tag library. Disattivato il caching delle pagine JSP - per attivarlo, scommenta filter-mapping in metadata/web/filter-mappings.xml.
  • Effettuate modifiche per essere Resin 3.0.4 friendly. Leggi Ancora...
  • Effettuato il refactoring di BaseDaoHibernate in modo da consolidare i metodi retrieveObject e removeObject. Modificato anche saveObject in modo da effettuare il ses.saveOrUpdate ed eliminato il metodo storeObject.
  • Sostituito CompressionFilter con GZipFilter che funziona su Resin.
  • Aggiunto il supporto per lo stylesheet per la stampa. Grazie a Bear Giles per il suggerimento.
  • Aggiunto Clickstream e i menu/JSP per vedere i percorsi dell'utente.
  • Aggiornamento Dipendenze:
    • XDoclet 1.2.0
    • Cactus 1.6 Nightly (20030116) per avere il task "cactus" con supporto per l'attributo "contextxml" per il test su Tomcat.

BTW, ho nascosto tutte le release precedenti di AppFuse in modo da evitare confusioni nel download - se hai bisogno di scaricare una versione precedente, prego fammelo sapere.

08.01.2004 - AppFuse ed ant 1.6.0

L'aggiornamento da ant 1.5.4 alla 1.6.0 richiede le seguenti modifiche al build.xml (solo FYI):

===================================================================
RCS file: /cvsroot/struts/appfuse/build.xml,v
retrieving revision 1.37
diff -r1.37 build.xml
5,6c5,6
<     <!ENTITY properties SYSTEM "file:properties.xml">
<     <!ENTITY app-settings SYSTEM "file:app-settings.xml">
---
>     <!ENTITY properties SYSTEM "file:./properties.xml">
>     <!ENTITY app-settings SYSTEM "file:./app-settings.xml">
altrimenti ant si lamenta con un file:properties.xml could not be found.
Venerdì 10 gennaio: Corretto in CVS. Ci sono però ancora problemi nell'esecuzione di WebTest Canoo con la 1.6.0

20.12.2003 - Rilasciato AppFuse 1.2

Questa è principalmente una release di bugfix. Di seguito i dettagli dalle release notes:

  • Rimosso l'Http Post per il Remember Me. Non rigirava l'utente sulla pagina richiesta in origine. L'uso di reponse.sendRedirect fa sì che l'utente finisca nel posto giusto. Attivata la codifica della password (SHA) per proteggere eventuali password che finiscano nei file di log. Disattivata la codifica su Tomcat.
  • Modificati i parametri di configurazione nel servlet context in modo che siano in una hashmap.
  • Miglioramenti nel tool StrutsGen in modo da generare anche la schermata di elenco e riempire altri elementi mancanti.
  • Modificata la logica di chiusura della sessione Hibernate quando non viene trovato un oggetto in BaseDaoHibernate.
  • Corretto bug in UserAction.save: quando creo un nuovo utente, il ruolo di default è "tomcat" indipendentemente dalla scelta dell'utente.
  • Dipendenze aggiornate:
    • Hibernate 2.1.1
    • Struts Menu 2.1
    • WebTest Build 379

12.12.2003 - Rilasciato AppFuse 1.1

La feature principale in questa release è la Documentazione. Ho finalmente trovato il tempo per scrivere alcuni Tutorial su come sviluppare con AppFuse. Sono su questo wiki ed anche nella cartella "docs" dei download di sorgente e binari. Nello scrivere questa documentazione, ho ripercorso il codice in dettaglio con un pettine fine in modo da essere sicuro che il comportamento fosse quello desiderato.

Sono finalmente riuscito a far funzionare il tutto con J2EE 1.4, il che di base significava rimuovere il j2ee.jar dal classpath della mia MailUtil ed includere semplicemente activation.jar e mail.jar. Se non ti è ancora chiaro, basta che modifichi i path di activation.jar e mail.jar in properties.xml (cerca common.compile.classpath). Puoi usare j2ee.jar invece di mail.jar e activation.jar con J2EE 1.3 e 1.4 B2.

Sono anche riuscito a far andare tutti gli unit test su Tomcat 5, ed il target "setup-tomcat" ora lo supporta correttamente. Non sono invece riuscito a far funzionare il "Remember Me" - vedi la mailing list tomcat-user per ulteriori dettagli.

Sono inclusi in questo rilascio gli aggiornamenti ad Hibernate 2.1 Final e Display Tag 1.0 B2. Per un changelog completo, vedi il README.txt in CVS.

30.11.2003 - Rilasciato AppFuse 1.0

Credo che questa release si meriti un bel titolo da 1.0 in quanto si tratta di una rappresentazione aggiornate di quanto ho imparato e percepito come best practice nella realizzazione di applicazioni web. Naturalmente, come imparo altro, continuerò a tirar fuori nuove release.

In questa release, ho applicato numerosi refactoring e migliorato le feature esistenti. Le interfacce DAO e Manager non sono più legate a Struts o Hibernate. L'oggetto Session di Hibernate ora viene passato come argomento nei costruttori di Manager e DAO, invece che nelle firme dei metodi. La DAOFactory è stata riscritta da Bear Giles in modo da usare la reflection per creare nuove istanze dei DAO di Hibernate. Ora, se aggiungi un nuovo DAO, non devi più modificare DAOFactory e DAOFactoryHibernate. Per creare una nuova istanza di DAO, il codice è il seguente:

LookupDAO dao = (LookupDAO) DAOFactory.getInstance(conn, LookupDAO.class);

...dove conn è un oggetto connessione ottenuto da ServiceLocator o ActionFilter. Quando aggiungi nuovi POJO, devi ancora aggiungerli al ServiceLocator (per i test JUnit) e ad hibernate.cfg.xml, il che non è piacevole. Mi piacerebbe trovare un modo per dire ad Hibernate di guardare semplicemente in appfuse-ejb.jar.

La feature del Remember Me è stata riscritta in modo che i cookie relativi a username e password siano disponibili solo sotto l'url-pattern /appfuse/security. Ho anche modificato l'invio s "j_security_check" nella LoginServlet da response.sendRedirect ad una HTTP POST, usando HttpClient dei Jakarta Commons. La motivazione di avere una LoginServlet al posto di usare semplicemente action="j_security_check" nei miei <form> è nella possibità di avere password codificate.

Ho sviluppato 3 diverse applicazioni usando AppFuse (struts-resume è una di loro), e mi sono reso conto che è problematico aggiornarle a nuove versioni di AppFuse. Per questo motivo non raccomando di aggiornare, a meno che non ce ne sia davvero il bisogno. Ho intenzione di aggiornare struts-resume ad AppFuse 1.0, ma dubito che lo farò per le prossime release di AppFuse - è che il lavoro è troppo se paragonato alla ricompensa.

Le release precedenti si possono trovare su http://raibledesigns.com/downloads.

Se vuoi incoraggiarmi a migliorare AppFuse, puoi effettuare una donazione.



Go to top   Edit this page   More info...   Attach file...
This page last changed on 16-Jul-2008 07:39:22 MDT by MarcelloTeodori.