Skip to main content

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.

Comments

Popular posts from this blog

Tip: SQL client for Apache Ignite cache

A new SQL client configuration described in  The Apache Ignite book . If it got you interested, check out the rest of the book for more helpful information. Apache Ignite provides SQL queries execution on the caches, SQL syntax is an ANSI-99 compliant. Therefore, you can execute SQL queries against any caches from any SQL client which supports JDBC thin client. This section is for those, who feels comfortable with SQL rather than execute a bunch of code to retrieve data from the cache. Apache Ignite out of the box shipped with JDBC driver that allows you to connect to Ignite caches and retrieve distributed data from the cache using standard SQL queries. Rest of the section of this chapter will describe how to connect SQL IDE (Integrated Development Environment) to Ignite cache and executes some SQL queries to play with the data. SQL IDE or SQL editor can simplify the development process and allow you to get productive much quicker. Most database vendors have their own front-en

8 things every developer should know about the Apache Ignite caching

Any technology, no matter how advanced it is, will not be able to solve your problems if you implement it improperly. Caching, precisely when it comes to the use of a distributed caching, can only accelerate your application with the proper use and configurations of it. From this point of view, Apache Ignite is no different, and there are a few steps to consider before using it in the production environment. In this article, we describe various technics that can help you to plan and adequately use of Apache Ignite as cutting-edge caching technology. Do proper capacity planning before using Ignite cluster. Do paperwork for understanding the size of the cache, number of CPUs or how many JVMs will be required. Let’s assume that you are using Hibernate as an ORM in 10 application servers and wish to use Ignite as an L2 cache. Calculate the total memory usages and the number of Ignite nodes you have to need for maintaining your SLA. An incorrect number of the Ignite nodes can become a b

Load balancing and fail over with scheduler

Every programmer at least develop one Scheduler or Job in their life time of programming. Nowadays writing or developing scheduler to get you job done is very simple, but when you are thinking about high availability or load balancing your scheduler or job it getting some tricky. Even more when you have a few instance of your scheduler but only one can be run at a time also need some tricks to done. A long time ago i used some data base table lock to achieved such a functionality as leader election. Around 2010 when Zookeeper comes into play, i always preferred to use Zookeeper to bring high availability and scalability. For using Zookeeper you have to need Zookeeper cluster with minimum 3 nodes and maintain the cluster. Our new customer denied to use such a open source product in their environment and i was definitely need to find something alternative. Definitely Quartz was the next choose. Quartz makes developing scheduler easy and simple. Quartz clustering feature brings the HA and