jeudi 17 janvier 2008

Oracle rachète BEA

Ca se tramait depuis un certain temps mais c'est maintenant officiel :

Oracle to Acquire BEA Systems

L'un des 2 serveurs d'application OC4J ou Weblogic Server devrait passer à la trappe.

De même, on peut se demander comment va se positionner la nouvelle entité par rapport à Workshop concurent direct de JDevelopper.

En tout cas, ce rachat sucite de nombreuses réactions dont celles de Rod Johnson et Gigaspace qui nous encouragent à s'affranchir de l'architecture j2ee dont les 2 seuls concurrents directs sont maintenant Oracle et IBM.

mardi 15 janvier 2008

Niveau d'isolement des transactions avec les EJB

C'est souvent trop tard qu'on commence à se pencher sérieusement sur certains concepts. Celui-ci est souvent occulté quand on développe un module EJB mais cet oubli peut conduire à des incompréhensions. L'abstraction de l'architecture J2EE peut alors se montrer trompeuse ...

L'isolement des transactions (le "I" dans les propriétés ACID), représente un concept et des mécanismes permettant d'assurer l'intégrité d'une base de données pouvant être accedée et(ou) mise à jour par un ensemble de clients simultanément.

En vue d'un déploiement au sein d'un conteneur d'EJB, la bonne pratique veut que ces transactions soient déclarées "déclarativement" dans les différents descripteurs de déploiement.
Dans cette optique, le niveau d'isolement peut être défini pour l'EJB ou pour une méthode en particulier.
Les différents niveaux d'isolement et leurs caractéristiques sont résumés ici.


TRANSACTION_SERIALIZABLE

La transaction obtient les privilèges exclusifs de lecture et d'écriture sur les données. Aucune autre transaction ne peut lire ou écrire les même données. Les "dirty reads", "nonrepeatable reads" et "phantom reads" sont donc exclues. Ce niveau d'isolation est le plus restrictif.


TRANSACTION_REPEATABLE_READ

La transaction ne peut modifier les données en cours de lecture par une autre transaction.Les "dirty reads" et "nonrepeatable reads" sont exclues. Les "phantom reads" peuvent subvenir. Les EJB ou méthodes utilisant ce niveau d'isolation ont les mêmes restrictions que le niveau TRANSACTION_READ_COMMITED et auront des données identiques pendant toute la transaction.

TRANSACTION_READ_COMMITTED

La transaction ne peut lire des données non commitées. Des données en cours de modification par une autre transaction ne peuvent pas être lues. Les "dirty reads" sont exclues mais les "nonrepeatable reads" et "phantom reads" peuvent subvenir.

TRANSACTION_READ_UNCOMMITTED

La transaction peut lire des données pas encore commitées par une autre transaction en cours.Les "dirty reads", "nonrepeatable reads" et "phantom reads" peuvent subvenir.



dirty reads
Séquence :
– A écrit un tuple
– B lit ce tuple
– A fait un rollback (restaurant l'ancienne valeur)
Conséquence :
– B a effectué un dirty read
– B possède une mauvaise valeur

nonrepeatable reads
Séquence :
– B lit un tuple
– A modifie ce tuple
– A fait un commit, rendant le changement permanent
Conséquence :
– B a effectué un non repeatable read
– B ne possède pas la bonne valeur du tuple
Si B refait une lecture de ce tuple, il aura une autre valeur

phantom reads
Séquence :
– A lit un ensemble de tuples
– B écrit un tuple qui aurait dû se trouver dans l'ensemble de A si B avait été plus rapide
Conséquence :
– A ne possède pas toute l'information qu'il cherchait
– Si A exécute la même requête à nouveau, les phantoms (nouveaux tuples) apparaissent