Friday

Using JPA with ilog Jrules project

Last couple of months i have worked with Ilog Jrules. These BRMS has lot of functionality to use business rules effectively in any project. Sometimes it's very usefull to get some additional meta data from database to execute business rules. In Ilog jrules documentation is not so useful to know how to use JPA, however in documentation you should found a few information with bunch of code. This post will explain how to use JPA in ilog jrules project and save a couple of hours for new comm er in BRMS.
At first in jrules we have to build XOM(Execution object model), which will execute all the business logic. After that we define BOM (Business object model) from XOM to write business logic's in project.
For using JPA we will make a class which will get all the CRUD operations and delegate every thing to the DAO layer.
Class diagram is as follows:

Here implemention of the IDAOService interface is a basic implemention of the DAO pattern and initialize session manager to manage all the CRUD operations. I guess explanation of the DAO pattern is redundant.
Now at these moment we can create BOM from the XOM and define only the JPAService. JPAService operations will be available for writting buseinss rules.
After creating BOM we have to initilize the JPAService class to use.
In Jrules there are two ways to do that.
1) In the class verbalization of JPAService in BOM we can select the check box named .

2) Most effective method and which i preffered is to initialize the JPAService class in the initial task of the rule flow as follows:
first we will create a global variable named serviceUtils of the type of JPAService, and then initilize the valiable in the initial action of the rule flow.

Now we are ready to use these variable in BAL, decesion Tree, decesion Table even in the IRL construction.
In following i put some frugment of BAL code,
definitions
set 'partners' to serviceUtils . getPartners ( the id of paramPerson )
where each IDWPerson recepients is not null
and (the person type sys name of each IDWPerson recepients is not empty and the person type sys name of each IDWPerson recepients contains "UL")
and ( the fact address of each IDWPerson recepients is not empty
and ( utils .upperCase(the fact address of each IDWPerson recepients) contains "Delhi"
or utils .upperCase(the fact address of each IDWPerson recepients) contains "Kanpur" ) ) ;
set 'partnersId' to serviceUtils . getPersonsId ( partners ) ;
if
buffer . isEmptyCollection ( partnersId ) is false
then
add partnersId to the frst collections of varBuffer ;
print "partners found" ;

Some additional information:
You must supply all the necessary libraries of JPA to J2eeruleSession.ear to invoke business rules remotly. Also must add all the libraries in the jrules-rsm-ssp.war file to use in scenario manager.
P.S. I assume all the information will help somebody to save couple of hours to develop business rules with JPA.
Post a Comment