Sommaire
<<
Technique
<
Aspects fournis
>
Processus dynamique
>>
Liens / Contacts


Aspects purement techniques fournis dans l’API JAC
  • Persistance (SGBD et Systèmes de Fichier)
  • Authentification
  • Session
  • Utilisateur
  • Transactions
  • Déploiement
  • Load-balancing
  • Broadcasting
  • Cohérence des données
  • Synchronisation
  • Accès distant
  • Intégrité
  • GUI (SWING et Web)

La javadoc de JAC

Exemple de configuration des aspects
RTTI aspect configuration
L'aspect RTTI est utilisé pour ajouter des informations supplémentaires sur les objets métiers. Ici, on spécifie qu'un certain champ est textuel (modifiable avec un éditeur multi-lignes), un autre est une date (une heure) et un est un mot de passe (son contenu est invisible).

class jac.samples.photos.Comment{
setFieldType comment text;
setFieldType date dateHour;
}

class jac.samples.photos.Person
{setFieldType password password;}

Persistence aspect configuration
L'aspect Persistence rend les objets souhaités "persistant" dans un lieu de stockage (un système de fichier ou une base de données).

configureStorage "jac.aspects.persistence.FSStorage" { "data/photos" };
makePersistent "jac.samples.photos.*" ALL;
registerStatics jac.samples.photos.PhotoRepository photorepository0;
registerStatics jac.samples.photos.Users users0;
Authentication aspect configuration
L'aspect Authentication est utilisé pour vérifier que l'utilisateur appartient à une liste. Cet aspect peut automatiquement ouvrir une fenêtre d'authentification pour l'utilisateur.

setAuthenticator
jac.aspects.authentication.UserPasswordAuthenticator
{"photos.user"};

setController jac.aspects.gui.*Display ".*showCustomized.* || fullRefresh.*"
jac.aspects.user.UserAC.userController;
setAccessDeniedMessage "Access not granted.";

User aspect configuration
L'aspect User sert à définir les droits d'accès des utilisateurs inscrits. Il doit être utilisé avec l'aspect Authentication.

setUserClass jac.samples.photos.Person email password;
autoInitClasses jac.samples.photos.Photo
jac.samples.photos.PhotoRepository ADDERS(photos);
autoInitClasses jac.samples.photos.Comment;

defineAdministrator "admin" "admin";

profile "default" {
declareProfile;
addReadable "jac.aspects.gui.Actions.logout";
addReadable "jac.samples.photos.Photo.*";
addReadable "jac.samples.photos.Comment.*";
addReadable "jac.samples.photos.Person.firstName";
addReadable "jac.samples.photos.Person.lastName";
addReadable "jac.samples.photos.Person.photos";
}

profile "user" {
declareProfile "default";
addReadable "jac.aspects.gui.Actions.*";
addReadable "jac.samples.photos.Run.viewPhotos.*";
addAddable "jac.samples.photos.PhotoRepository.photos";
addAddable "jac.samples.photos.Photo.comments";
}

profile "owner" {
declareProfile;
addWritable "jac.samples.photos.Photo.*";
addWritable "jac.samples.photos.Comment.comment";
}

Confirmation aspect configuration
Cet aspect demande aux utilisateurs une confirmation avant de procéder à l'action requise (ici, le retrait d'une collection).

confirm jac.samples.photos.PhotoRepository REMOVERS ALL;
confirm jac.samples.photos.Photo REMOVERS ALL;

Integrity aspect configuration
Cet aspect assure l'intégrité des données applicatives.

declareAssociation
jac.samples.photos.Person photos
jac.samples.photos.Photo author;

declareAssociation
jac.samples.photos.Comment photo
jac.samples.photos.Photo comments;

updateOppositeRoles jac.samples.photos.*;

declareRepository users0 jac.samples.photos.Users.users
jac.samples.photos.Photo.author;

declareConstraint jac.samples.photos.Photo author
jac.samples.photos.Users.users FORBIDDEN;
declareConstraint jac.samples.photos.Comment author
jac.samples.photos.Users.users SET_NULL;
declareConstraint jac.samples.photos.Comment photo
jac.samples.photos.Users.users DELETE_CASCADE;

Session aspect configuration
L'aspect Session initialise un n° de session contextuel et s'assure que les paramètres sont sauvés et restaurés pour chaque session.
Ici, on restaure l'atribut contextuel Authentication.user afin d'éviter une authentification de l'utilisateur pour chaque interaction avec le client.

