Samedi 30 avril 2005

Commons Configuration est une API qui permet de charger des données de configuration multi-sources :

  • PropertiesConfiguration : à partir d'un fichier properties
  • BaseConfiguration : configuration sous forme d'objet.
  • XMLConfiguration : recupérer des config XML
  • JNDIConfiguration : recuperer des config à partir de JNDI
  • SystemConfiguration recuperer des proprietes systeme
  • ConfigurationConverter prends un  java.util.Properties ou o.a.c.collections.ExtendedProperties et la convertit en  Configuration object.

 

 

par kasmi publié dans : Frameworks Java
ajouter un commentaire commentaires (0)    créer un trackback recommander
Vendredi 8 avril 2005

SWARMCACHE- Part2

Traduction de la documentation officielle.

(Mehdi KASMI - Architecte technique - mehdi.kasmi@unilog.fr)

 

Algorithme de caching

 

Les algorithmes de caching suivants sont disponibles pour les mémoires cache locales :

 

Least Recently Used (LRU) traduction littérale en français: Le moins Récemment Utilisé

C'est l'algorithme le plus commun et direct de caching. Il y a une certaine quantité fixée d'objets qui peuvent être mis en cache et c'est configurable. Quand la mise en cache d'un nouvel objet est demandée et que la mémoire cache est pleine, l'objet qui a le moins récemment été interrogé de la mémoire cache (ou mis à jour dans la mémoire cache) est éjecté pour faire de l'espace.

 

Automatique

Cet algorithme tourne avec le Garbage collector pour permettre aux objets mis en cache d'être automatiquement détruits. La mémoire cache maintient des références aux objets mis en cache. Ceux-ci permettent aux objets mis en cache d'être détruits par le système si nécessaire. Cela permet de gérer une taille de mémoire cache qui est limitée à la quantité de mémoire disponible par la JVM. Cependant, à la différence de l'algorithme LRU, il ne garantit pas nécessairement que les objets fréquemment utilisés seront disponibles dans la mémoire cache.

 

Timeout

Algorithme permettant de libérer des objets qui n'ont pas été utilisés(en mode écriture) pendant un certain nombre de millisecondes. La propriété cache.timeout doit être renseignée pour modifier le temps de vie des objets.

 

L’algorithme hybride

Cet algorithme combine les avantages du LRU et de l'algorithme Automatique. On fournit deux niveaux de mise en cache. Au premier niveau, une mémoire cache de type LRU assure que les objets les plus récemment utilisés sont disponibles dans la mémoire cache. Au deuxième niveau, une mémoire cache Automatique récupère les objets mis en caches qui sont disponibles pour les traiter dans le Garbage collector.

 

Lequel devrais-je utiliser ?

L'algorithme Hybride offre la meilleure combinaison performance pour des objets fréquemment utilisés et maîtrise de la taille mémoire. C'est l'algorithme recommandé. Pour les développeurs qui veulent la mise en cache simple, déterminée, l'algorithme LRU peut être préférable.

 

Configuration de SwarmCache

 

Voici toutes les options de configuration disponibles via la classe "CacheConfiguration" :

 

CacheType

C’est ce qui correspond aux types des mémoires cache sous-jacentes qui seront utilisées.

Les options sont :

CacheConfiguration. TYPE_LRU, CacheConfiguration.TYPE_AUTO, CacheConfiguration.TYPE_TIMER et CacheConfiguration.TYPE_HYBRID.

Le paramètre par défaut est LRU.

 

LRUCacheSize

C’est la taille de mémoire cache de LRU. Cela se mesure en nombre d'objets et pas en octets.

Cette valeur est ignorée si CacheType est mis à CacheConfiguration. AUTO ou CacheConfiguration. MINUTEUR. La valeur par défaut est 10000.

 

MulticastIP

C’est l'adresse IP multipoint qui sera utilisée pour communiquer entre les Gestionnaires de mémoire cache.

La valeur par défaut est 231.12.21.132.

 

ChannelProperties

Si vous êtes familiers avec la technologie JavaGroups, vous devez savoir que c'est la valeur définissant le canal du JavaGroups.

Notez que si vous renseignez cette valeur, la Variable MulticastIP sera ignorée.

Vous trouverez plus de renseignements dans la Javadoc pour connaître les valeurs par défaut.

 

L'écriture d'Applications Cache-Aware

 

Maintenant que vous avez ce fabuleux moteur  de cache intégré à votre application  Web, comment l’utiliserez-vous ? Voici quelques astuces :

 

