Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
Il pattern architetturale MVC (Model View Controller) favorisce la manutenzione delle applicazioni web tramite una architettura elegante ed una chiara ed esplicita separazione delle competenze, l'impiego dei più diffusi pattern di software engineering, il controllo completo dell'HTML generato e degli URL, la testabilità ed estendibilità.
In questa sessione vedremo le novità principali di Asp.Net MVC in versione 3.
La sessione è stata tenuta a SMAU Business Bologna il 9 giugno 2011
Grazie a Team Foundation Build è possibile adottare pratiche di integrazione continua nel proprio progetto. In questa presentazione viene introdotta la struttura di tfs build assieme alle tecniche base per effettuare una customizzazione della build.
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
Il pattern architetturale MVC (Model View Controller) favorisce la manutenzione delle applicazioni web tramite una architettura elegante ed una chiara ed esplicita separazione delle competenze, l'impiego dei più diffusi pattern di software engineering, il controllo completo dell'HTML generato e degli URL, la testabilità ed estendibilità.
In questa sessione vedremo le novità principali di Asp.Net MVC in versione 3.
La sessione è stata tenuta a SMAU Business Bologna il 9 giugno 2011
Grazie a Team Foundation Build è possibile adottare pratiche di integrazione continua nel proprio progetto. In questa presentazione viene introdotta la struttura di tfs build assieme alle tecniche base per effettuare una customizzazione della build.
Abstract:
* Introduzione a Seam ;
* Ciclo di vita di Seam;
* Component and context;
* Absolute Inversion of Control;
* Rapid Seam development (con esempio di start-up su eclipse o se si preferisce a linea di comando);
* Differenze sostanziali con la versione 3.0 / Ajax and Javascript remoting
How create a single page apps using html5 and javascript Stefano Marchisio
Create a html5/javascript apps with mvc/ajax using knockout.js/mvvm. Javascript to IQueryable is a framework that allows you to write a simple query in javascript client side and then execute it server side with EntityFramework or a linq provider that implement IQueryable. On the server is used "Dynamic Expressions and Queries in LINQ by Microsoft" to compose dynamically your query. In this way you can create a grid with filter, paging and sort functions. There is also support for: mvc3 unobtrusive jquery validation and jquery mobile/phonegap. - http://Javascriptiqueryable.codeplex.com - http://www.youtube.com/watch?v=qjwyKwsXHKs - http://www.linqitalia.com/articoli/entity-framework/sfruttare-javascript-eseguire-query-linq-server-tramite-dynamic-iqueryable.aspx
SaaS con Symfony2 un caso *molto* concreto di applicazione multitenantTassi Francesco
Sogni di sviluppare il tuo SaaS, di poterlo gestire, curare, evolvere. Speri di attrarre nuovi utenti con funzionalità innovative, di offrire un servizio veloce e puntuale. Finalmente ti puoi concentrare sulla qualità del tuo prodotto. Poi una mattina ti svegli, hai un database da 50GB, modificare una colonna richiede 8 ore e ti ritrovi in trappola. Gioie e dolori delle applicazioni multi-tenant. In questo talk analizzeremo perché e come abbiamo suddiviso il database di un SaaS da circa 1 milione di utenti.
> Vedremo come aggiungere un parametro di selezione del db a tutti i comandi della console, come eseguire comandi in parallelo per ridurre i tempi di manutenzione, come aggiungere info di debug utilizzando gli eventi del framework, come gestire il caricamento delle fixtures, quali idee si sono rivelate vincenti e quali no.
Xamarin.Forms is a framework for building cross-platform applications that share most of the UI codebase among the UWP, iOS and Android platforms. Due to the higher level of abstraction compared to Xamarin.Native, Xamarin.Forms applications may suffer from memory leaks and slow rendering times at the expense of the final user experience. In the session, we will explore the mechanisms used by Xamarin.Forms to translate abstract UI components into native ones, highlight with demos what are the main bottlenecks met by developer, how to solve them and get close to native performances.
Al DjangoVillage di Orvieto 2014, ha partecipato il nostro Matteo Durighetto, area DB di Miriade e vicepresidente ITPUG, con un intervento sulle ultime novità di PostgreSQL 9.4. In queste slide verrano esposte le feature maggiori di PostgreSQL 9.3 come la cascanding replication con il remastering, le updatable view, il parallel pg dump e i nuovi costrutti di query come i lateral join ma l’attenzione si focalizza sulle nuove feature che porterà con sè la nuova versione 9.4.
Sono state esposte le feature maggiori di PostgreSQL 9.3 come la cascanding replication con il remastering, le updatable view, il parallel pg dump e i nuovi costrutti di query come i lateral join ma l’attenzione si è focalizzata sulle nuove feature che porterà con sè la nuova versione 9.4.
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Codemotion
Codemotion Rome 2015 - Costruiamo con Spring Boot una applicazione Java EE con transazioni multiple JDBC-JMS utilizzando H2 e HornetQ (embedded in memory), il supporto di autoconfiguration JAX-RS (Jersey), le annotazioni JSR 250 per i lifecycle hooks, e le annotazioni JSR 330 utilizzabili per AS proprietari e per la portabilità in container di dependency injection come Spring. Per finire distribuiremo su Undertow embedded HTTTP server, su un AS standalone (Apache TomEE) e come PAAS su Cloud Foundry.
Abstract:
* Introduzione a Seam ;
* Ciclo di vita di Seam;
* Component and context;
* Absolute Inversion of Control;
* Rapid Seam development (con esempio di start-up su eclipse o se si preferisce a linea di comando);
* Differenze sostanziali con la versione 3.0 / Ajax and Javascript remoting
How create a single page apps using html5 and javascript Stefano Marchisio
Create a html5/javascript apps with mvc/ajax using knockout.js/mvvm. Javascript to IQueryable is a framework that allows you to write a simple query in javascript client side and then execute it server side with EntityFramework or a linq provider that implement IQueryable. On the server is used "Dynamic Expressions and Queries in LINQ by Microsoft" to compose dynamically your query. In this way you can create a grid with filter, paging and sort functions. There is also support for: mvc3 unobtrusive jquery validation and jquery mobile/phonegap. - http://Javascriptiqueryable.codeplex.com - http://www.youtube.com/watch?v=qjwyKwsXHKs - http://www.linqitalia.com/articoli/entity-framework/sfruttare-javascript-eseguire-query-linq-server-tramite-dynamic-iqueryable.aspx
SaaS con Symfony2 un caso *molto* concreto di applicazione multitenantTassi Francesco
Sogni di sviluppare il tuo SaaS, di poterlo gestire, curare, evolvere. Speri di attrarre nuovi utenti con funzionalità innovative, di offrire un servizio veloce e puntuale. Finalmente ti puoi concentrare sulla qualità del tuo prodotto. Poi una mattina ti svegli, hai un database da 50GB, modificare una colonna richiede 8 ore e ti ritrovi in trappola. Gioie e dolori delle applicazioni multi-tenant. In questo talk analizzeremo perché e come abbiamo suddiviso il database di un SaaS da circa 1 milione di utenti.
> Vedremo come aggiungere un parametro di selezione del db a tutti i comandi della console, come eseguire comandi in parallelo per ridurre i tempi di manutenzione, come aggiungere info di debug utilizzando gli eventi del framework, come gestire il caricamento delle fixtures, quali idee si sono rivelate vincenti e quali no.
Xamarin.Forms is a framework for building cross-platform applications that share most of the UI codebase among the UWP, iOS and Android platforms. Due to the higher level of abstraction compared to Xamarin.Native, Xamarin.Forms applications may suffer from memory leaks and slow rendering times at the expense of the final user experience. In the session, we will explore the mechanisms used by Xamarin.Forms to translate abstract UI components into native ones, highlight with demos what are the main bottlenecks met by developer, how to solve them and get close to native performances.
Al DjangoVillage di Orvieto 2014, ha partecipato il nostro Matteo Durighetto, area DB di Miriade e vicepresidente ITPUG, con un intervento sulle ultime novità di PostgreSQL 9.4. In queste slide verrano esposte le feature maggiori di PostgreSQL 9.3 come la cascanding replication con il remastering, le updatable view, il parallel pg dump e i nuovi costrutti di query come i lateral join ma l’attenzione si focalizza sulle nuove feature che porterà con sè la nuova versione 9.4.
Sono state esposte le feature maggiori di PostgreSQL 9.3 come la cascanding replication con il remastering, le updatable view, il parallel pg dump e i nuovi costrutti di query come i lateral join ma l’attenzione si è focalizzata sulle nuove feature che porterà con sè la nuova versione 9.4.
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Codemotion
Codemotion Rome 2015 - Costruiamo con Spring Boot una applicazione Java EE con transazioni multiple JDBC-JMS utilizzando H2 e HornetQ (embedded in memory), il supporto di autoconfiguration JAX-RS (Jersey), le annotazioni JSR 250 per i lifecycle hooks, e le annotazioni JSR 330 utilizzabili per AS proprietari e per la portabilità in container di dependency injection come Spring. Per finire distribuiremo su Undertow embedded HTTTP server, su un AS standalone (Apache TomEE) e come PAAS su Cloud Foundry.
Sempre più di frequente sentiamo parlare di nuove librerie, framework o linguaggi. Tutte queste nuove tecnologie promettono miracoli ma il nostro tempo è una risorsa finita e non abbiamo il lusso di poter approfondire ogni novità.
Le PWA si basano su tecnologie che già usiamo tutti i giorni nello sviluppo WEB quindi, senza farci intimidire, possiamo approcciare qualcosa che effettivamente rivoluzioni il nostro lavoro e che possa farlo con il minimo sforzo da parte nostra.
When Old Meets New: Turning Maven into a High Scalable, Resource Efficient, C...Massimiliano Dessì
Turning Maven into a High Scalable, Resource Efficient, Cloud Ready Microservice
Embracing Microservice Architecture in a new project is something that most of developers want!
But how about the old and gold projects that are not designed and planned for it?
What about refactoring a real legacy piece of software that is stable and used by almost all Java developers out there?
Come to this talk to see how we transformed Maven builds in a Cloud Ready Microservice.
Some covered topics are:
-Live objects extracted from Maven Mojos and shared between different classloaders
-Cloud Native features, Configuration and in memory plugins
-Turn any Maven build into incremental ones
-Concurrent use of the same Maven compiler
-Turn into reusable Maven internal objects to decrease memory footprint and increase speed
-How fits in Drools and jBPM ecosystem
-Trade offs
1. Spring, iBATIS e Transazioni AOP
nel Jug Avis Web
Massimiliano Dessì Frame S.r.l
http://www.jugsardegna.org/vqwiki/jsp/Wiki?MassimilianoDessi
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 1
Macomer, 28 Gennaio 2006
2. Architettura Generale Jug Avis Web:
Interamente Interface Driven Design sviluppato usando TDD
(Test Driven Development)
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 2
Macomer, 28 Gennaio 2006
3. Data Access Tier:
Soluzioni prese in considerazione per l'accesso a DB
JDBC
Hibernate
iBatis
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 3
Macomer, 28 Gennaio 2006
4. JDBC:
Pro
- Ben Conosciuta, possibilità controllo fine sul Codice e su SQL
Contro
-Eccessiva Verbosità
-Manutenzione con query complesse composte dinamicamente
-Codice “boilerplate” con try-catch obbligatori
-La classe DAO “deve” sapere di essere eseguita dentro una
transazione e deve essere scritto di conseguenza
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 4
Macomer, 28 Gennaio 2006
5. Hibernate:
Pro
-ORM, ragionamento OO-LIKE , non SQL-LIKE
-Tools per velocizzare generazione codice e files
-Adatto con DB modificati spesso
-Caching
Contro
-Non SQL-LIKE, no DBA Tuning
-Necessario per il web l' uso del pattern Open Session in View
-N+1 Select
-Esperienza per controllo fine settaggi configurazione
Licenza: GPL
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 5
Macomer, 28 Gennaio 2006
6. iBatis:
Pro
-Data Mapper, SQL separato dal codice, DBA Tuning
-Semplicissimo da usare
-Caching
-Velocità rispetto ad ORM
-Ora disponibile tool per generazione codice (Abator)
-N+1 select evitabile scrivendo opportunamente le query
Contro
Non è ancora “famoso” e conosciuto
Licenza: Apache
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 6
Macomer, 28 Gennaio 2006
7. iBatis configurazione con Spring
<bean id=quot;jug4avisweb.sqlMapClientquot;
class=quot;org.springframework.orm.ibatis.SqlMapClientFactoryBeanquot;>
<property name=quot;configLocationquot;>
<value>WEB-INF/jug-sqlMapConfig.xml</value>
</property>
</bean>
<bean id=quot;jug4avisweb.dataSourcequot;
class=quot;org.springframework.jndi.JndiObjectFactoryBeanquot;>
<property name=quot;jndiNamequot;>
<value>java:comp/env/jdbc/jug4avis</value>
</property>
</bean>
<bean id=quot;transactionManagerquot;
class=quot;org.springframework.jdbc.datasource.DataSourceTransactionManagerquot;>
<property name=quot;dataSourcequot;><ref bean=quot;jug4avisweb.dataSourcequot;/></property>
</bean>
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 7
Macomer, 28 Gennaio 2006
8. <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?>
<!DOCTYPE sqlMapConfig
PUBLIC quot;-//iBATIS.com//DTD SQL Map Config 2.0//ENquot;
quot;http://www.ibatis.com/dtd/sql-map-config-2.dtdquot;>
<sqlMapConfig>
<settings
cacheModelsEnabled=quot;truequot;
enhancementEnabled=quot;truequot;
lazyLoadingEnabled=quot;falsequot;
maxRequests=quot;64quot;
maxSessions=quot;20quot;
maxTransactions=quot;8quot;
useStatementNamespaces=quot;falsequot;
/>
<sqlMap
resource=quot;org/jugsardegna/avis/web/db/ibatis/CentroAvisDaoPostgres.xmlquot;/>
<sqlMap
resource=quot;org/jugsardegna/avis/web/db/ibatis/DonorDaoPostgres.xmlquot;/>
</sqlMapConfig>
File di configurazione jug4avisweb-sqlMapConfig.xml
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web.
8
Macomer, 28 Gennaio 2006
10. <select id=quot;getCentroAvisquot; resultMap=quot;resultCentroAvisquot;>
SELECT * FROM centri_avis WHERE id= #value# ;
</select>
<delete id=quot;deleteCentroquot; parameterClass=quot;longquot;>
DELETE FROM centri_avis WHERE id=#value# ;
</delete>
<insert id=quot;insertCentroquot; parameterClass=quot;centroAvisquot;>
<selectKey keyProperty=quot;idquot; resultClass=quot;longquot;>
select nextval('id_univoco')
</selectKey>
INSERT INTO centri_avis (id, nome, localita, telefono, email, fax, sito_web,
credito_residuo_sms, numero_donatori)
VALUES ( #id#, #nome#, #localita#, #telefono#, #email#, #fax#, #sitoWeb#, #creditoResiduoSms#,
#numeroDonatori#);
</insert>
<update id=quot;aggiornaCentroquot; parameterClass=quot;centroAvisquot;>
UPDATE centri_avis SET nome = #nome# , telefono = #telefono#, email = #email#,
fax =#fax#, sito_web = #sitoWeb#, localita = #localita#, credito_residuo_sms = #creditoResiduoSms#,
numero_donatori = #numeroDonatori#
WHERE Id = #id# ;
</update>
</sqlMap>
File di configurazione CentroAvisDaoPostgres.xml
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 10
Macomer, 28 Gennaio 2006
11. iBatis DAO (1)
SqlMapCentroAvisDao
public class SqlMapCentroAvisDao extends SqlMapClientDaoSupport
implements ICentroAvisDao{
public List getCentriAvis(){
return getSqlMapClientTemplate().queryForList(quot;getCentriAvisquot;, null);
}
public CentroAvis getCentro(long idCentroAvis){
return (CentroAvis)getSqlMapClientTemplate().
queryForObject(quot;getCentroAvisquot;, new Long(idCentroAvis));
}
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 11
Macomer, 28 Gennaio 2006
12. iBatis DAO (2)
public long insertCentroAvis(CentroAvis centro){
return ((Long)getSqlMapClientTemplate().
insert(quot;insertCentroquot;, centro)).longValue();
}
public int updateCentroAvis(CentroAvis centro){
return ((Integer)getSqlMapClientTemplate().
update(quot;aggiornaCentroquot;, centro)).intValue();
}
public int deleteCentroAvis(long idCentroAvis){
return ((Integer)getSqlMapClientTemplate().
delete(quot;deleteCentroquot;, idCentroAvis)).intValue();
}
}
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 12
Macomer, 28 Gennaio 2006
13. - I dao non sanno minimamente di essere dentro
una transazione o meno
- non siamo obbligati a gestire try-catch
(naturalmente in una altra parte della applicazione,
verranno tracciate e gestite convenientemente in caso
vengano lanciate eccezioni)
- Le query sono separate e facili da modificare
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 13
Macomer, 28 Gennaio 2006
14. Transazioni (obiettivo)
Vogliamo fare in modo che alcuni metodi vengano
eseguiti come unità atomiche di lavoro:
- Senza modiche nel codice in maniera
che siano metodi riutilizzabili
- Senza scrivere codice,
ma dichiarando (Declarative Transaction Demarcation)
semplicemente quali metodi e
con quali livelli di scope
Nota: Le transazioni di cui necessitiamo sono
su un datasource locale, non distribuito.
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 14
Macomer, 28 Gennaio 2006
15. Per realizzare i nostri obiettivi usiamo il supporto
per utilizzare l'AOP (Aspect Oriented Programming)
per mezzo di Spring.
Con AspectJ
o
con classi Java che fungano da Proxy
In questa brevissima presentazione vedremo il
secondo caso, di più facile comprensione.
Nota:
AspectJ verrà usato nel Jug Avis Web con l'uscita
della versione 2.0 di Spring nella primavera 2006
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 15
Macomer, 28 Gennaio 2006
16. Brevissima spiegazione sull' AOP:
-Separazione delle competenze trasversali
-Complementare all' OO
es.
Nelle classi, dove è necessario il logging, ad esempio il
tracciamento delle eccezioni, viene richiamato un Logger
(staticamente o con l' IOC ), e viene eseguito il tracciamento
Con la programmazione ad Aspetti scriviamo solo una volta il modulo (Aspect) e
nella sua dichiarazione diciamo quando deve essere eseguito.
Se usiamo AspectJ, durante la “compilazione” (weaving), l' aspect weaver (compilatore
compone il sistema finale legando i nostri moduli trasversali (aspects) .
Naturalmente questo processo produce bytecode standard per la virtual machine.
Il logger sparisce dalle classi dove lo avremmo dovuto mettere per poterlo usare con
il solo uso dell' OO.
Possiamo anzi, creare anche un aspect che gestisca il lancio delle eccezioni !
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 16
Macomer, 28 Gennaio 2006
17. Grazie all' AOP possiamo modularizzare le competenze trasversali
che altrimenti con la programmazione ad Oggetti “tradizionale” sarebbero
presenti in tutte le classi in cui sono necessarie.
Vediamo invece ora come è possibile “emulare” il funzionamento di AspectJ,
con delle classi proxy usando il pattern Proxy e Decorator.
Naturalmente il funzionamento con le classi proxy, è conforme alle
interfacce
della AOP Alliance, per poter essere interoperabile tra le varie
implementazioni AOP.
Il funzionamento con i Proxy di SpringAOP, ruota attorno all' uso di una
catena di intercettori tra l'oggetto chiamante e quello invocato.
Ogni elemento della catena ha la possibilità di interporre logica prima della
invocazione, dopo l'invocazione, o circuitare anche l' invocazione.
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 17
Macomer, 28 Gennaio 2006
19. Ora che abbiamo spiegato in maniera molto veloce lo scopo dell' AOP,
vediamo come possiamo usarlo nel JUG Avis per le Transazioni.
Prendiamo come esempio la classe ManagerCentriAvis, dove, quando un centro
deve essere eliminato, deve eliminare nella stessa transazione anche i
donatori di quel centro.
Perciò questa classe sarà la classe target.
Come Proxy usiamo un classe predefinita fornita da Spring:
TransactionProxyFactoryBean (AOP Proxy di pag. 18)
che per fare il suo lavoro ha bisogno dell' iniezione di
-TransactionManager
-Target (ManagerCentriAvis)
-TransactionAttributes (nomi o pattern ai quali applicare la
transazionalità)
Nella parte dei TransactionAttributes possiamo definire la propagazione della
transazione, il livello di isolamento, il timeout e il flag readOnly.
Nota:
Se avessimo bisogno di dichiarare più manager useremmo una altra tecnica.
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 19
Macomer, 28 Gennaio 2006
21. Transaction Attributes:
PROPAGATION_REQUIRED : Supporta la transazione esistente, Se non
esiste ne crea una nuova
PROPAGATION_SUPPORTS: Supporta la transazione esistente, Se non
esiste esegue non transazionalmente
PROPAGATION_MANDATORY:Supporta la transazione esistente, Se non
esiste lancia una eccezione
PROPAGATION_REQUIRES_NEW:Fa partire sempre una nuova
transazione, se ne esiste già una la sospende.
PROPAGATION_NOT_SUPPORTED:Non viene eseguito se esiste una
transazione attiva. Eseguito sempre non transaz.e sospende quelle attive.
PROPAGATION_NEVER: Eseguito non transazionalmente, viene lanciata na
eccezione se esiste una transazione attiva.
PROPAGATION_NESTED:Eseguito in una transazione annidata se ne esiste
una, altrimenti, viene eseguita come propagation_required.
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 21
Macomer, 28 Gennaio 2006
22. Riferimenti 1
Spring :
http://www.springframework.org
Nel Jug Sardegna
(Articoli, Recensioni Libri):
http://www.jugsardegna.org/vqwiki/jsp/Wiki?SpringFramework
Jug Avis:
http://www.jugsardegna.org/vqwiki/jsp/Wiki?JugAvis
Jug Avis Web (prima parte):
http://www.jugsardegna.org/vqwiki/jsp/Wiki?action=action_view_attachment
&attachment=Spring_webflowJug16Luglio2005.pdf
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 22
Macomer, 28 Gennaio 2006
23. Riferimenti 2
IBatis :
http://ibatis.apache.org/
Nel Jug Sardegna:
http://www.jugsardegna.org/vqwiki/jsp/Wiki?IBatisCaseStudy
Abator for iBatis:
http://ibatis.apache.org/abator.html
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 23
Macomer, 28 Gennaio 2006
24. Riferimenti 3
AspectJ:
http://www.eclipse.org/aspectj/
Aspect-Oriented Software Development AOSD
http://www.aosd.net/
AspectJ in Action
http://www.manning.com/books/laddad
Massimiliano Dessì, Spring, iBatis e Transazioni AOP nel Jug Avis Web. 24
Macomer, 28 Gennaio 2006