JAC - fil

publicité
Java Aspect Components (JAC)
Java Aspect Components
(JAC)
2
JAC
http://jac.objectweb.org
Un framework de programmation par aspect pour Java
Projet LIP6/CNAM/INRIA du consortium ObjectWeb
Lionel Seinturier
Objectifs
[email protected]
Ö disposer d'un environnement pour la construction orientée aspects
Université Pierre & Marie Curie
Ö de plates-formes et d’applications middleware
Ö dynamique, reconfigurable
Ö sans extension syntaxique (Java pur)
Ö permettant d’adapter du bytecode
Ö proposant des outils pour gérer la composition d’aspects
23/2/06
Java Aspect Components (JAC)
Java Aspect Components (JAC)
3
4
JAC Open container
JAC
¾ business + aspect code: 100% Java
¾ API for aspects definition
¾ dynamic chains of aspects
Tisser un aspect
= déployer un ensemble d'objets (implantant un aspect)
sur les objets d'une application de base
JAC weaver
Librairie d’aspects disponibles dans JAC (19)
¾ class loader
¾ business + aspects code
¾ bytecode manipulator
JAC weaver accessibility
¾ locally
¾ remotely (RMI & CORBA itfs)
Ö
Ö
Ö
Ö
Ö
Ö
Ö
déploiement/communication distantes (RMI & CORBA)
persistance des données (JDBC, fichiers, Hibernate)
transaction (JOTM)
cache
réplication, équilibrage de charge
authentification, gestion de profils utilisateur
GUI (Swing & HTML)
Java Aspect Components (JAC)
Java Aspect Components (JAC)
5
6
JAC Aspect GUI Swing
JAC Aspect GUI HTML
But : séparer le code de présentation du code métier
Ö architecture MVC « aspectisée »
Java Aspect Components (JAC)
Java Aspect Components (JAC)
7
8
JAC IDE
Development process
UMLAF
¾ project management
¾ extended UML
notation for aspects
aspect
developer
development of
configurable aspects
(persistence,
transaction, …)
integrator
development of
Business
components
write configurations
set of aspect
components
set of aspect
configurations
deployment
JAC container
set of business
components
business
developer
Java Aspect Components (JAC)
Java Aspect Components (JAC)
9
10
Support pour la distribution
Notion de coupe distribuée
- notion de coupe distribuée
- aspect de communication distante
- aspects pour la programmation répartie
- ensemble de points de jonctions localisés sur +sieurs hôtes
- gérée par un AspectManager
- réplication, cohérence, diffusion, cache, équilibrage charge
- répliqué
- maintenu en cohérence
Java Aspect Components (JAC)
Java Aspect Components (JAC)
11
12
Aspect de communication distante
Modèle de programmation de JAC
- gestion des communications distantes (2 versions : RMI, CORBA)
- déploiement (instantiation à distance)
Objets métiers inchangés
Une classe d’aspect
9 étend org.objectweb.jac.core.AspectComponent
9 définit des coupes (appel méthode pointcut héritée)
9 définit des méthodes d’aspect
9 définit des méthodes de configuration
- objets et d’aspects
- souches clientes et squelettes serveurs
stub/skel
Méthodes d’aspects dans des classes dites Wrapper
wrapper
o1
o2
JAC host 1
9 étend org.objectweb.jac.core.Wrapper
9 3 « catégories » de méthodes
remote o2
JAC host 2
9 wrappantes (before/after)
9 de rôle (augmentation de l’interface des objets métiers)
9 de traitement d’exceptions
Java Aspect Components (JAC)
Java Aspect Components (JAC)
13
14
Modèle de programmation de JAC
Aspect definition & Pointcut descriptor
¾ aspect definition
¾ pointcut descriptor
¾ advice code
¾ metadata
¾ aspect configuration
¾ application description
import org.objectweb.jac.core.AspectComponent;
public class MyTraceAC extends AspectComponent {
public MyTraceAC() {
pointcut(
// define a pointcut
".*",
"my.MyClass",
"get():int",
"foo.jac.com",
//
//
//
//
MyWrapper.class
object regexp
class regexp
method regexp
host regexp
method regexp
eg: get.* || set.*
keywords: SETTERS,
MODIFIERS, …
// wrapping class
);
} }
Java Aspect Components (JAC)
Java Aspect Components (JAC)
15
16
Mots-clés pour les expressions régulières de méthodes
Expressions régulières d’objets
Classes analysées par JAC au chargement (parsing du bytecode)
Stockage de l’information dans un référentiel propre à JAC
Objets métiers dans un conteneur JAC nommés
STATICS
CONSTRUCTORS
MODIFIERS
ACCESSORS
SETTERS(…)
GETTERS(…)
ADDERS(…)
REMOVERS(…)
¾ automatiquement (nom de classe + indice auto-incrémenté)
¾ par un aspect de nommage
Exemple d’utilisation
modification de l’état (champs public)
lecture de l’état
écrivains d’un champ
lecteurs d’un champ
méth. qui ajoutent un champ dans une collection
idem retrait
¾ classe Account avec champ String owner
¾ tissage aspect de nommage sur tous les objets de la classe Owner
¾ récupération par introspection valeur de owner
¾ nom de l’objet
¾ utilisable dans l’expression de coupe (ex. Bob S.*)
Java Aspect Components (JAC)
Java Aspect Components (JAC)
17
18
Advice code
Metadata
Chains of wrappers around pointcuts
¾ define before/after code
¾ can be added removed dynamically
Runtime structural reflection of the business code
API to
¾ navigate
¾ add/remove tag on elements (class, method, field)
import org.aopalliance.intercept.MethodInvocation;
import org.objectweb.jac.core.Wrapper;
public class MyWrapper extends Wrapper {
public Object invoke( MethodInvocation mi ) throws Throwable {
// ... before code ...
Object ret = proceed(mi);
// next wrapper
// or business object
// ... after code ...
return ret;
} }
import org.objectweb.jac.core.rtti.ClassRepository;
import org.objectweb.jac.core.rtti.ClassItem;
import org.objectweb.jac.core.rtti.MethodItem;
ClassItem ci = ClassRepository.get().getClass("my.MyClass");
MethodItem[] mi = ci.getMethods("foo");
mi[0].setAttribute( "persistent", new Boolean(true) );
Java Aspect Components (JAC)
Java Aspect Components (JAC)
19
20
Aspect configuration
Application description
Scripting the configuration of aspects
¾ application independant (eg JDBC URL for persistence)
¾ application dependant (eg which field is persistent)
¾ sequence of calls to the aspect methods
¾ lauching code
¾ aspects initially woven
Example : gui.acc
setTitle myGUI "DEMO";
setSubPanesGeometry myGUI 2 HORIZONTAL {false,false};
setPaneContent myGUI 0 Object {invoices0};
addReferenceToPane myGUI invoices.Invoices invoices 1;
addReferenceToPane myGUI invoices.Invoices clients 1;
setPosition myGUI 0 0 60 60;
setSplitterLocation myGUI 0 0.6;
Example : bank.jac
applicationName: distransbank
launchingClass: org.objectweb.jac.samples.distransbank.Account
aspects: distrans distrans.acc true
Java Aspect Components (JAC)
Java Aspect Components (JAC)
21
22
Lancement d'une application avec aspects
1.
2.
3.
4.
5.
Ecriture des classes de base
Ecriture des classes d'aspect
Ecriture des fichiers (texte) de configuration d’aspects
Ecriture d'un descripteur d'application (fichier texte)
Lancement de l'application
Java Aspect Components (JAC)
23
Conclusion
JAC vs others
¾ 100% Java, no syntax extensions
¾ dynamic & remote deploy/undeploy
¾ UMLAF RAD tool (IDE, library of aspects)
¾ GUI aspect (Swing or HTML/servlet)
Current developments
¾ integrating JAC-technology with component models (Fractal)
Comparaison JAC/AspectJ
JAC
AspectJ
AOP framework, application server
Java language extension
Aspects written in pure Java
New grammar to express aspects
Working on bytecode allowing to add,
remove or modify aspects dynamically
Working on source code
Each modification needs compiling
Automatically distributes aspects on distant
servers
Does not handle distribution
Allows aspect developement and aspect
configuration
Only allows aspect developement
UML IDE supporting aspects
IDE support for
Eclipse, JBuilder, Forte, Emacs
Set of pre-developed configurable aspects
No pre-developed configurable aspects
Current version 0.12.1
Current version 1.2.1
LGPL
CPL
Téléchargement