Dans la majorité des énormes applications Web, au moins 90 % de toutes les requêtes qui parviennent au moteur de persistance permettent de récupérer le même petit ensemble de données. Donc ce sont les données que vous voulez fournir que vous avez mis en Cache. Ne vous inquiétez pas tellement des autres 10%.

 

Ne mettez pas en cache d'objets imbriqués!

Supposons que nous avons une méthode getAllPeople, qui récupère toutes les Personnes présentes dans la base de données. Devrions-nous mettre en cache le résultat de cette interrogation ? C'est souvent une idée imprudente de faire ainsi. Le problème est qu'un des objets Personne pourrait être mis à jour et que getAllPeople n’est pas expiré à ce moment. Bien sûr, vous pourriez ajouter du code supplémentaire pour insérer, mettre à jour et supprimer  l'objet imbriqué dans la mémoire cache, mais cela deviendra rapidement malpropre.

 

 

Ayez le moyen de d'effacer toutes les données contenues dans le cache.

Si vous ne faites pas souvent de changements dans la de base de données, il est très pratique d'avoir un écran d'administrateur accessible via le Web qui permet d'effacer manuellement les caches

 

 

par mehdi kasmi publié dans : Frameworks Java
ajouter un commentaire commentaires (0)    créer un trackback recommander
Vendredi 8 avril 2005

 SWARMCACHE - Part1

Traduction de la documentation officielle.

(Mehdi KASMI - Architecte Technique - mehdi.kasmi@unilog.fr)

 

Comment ça Marche ?

 

Le principe est simple. Chaque serveur instancie son propre gestionnaire. Pour chaque type d’objets que le serveur veut cacher, on instancie un cache et on le déclare dans le Gestionnaire.

Le gestionnaire fait partie d’un groupe multicast , et communique par ce biais avec les autres gestionnaires du groupe. Lorsqu’un Objet est libéré d’un cache, le manager le notifie à tous les autres gestionnaires du groupe qui s’assurent que l’objet est bien libéré de leurs caches respectifs. Le résultat est qu'un serveur n'aura pas dans sa mémoire cache de version erronée d'un objet qui aura été mis à jour ou supprimé sur un autre serveur.

 

Notez que les Gestionnaires doivent seulement communiquer entre eux quand un objet est supprimé d'une mémoire cache. ce qui arrive quand un objet est mis à jour ou supprimé. Les Gestionnaires ne coopèrent pas au-delà de cela. Cela signifie que la quantité de communications inter serveur est proportionnelle à la quantité de mise à jour ou suppression d'éléments dans l'application. Comme les communications sont multipoint, en antémémoire des hôtes ne sont pas proportionnels au nombre d'hôtes. Remarquez aussi qu'il n'y a aucun "serveur maître",  tous les hôtes sont des noeuds égaux. Ainsi l'opération de la mémoire cache distribuée est très robuste.

 

SwarmCache est conçu pour être intégré dans la couche de persistance d'une Application Java. Une fois intégré au moteur de persistance, SwarmCache devrait être transparent aux couches plus hautes du logiciel. SwarmCache ne supporte pas directement la gestion de transaction qui peut être accompli en enveloppant les objets (Wrapper) mis en antémémoire et en stockant quelques données de transaction supplémentaires. Ce sera décrit et probablement mis en œuvre plus tard dans le Framework.

 

Swarmcache requiert les jars suivants:

à        swarmcache.jar

à        jgroups-all.jar

à        commons-collections.jar

à        commons-logging.jar

 

Pour la plupart des applications, il est suffisant de se servir de la classe « CacheFactory » pour configurer et utiliser SwarmCache.

Voici un exemple :

 

import net.sf.swarmcache.*;
 ...
 CacheFactory cacheFactory;
 ...
 // Configure and Initialize the cache manager
CacheConfiguration conf = new CacheConfiguration();
conf.setCacheType(CacheConfiguration.TYPE_LRU);
cacheFactory = new CacheFactory(conf);
...
// Create a new cache, using a name that describes
//  what kind of object we will store
ObjectCache cache = cacheFactory.createCache("People");
...
// Store something in the cache
String key = "0001";
String person = "John Watkinson";
cache.put(key, person);
...
// Retrieve something from the cache
String person = (String)cache.get("0001");
System.out.println(person);
...
// Clear an object from the cache
// (This results in the sending of a 
//  multicast message to other caching hosts)
cache.clear("0001");
String person = (String)cache.get("0001");
// The following will print 'null'
System.out.println(person);

 

L'exemple est simple, l'exécution de ce code sur plusieurs machines d'un réseau (cluster) implique que leurs mémoires cache est cohérentes.

Notez que les clefs utilisées doivent être des objets sérialisable - Elles doivent implémenter l'interface java.io.Serializable.

Les objets qui sont stockés dans la mémoire cache n'ont pas besoin d'être "serializable". Et bien sûr, les clefs doivent être limitées en taille pour optimiser les transmissions entre nœuds.

 

Pour s'assurer d'avoir des clefs distinctes, il est est conseillé d'utilisé un cache par type d'objet manipulé.

 

L'utilisation de SwarmCache dans un Moteur de Persistance

 

Voici un code skeleton démontrant comment SwarmCache peut être intégré à un outil de gestion de la persistance.

La classe suivante permet de faire persister un objet de type Personne.

 

public class PersonEntity extends GenericEntity {
                    ObjectCache cache;
                    public PersonEntity(CacheFactory cacheFactory) {
                                         cache = cacheFactory.createCache("Person");
                                         // * Other initialization here
                  }
                    ...        
                    public Person get(long key) {
                                         Long cacheKey = new Long(key);
                                         Person person = (Person)cache.get(cachekey);
                                         if (person == null) {
                                                             // * Get the object from the database                                              
                                                             if (person != null) {
                                                                                 // Put it in the cache
                                                                                 cache.put(cacheKey, person);
                                                             }
                                         }
                                         return person;
                    }      
                    ... 
                    public void insert(Person person) {
                                         // * Do database insert
                                         // Add new object to cache
                                         Long cacheKey = new Long(person.getKey());
                                         cache.put(cacheKey, person);
                    }
                    ...
                    public void update(Person person) {
                                         // * Do database update
                                         // Remove object from cache
                                         // (This causes all caches in the group to be notified)
                                         Long cacheKey = new Long(person.getKey());
                                         cache.clear(cacheKey);
                                         // Re-add the object to the cache
                                         cache.put(cacheKey, person);
                    }
                    ...
                    public void delete(long key) {
                                         // * Do database delete
                                         // Remove object from cache
                                         // (This causes all caches in the group to be notified)
                                         Long cacheKey = new Long(key);
                                         cache.clear(cacheKey);                         
                    }
                    ...
}

 

par mehdi kasmi publié dans : Frameworks Java
ajouter un commentaire commentaires (0)    créer un trackback recommander
Jeudi 7 avril 2005

OPEN SOURCE

EHCache: http://ehcache.sourceforge.net

Framework de cache java Simple, rapide, thread Safe basé sur JCache (JSR 107)
EHCache est non distribué.


OSCache: http://www.opensymphony.com/oscache

OSCache est une solution tres utilisées et à haute performance
Les fonctionnalites de OSCache incluent: caching rapide in-memory , caching persistent sur disque, support duclustering ...
Pour la fonctionnalite de clustering des caches, les protocols de broadcast peuvent être JavaGroups ou JMS.


Swarmcache: http://swarmcache.sourceforge.net

SwarmCache est un cache distribué simple.
IL utilise le multicast IP pour communiquer avec autant de machines qu'il y sur un LAN.
IL est utilisé et concu pour être utilisé dans un environnement CLuster.
Pour la fonctionnalite de clustering des caches, le protocol de broadcast est JavaGroups

COMMERCIAL

Tangosol Coherence: http://www.tangosol.com

Tangosol Coherence™ est un cahce in-memory (JCache compliant) et gestionnaire de données pour des applications J2EE distribuées (Cluster).
il propose plusieurs strategies de cache:  local, replicated, optimistic, distributed & NearCache.
Pour la fonctionnalite de clustering des caches, les protocols de broadcast peuvent être TCMP ou JMS.


Gigaspaces: http://www.gigaspaces.com

GigaSpaces est le premier grid server for de gestion des transactions distribuées en temps réeel.
Utilisé pour d'enormes volumes, dans des environnements applicatifs hétérogènes, sur des plateformes distribuées.

par mehdi kasmi publié dans : Frameworks Java
ajouter un commentaire commentaires (0)    créer un trackback recommander
Dimanche 3 avril 2005

MyFaces : projet de "taglib" JSFsupporté par la fondation Apache.

http://myfaces.apache.org/

par mehdi kasmi publié dans : Frameworks Java
ajouter un commentaire commentaires (0)    créer un trackback recommander

Calendrier

Mai 2008
L M M J V S D
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
<< < > >>
créer un blog sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur avec TF1 Network - Signaler un abus