MRules se base sur la réflexion Java et propose une syntaxe du type JSTL pour l’accès aux données. Cette syntaxe est courante et est proposée par exemple par la librairie Apache « commons-beanutils ».
Les premières versions de MRules se basaient d’ailleurs sur cette librairie d’Apache pour l’accès aux données et pour les conversions.
Cependant, l’implémentation « commons-beanutils » comporte quelques inconvénients :
- L’exécution est lente, car le code est peu optimisé
- Il y a des restrictions au niveau de la syntaxe et de l’accès aux données
Pour ces raisons, une implémentation spécifique de l’accès aux données et des conversions est offerte par MRules. Cette implémentation offre non seulement des performances bien supérieures (40% de gains sur l’accès aux données, 10% sur les conversions), mais également plus de fonctionnalités. Par exemple :
- commons-beanutils ne propose pas l’accès aux variables indexées (type Map) grâces à des clés variables.
Exemple :
myBean.myMap[myKey].myField
: « myKey » est considéré comme une chaîne de caractères et ne peut pas varier.
Avec MRules :
myBean.myMap["myKey"].myField
: « myKey » est considéré comme une chaîne de caractères et ne peut pas varier.
myBean.myMap[myKey].myField
: « myKey » représente un champ du bean d’entrée, dont la valeur sera utilisée en tant que clé.
myBean.myMap[$myKey].myField
: « myKey » représente une variable (fonctionnalité spécifique à l’utilisation au sein du moteur de règles). - commons-beanutils n’accepte pas que les « Nested Beans » soient null lors de la lecture ou de l’écriture de données.
Cette possibilité est offerte avec MRules, en choisissant d’instancier ou non à la volée les « Nested Beans » - Mrules permet d’accéder directement aux champs et méthodes, statiques ou non, avec une syntaxe spécifique:
Exemple:
myBean.!mySubBean.myProperty : « mySubBean » est un champ qui sera accédé directement, non via getters / setters.
mybean.!myMethod().myProperty : « myMethod » est le nom d’une méthode, qui sera accédée directement.
!(MyClass.myStaticField).myProperty : « myStaticField » est un champ statique qui sera accédé directement.
mybean.!myStaticMethod().myField : « myStaticMethod » est le nom d’une méthode statique, qui sera accédée directement. - Les tableaux et Collection sont gérés de façon beaucoup plus puissante avec MRules, avec par exemple le support de plusieurs dimensions.
- MRules permet d’accéder à toutes les propriétés, y compris privées.
- Plus de conversions sont possibles avec les Converters de MRules et il est simple d’ajouter des implémentations spécifiques.
Ces utilitaires sont fournis avec un connecteur permettant de les utiliser avec du code basé sur la librairie Apache.
Pour plus d’informations, consultez notre How-To sur le framework d’accès aux données (en anglais).