Java Aspect Components
(JAC)
23/2/06
Lionel Seinturier
Université Pierre & Marie Curie
2
Java Aspect Components (JAC)
JAC http://jac.objectweb.org
Un framework de programmation par aspect pour Java
Projet LIP6/CNAM/INRIA du consortium ObjectWeb
Objectifs
Ödisposer d'un environnement pour la construction orientée aspects
Ö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
3
Java Aspect Components (JAC)
JAC Open container
¾business + aspect code: 100% Java
¾API for aspects definition
¾dynamic chains of aspects
JAC weaver
¾class loader
¾business + aspects code
¾bytecode manipulator
JAC weaver accessibility
¾locally
¾remotely (RMI & CORBA itfs)
4
Java Aspect Components (JAC)
JAC
Tisser un aspect
= déployer un ensemble d'objets (implantant un aspect)
sur les objets d'une application de base
Librairie d’aspects disponibles dans JAC (19)
Ö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)
5
Java Aspect Components (JAC)
JAC Aspect GUI Swing
But : séparer le code de présentation du code métier
Öarchitecture MVC « aspectisée »
6
Java Aspect Components (JAC)
JAC Aspect GUI HTML
7
Java Aspect Components (JAC)
JAC IDE
UMLAF
¾project management
¾extended UML
notation for aspects
8
Java Aspect Components (JAC)
Development process
JAC container
development of
configurable aspects
(persistence,
transaction, …)
aspect
developer
set of aspect
components
business
developer
development of
Business
components
set of business
components
integrator
write configurations
set of aspect
configurations
deployment
9
Java Aspect Components (JAC)
Support pour la distribution
-notion de coupe distribuée
-aspect de communication distante
-aspects pour la programmation répartie
-réplication, cohérence, diffusion, cache, équilibrage charge
10
Java Aspect Components (JAC)
Notion de coupe distribuée
-ensemble de points de jonctions localisés sur +sieurs hôtes
-gérée par un AspectManager
-répliqué
-maintenu en cohérence
11
Aspect de communication distante
-gestion des communications distantes (2 versions : RMI, CORBA)
-déploiement (instantiation à distance)
-objets et d’aspects
-souches clientes et squelettes serveurs
Java Aspect Components (JAC)
JAC host 1 JAC host 2
o1 o2 remote o2
stub/skel
wrapper
12
Java Aspect Components (JAC)
Modèle de programmation de JAC
Une classe d’aspect
9étend org.objectweb.jac.core.AspectComponent
9définit des coupes (appel méthode pointcut héritée)
9définit des méthodes d’aspect
9définit des méthodes de configuration
Méthodes d’aspects dans des classes dites Wrapper
9étend org.objectweb.jac.core.Wrapper
93 « catégories » de méthodes
9wrappantes (before/after)
9de rôle (augmentation de l’interface des objets métiers)
9de traitement d’exceptions
Objets métiers inchangés
13
Java Aspect Components (JAC)
Modèle de programmation de JAC
¾aspect definition
¾pointcut descriptor
¾advice code
¾metadata
¾aspect configuration
¾application description
14
Aspect definition & Pointcut descriptor
import org.objectweb.jac.core.AspectComponent;
public class MyTraceAC extends AspectComponent {
public MyTraceAC() {
pointcut( // define a pointcut
".*", // object regexp
"my.MyClass", // class regexp
"get():int", // method regexp
"foo.jac.com", // host regexp
MyWrapper.class // wrapping class
);
} }
Java Aspect Components (JAC)
method regexp
eg: get.* || set.*
keywords: SETTERS,
MODIFIERS, …
15
Java Aspect Components (JAC)
Mots-clés pour les expressions régulières de méthodes
Classes analysées par JAC au chargement (parsing du bytecode)
Stockage de l’information dans un référentiel propre à JAC
STATICS
CONSTRUCTORS
MODIFIERS modification de l’état (champs public)
ACCESSORS lecture de l’état
SETTERS(…) écrivains d’un champ
GETTERS(…) lecteurs d’un champ
ADDERS(…) méth. qui ajoutent un champ dans une collection
REMOVERS(…) idem retrait
16
Java Aspect Components (JAC)
Expressions régulières d’objets
Objets métiers dans un conteneur JAC nommés
¾automatiquement (nom de classe + indice auto-incrémenté)
¾par un aspect de nommage
Exemple d’utilisation
¾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.*)
17
Java Aspect Components (JAC)
Advice code
Chains of wrappers around pointcuts
¾define before/after code
¾can be added removed dynamically
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;
} }
18
Java Aspect Components (JAC)
Metadata
Runtime structural reflection of the business code
API to
¾navigate
¾add/remove tag on elements (class, method, field)
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) );
19
Java Aspect Components (JAC)
Aspect configuration
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
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;
20
Java Aspect Components (JAC)
Application description
¾lauching code
¾aspects initially woven
Example : bank.jac
applicationName: distransbank
launchingClass: org.objectweb.jac.samples.distransbank.Account
aspects: distrans distrans.acc true
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !