mercredi 9 avril 2008

Cloner des beans JAVA

La methode BeanUtils.cloneBean(Object obj1,Object obj2) permet de répliquer des beans en faisant une introspection sur les méthodes get et set du bean, ceci peut se faire sans utiliser l'interface clonable.

La librairie permettant de faire ceci se télécharge sur http://commons.apache.org/beanutils

    <dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutilsartifactId>
<version>1.8</version>
</dependency>

mardi 8 avril 2008

Problème de synchronisation avec hibernate

Lors de l'appel de saveOrUpdate() or update() j'ai une NonUniqueObjectException.

La session utilise un cache entre la persistance et l'objet instance, ce cache est unique (Il se manifeste par les proxy cglig). L'appel de saveOrUpdate determine premièrement si cet objet existe en base, si oui, il construit son proxy CGLIB, ainsi hibernate sait si cet objet existe ou non en base de données. La comparaison de l'objet proxié et de l'objet que nous tentons d'insérer (Non proxié) provoque une incohérence et retourne l'erreur ci dessus.

L'utilisation de la fonction saveOrUpdate() ne sert pas comme on le croit d'abord, à permettre de procéder à des insert ou des update en aveugle.

La solution de ce problème est soit de connaitre l'état de l'objet avant de faire l'insertion en base. (Ce qui diminue notablement le charme de la fonction saveOrUpdate) soit d'utiliser la fonction merge, qui permet de cloné un objet sur son proxy.

marge prend en argument un objet non proxié et retourne un objet proxié clone exact de l'objet passé en argument.

mercredi 2 avril 2008

Créer dynamiquement des QUEUE

Dans le cadre de la création d'un bus de routage je souhaitais pouvoir créer dynamiquement des queues à l'aide de la méthode createQueue(String queuename).

if (queue == null) {
log.info("Création de la queue " +
queueName); queue = session.createQueue(queueName);
}

Cela n'a pas fonctionné car JORAM n'implémente pas cette fonction. Après quelques recherche sur internet, cette fonction devrait être utilisée de manière marginale et pas dans le cadre d'un bus et n'est pas recommandable

12:35:29,484 ERROR BusServiceMdb:96 - Le transfert du message a échoué !
javax.jms.InvalidDestinationException: Proxy could not forward the request to incorrectly identified destination: java.lang.IllegalArgumentException: QUEUELOUCHE: bad id

mardi 1 avril 2008

Modifier le niveau de securité sur Mandriva

Ayant installé Mandriva 2008, je me suis retrouvé avec un niveau de sécurité trop élevé pour mes besoins (4).

Concrétement, les répertoire home changeais constamment de droits de sorte qu'il n'était pas possible à plusieurs utilisateur de se lire les fichiers

Pour y remédier le commande :
msec -o log=stderr 2 

effectue le changement de niveau.

Ces informations sont stockée dans le fichier /etc/sysconfig/msec

UMASK_ROOT=022 (Donne les droit d'accès du repertoire root)
SECURE_LEVEL=3 (Donne le niveau de sécurité)
UMASK_USER=022 (Donne les droit d'accès des répertoire utilisateur)
TMOUT=0



msec est lancé quotidiennement, on le trouve dans /etc/cron.daily

http://club.mandriva.com/xwiki/bin/view/KB/SecureSmsec2?language=fr#HQuelniveaudesC3A9curitC3A9choisir3F