1. Spring 2008 what's the new ?
15 minute about Spring innovations
Massimiliano Dessì
http://www.jugsardegna.org/vqwiki/jsp/Wiki?MassimilianoDessi
Massimiliano Dessì, Sun Tech Day 1
Cagliari, 13 Giugno 2008
2. Chi è lo Speaker ?
Software Architect a SardegnaIT
Co-fondatore e consigliere Jug Sardegna Onlus
Fondatore e coordinatore:
SpringFramework Italian User Group
Jetspeed Italian User Group
Groovy Italian User Group
Massimiliano Dessì, Sun Tech Day
2
Cagliari, 13 Giugno 2008
3. OSGi: The Dynamic Module System for Java
Cosa permette ?
1. Minimizzare i tempi in cui l'applicazione non risponde durante i rilasci, e
migliorare le procedure di rollback quando si fanno nuovi rilasci, assicurando la
continuità del servizio.
2. Versionamento delle librerie e delle classi per permettere la gestione della
compatibilità all' indietro. OSGi permette la gestione dinamica e il
versionamento di classi e librerie.
3. Partizionamento delle applicazioni in moduli.
Massimiliano Dessì, Sun Tech Day
3
Cagliari, 13 Giugno 2008
4. Spring Dynamic Modules for OSGi
Spring con OSGi permette:
- Migliore separazione della logica applicativa in moduli
- Possibilità di deployare più versioni dello stesso modulo o libreria in maniera concorrente
- Poter fare il discovery dinamicamente e usare servizi forniti da altri moduli nel sistema
- Capacità di installare aggiornare e disinstallare moduli in un sistema funzionante (senza fermarlo)
- Utilizzo di Spring per istanziare , configurare, assemblare e decorare componenti da e tra moduli.
- Un modello semplice e familiare per gli sviluppatori enterprise, per poter utilizzare le features della
piattaforma OSGi.
Massimiliano Dessì, Sun Tech Day 4
Cagliari, 13 Giugno 2008
6. Dao Registrato nel' OSGi service register:
import java.util.Dictionary;
import java.util.Properties;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
public class ItemDaoActivator implements BundleActivator {
private ServiceRegistration registration;
public void start(BundleContext context) {
ItemDao dao = new ItemDaoImpl();
Dictionary props = new Properties();
registration = context.registerService(ItemDao.class.getName(), dao,
props);
}
public void stop(BundleContext context) {
registration.unregister();
}
}
Massimiliano Dessì, Sun Tech Day 6
Cagliari, 13Giugno 2008
7. Classe Tracker del DAO nell' OSGi service register
import org.magicbox.osgi.services.ItemService;
import org.magicbox.osgi.services.ItemServiceImpl;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
import org.osgi.util.tracker.ServiceTracker;
public class ItemDaoTracker extends ServiceTracker{
private final ItemServiceImpl itemService = new ItemServiceImpl();
private int daoCount = 0;
private ServiceRegistration registration = null;
public ItemDaoTracker(BundleContext context) {
super(context, ItemDao.class.getName(), null);
}
private boolean registering = false;
public Object addingService(ServiceReference reference) {
ItemDao myDao = (ItemDao) context.getService(reference);
...
return myDao;
}
public void removedService(ServiceReference reference, Object service) {
....
}
}
Massimiliano Dessì, Sun Tech Day
7
Cagliari, 13Giugno 2008
8. Activator del servizio che carica il Tracker del DAO
import org.magicbox.osgi.dao.ItemDaoTracker;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class ItemServiceActivator implements BundleActivator {
private ItemDaoTracker tracker;
public void start(BundleContext context) {
tracker = new ItemDaoTracker(context);
tracker.open();
}
public void stop(BundleContext context) {
tracker.close();
}
}
Massimiliano Dessì, Sun Tech Day
8
Cagliari, 13Giugno 2008
10. Manifest
# Indentification headers
Bundle-SymbolicName: org.magicbox.ItemService
Bundle-Version: 1.0.1
Bundle-Name: Sample Service
Bundle-Vendor: Samples, Inc.
# Class Path
Bundle-ClassPath: .
# Bundle Lifecycle management
Bundle-Activator:org.magicbox.ItemServiceActivator
# Dependencies
Import-Package: org.osgi.framework;version=1.3
Require-Bundle: org.sample.AnotherService;bundle-version=”[1.2.0,2.0.0)”
# Exports
Export-package: org.magicbox.ItemService
Tramite gli export-package e gli Import-Package dichiariamo di quali versioni di
classi/jar ogni modulo ha bisogno, in questo modo possiamo avere classi/jar
che non entrano in conflitto, perchè sono gestiti attraverso OSGi.
Ora vediamo dove viene usato OSGi con Spring
Massimiliano Dessì, Sun Tech Day
10
Cagliari, 13 Giugno 2008
11. Modules at all level (not only in your app)
Massimiliano Dessì, Sun Tech Day
11
Cagliari, 13 Giugno 2008
12. Dynamic Module Kernel (DMK),
Kernel basato su OSGi-
(=modularità e versionamento),
configurato con un set minimo di
bundle (profile).
Ogni modulo ha un personality
che descrive che tipo di modulo è
(es:web, batch, web service), ogni
modulo può quindi essere
aggiornato indipendentemente
dagli altri, ad es un web module è
configurato come contesto in
tomcat.
Forme di deploy:
WAR
OSGi bundles
PAR (Platform archive resource)
Massimiliano Dessì, Sun Tech Day
12
Cagliari, 13 Giugno 2008
13. Riferimenti
Java.net :
http://wiki.java.net/bin/view/People/MassimilianoDessi
Jug Sardegna
http://www.jugsardegna.org/vqwiki/jsp/Wiki?MassimilianoDessi
OSGi
http://www.osgi.org/
http://springframework.org/osgi
http://osgi.dzone.com/news/there-place-osgitm-enterprise-
http://osgi.dzone.com/news/there-place-osgi-enterprise-ap-0
Massimiliano Dessì, Sun Tech Day 25
Cagliari, 13 Giugno 2008
14. Grazie per l'attenzione.
Have a lot of fun !
Massimiliano Dessì, Sun Tech Day 14
Cagliari, 13 Giugno 2008