defineSessionHandlers "jac.samples.photos.*" ".*" ".*";
declareStoredAttributes {"Authentication.user"};
Cache aspect configuration
Cet aspect permet à certains retours de méthodes d'être gérés en cache (ils ne sont calculés qu'une fois).
Ici, la méthode createThumbArray qui calcule les miniatures des photos peut-être longue: on préfère gérer son résultat en cache.
cache jac.util.Thumbnail "createThumbArray.*";
GUI aspect configuration
L'aspect GUI est utilisé pour paramétrer le rendu graphique des classes métier afin qu'elle puissent être correctement affichées par le GUI (Swing ou WEB) généré automatiquement.

defineResource ICON photo_icon "jac/aspects/gui/resources/photo.png";

askForParameters "jac.samples.photos.*";

// Person
class jac.samples.photos.Person {
setToString "%firstName% %lastName%";
setMenu {setFirstName,setLastName,setEmail,setProfile};
setAttributesOrder { firstName, lastName, profile, email, password, photos };
setTableMembersOrder { firstName, lastName, profile, email };
setCreationAttributesOrder { firstName, lastName, profile, email, password };
setCollectionSortCriteria photos { title };
attribute photos {setTableView; setAutoCreate; setMembersOrder jac.samples.photos.Photo {title,image};}
attribute email {setEditorWidth 200 40;}
attribute profile {setDynamicFieldChoice false jac.samples.photos.PhotoRepository getProfiles;}
}

// Photo
class jac.samples.photos.Photo {
setToString "%title%";
setMenu {setTitle,setAuthor,setImage};
setParameterNames "Photo(java.lang.String,jac.lib.Attachment)"
{ "title", "image" };
setAttributesOrder {title,image,author,rate,date,comments};
setCreationAttributesOrder {title,image};
setTableMembersOrder {title,image,author};
attribute rate {setFieldChoice "false" { 1, 2, 3, 4, 5, 0 };}
setCategories { "main","comments" };
attribute title,image,author,rate,date {setCategory "main";}
attribute title {setEditorWidth 150 30;}
attribute comments {setCategory "comments";setAutoCreate;setTableView;}
}

class jac.samples.photos.Comment {
setToString "%text%";
setCreationAttributesOrder { comment };
setTableMembersOrder { date, author, comment };
setEditorWidth comment 300 60;
}

// PhotoRepository
class jac.samples.photos.PhotoRepository {
setParameterNames searchTitle(java.lang.String) { "string to search" };
setAttributesOrder { photos };
attribute photos {setTableView;setMembersOrder jac.samples.photos.Photo {title,image,author};setAutoCreate;setViewOnSelection;
setNumRowsPerPage 4;}
}

class jac.samples.photos.Users
{ attribute users {setTableView;setAutoCreate;setViewOnSelection;}}


// Specifying to the user that the username is his e-mail
class jac.aspects.authentication.PasswordAuthenticator
{ method askUsernameAndPassword {setParameterNames { "E-mail","Password" };}}


// The GUI main window configuration
window main,web {
registerCustomized;
setTitle "Photos";
menu "main" {
addMenuItem { "View", "Photos" } jac.samples.photos.Run.viewPhotos { 0 };
addMenuItem { "View", "Users" } jac.samples.photos.Run.viewUsers { 0 };
addMenuItem { "View", "Profiles" } jac.aspects.user.UserAC.viewProfiles { 0 };
addMenuItem { "Session", "Logout" } jac.aspects.gui.Actions.logout;
}
}

window main {
// The real simple GUI for swing
setSubPanesGeometry 2 VERTICAL { false, false };
setPaneContent 0 Object { photorepository0 };
addReferenceToPane jac.samples.photos.PhotoRepository photos Object false "1";
addReferenceToPane jac.aspects.user.UserManager profiles Object false "1";
addReferenceToPane jac.samples.photos.Users users Object false "1";
setPosition 0 0 80 80;
setSplitterLocation 0 0.4;
setOnCloseHandler jac.aspects.gui.Actions.exit;
}

class jac.samples.photos.Run {setIcon viewUsers users_icon; setIcon viewPhotos photo_icon; }

window web {
// The real simple GUI for the web
setSubPanesGeometry 1 NONE { false };
setPaneContent 0 Object { photorepository0 };
addReferenceToPane jac.samples.photos.PhotoRepository photos Object false "0";
addReferenceToPane jac.samples.photos.Photo author Object false "0";
addReferenceToPane jac.samples.photos.Person photos Object false "0";
addReferenceToPane jac.samples.photos.Person profile Object false "0";
addReferenceToPane jac.samples.photos.Users users Object false "0";
addReferenceToPane jac.aspects.user.UserManager profiles Object false "0";
menu "main" {setMenuPosition LEFT;}
setNavBar jac.samples.photos.PhotoRepository photos;
}



Sommaire
<<
Technique
<
Titre courant
>
Processus dynamique
>>
Liens / Contacts