Бхуян Шамим Ахмед
к.т.н. Бхуян Шамим Ахмед,
"ФОРС - Центр разработки"
Аннотация : Для критически важных информационных систем частое изменение бизнес-логики или набора бизнес-правил является основной бизнес-стратегией. При применении движка бизнес-правил снижается сложность выполнения комплексных бизнес-правил для любой информационной системы. В данной статье мы рассмотрим способы применения бизнес-правил в OSB ( Oracle Service Bus ) для улучшения расширяемости систем.
В простом случае в каждой информационной системе бизнес-правила имплементируются в жёстко кодированном виде, в котором для произведения минимальных изменений требуется перекомпиляция и переустановка системы на сервере приложения. OSB в данном случае не исключение. Используя движок бизнес-правил можно отделить бизнес-правило от самого приложения, что позволяет более гибко реализовывать системы и сокращает расходы при изменяющихся рыночных условиях.
Движок бизнес-правил служит основой для реализации сложных бизнес-логик. Главным его достоинством является то, что для создания правил движок позволяет использовать декларативный язык, в которым учетывается некоторая информация или ранее полученные знания. Движок бизнес-правил также включает в себя инструменты для поддержки определения и управления правилами.
В последнее время OSB стал незаменимым инструментом в области телекоммуникаций и электронной коммерции, где он становится общей интеграционной шиной для передачи и переформирования сообщений между независимыми приложениями. При маршрутизации сообщений в интеграционных шинах часто требуется изменение бизнес-логики. Например, изменение тарифного плана абонента или изменение общих скидок при купле-продаже. Логику маршрутизации сообщения для разных систем в OSB можно реализовать в движке бизнес-логики, где изменения производятся вне зависимости от OSB.
Не все приложения или OSB должны использовать движок бизнес-логики. Приведем список случаев, в которых наиболее эффективно использование движка бизнес-логики:
- Если запрограммированный код бизнес-логики содержит в себе сложные вложенные if-then выражения. Комплексная поддержка логики может оказаться сложной задачей, и средства движка бизнес-логики могут помочь организовать эту работу.
- Риск ошибки в изменении логики значительно уменьшается, когда используется декларативный подход создания логики вместе императивного языка программирования.
- Когда даже небольшое изменение бизнес-логики на этапе промышленной эксплуатации может принести серьёзный финансовой ущерб компании.
- При частом изменении бизнес-логики в связи с динамикой роста рынка.
- Если при изменении небольшого фрагмента кода требуется выполнить следующие работы, чтобы обеспечить общую эксплуатацию всей системы:
- новую логику необходимо перекомпилировать;
- код необходимо проверить в тестовой среде;
- логику необходимо проверить и утвердить, привлекая аудитора и/или бизнес-аналитика;
- изменение планируется к новое развертыванию.
В настоящие время на рынке существует несколько движков бизнес-логики, которые имплементируются JSR (Java Specification Requests)- 94. Продукт Jrules от Ilog, партнера компании Oracle, является одним из лидирующих в этом направлении программных продуктов. Кроме него существуют и другие средства разработки бизнес-логики, такие как Drools от компании Jboss, распространяющийся с открытым исходным текстом.
В данной статье мы будем рассматривать продукт Ilog Jrules и способы его применения на интеграционной шине OSB, учитывая некоторые его преимущества среди продуктов данного направления. К достоинствам продукта Ilog Jrules можно отнести следующие функции:
- Содержит полноценную BRMS (Business rules management System);
- Имеет мощную систему контроля версий;
- Имеет компонент для создания тестовых сценариев для бизнес-логики;
- Имеет отдельный независимый компонент для командной работы над набором правил;
- Имеет независимый компонент для запуска бизнес-правил и поддерживает широкий профиль протоколов для их вызова;
- Имеет средства создания и редактирования бизнес-правил на высоком уровне с помощью визуальной среда разработки.
Для определения правил в Jrules используется алгоритм RETE (рис. 1) [ RETE от латинского "Сеть" ]. В этом алгоритме применяются два термина: факт (fact) и действие (Action).
Рис. 1. Пример бизнес-логики в алгоритме RETE.
Таким образом, любое правило - это факт, и при наступлении этого факта совершаются некие действия. Все необходимые для выполнения логики объекты передаются в рабочее пространство, где производится проверка логики и действие.
Реализованные правила или набор правил в Jrules можно предоставить в виде веб-сервиса, так как созданный веб-сервис инкапсулирует все сложные аспекты вызова бизнес-правила в Jrules. Кроме создания веб-сервиса, любые созданные и развернутые правила можно вызвать на транспортном уровне TCP/IP, например ormi или t3 (см. пример кода для вызова через RMI).
Properties jndi = new Properties();
jndi.put(Context.INITIAL_CONTEXT_FACTORY,"com.evermind.server.rmi.RMIInitialContextFactory");
jndi.put(Context.PROVIDER_URL,"ormi://172.24.10.74:12401/paksession");
jndi.put(Context.SECURITY_PRINCIPAL,"bres");
jndi.put(Context.SECURITY_CREDENTIALS,"bres");
/* Jboss configuration
System.setProperty("java.naming.provider.url","jnp://172.24.10.74");
System.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
*/
try {
IlrRuleSessionProvider rsProvider = new IlrRuleSessionProviderFactory.Builder(jndi).build();
IlrStatelessRuleSession session = rsProvider.createStatelessRuleSession();
// prepare a new request
Order order = new Order();
order.setRating(RATING.GOLD);
order.setAmount(2100);
order.setId(UUID.getUniqueID());
String rulesPath = "/UFTPNRuleAppS/1.0/RosFinMonitoringReportUPFT/1.0";
IlrSessionRequest request = new IlrSessionRequest(rulesPath);
// Set the input parameters for the execution of the rules
IlrSessionExecutionSettings sessionExecutionSettings = request.getExecutionSettings();
IlrSessionParameters inputParameters = sessionExecutionSettings.getInputParameters();
inputParameters.setParameter("order", order);
request.getSessionDescriptor().enableTrace();
//set the rule Set parameter in the request
IlrSessionResponse response = null;
IlrSessionExecutionResult executionResult = null;
response = session.executeRules(request);
executionResult = response.getExecutionResult();
System.out.println("FiredRule:"+ executionResult.getNumRulesFired());
ArrayList firedRules = executionResult.getRulesFired();
for(int i=0, cnt=firedRules.size(); i < cnt; i++){
//ilog.rules.engine.IlrRule rule = (IlrRule) firedRules.get(i);
System.out.println("Fired Rule Name:"+firedRules.get(i));
}
} catch (IlrRuleSessionCreationException e) {
e.printStackTrace();
} catch(RemoteException e){
e.printStackTrace();
} catch(IlrRuleSessionException e){
e.printStackTrace();
} /*catch(NamingException e){
e.printStackTrace();
}*/ |
|
После этого наступает время применения бизнес-правил в OSB. Существует два подхода при использования заготовленных правил в OSB. Далее рассматриваются оба подхода.
- Вызов через веб-сервис:
- создаем один бизнес-сервис (Business Service) на проекте OSB из WSDL (описание веб-сервиса) бизнес-правил;
- подготавливаем все необходимые входные данные для вызова прокси-сервиса (Proxy Service);
- добавляем узел routing в прокси-сервис и указываем пути к данному бизнес-сервису, который инкапсулирует вызов бизнес-правила;
- результат вызова используем в остальных узлах процесса.
Рис. 2. Вызов бизнес-правила
- Вызов через транспортный протокол:
- создаем один java-проект, добавляем статичный метод с фрагментом кода, который показан выше;
- компилируем проект и создаем сборку (jar) из данного проекта;
- импортируем созданный jar в проект OSB;
- добавляем в прокси-сервисе узел под названием JavaCallOut;
- указываем импортированный jar и выбираем статичный класс для вызова бизнес-правила.
Рис. 2 иллюстрирует все возможные варианты вызова бизнес-правила из OSB.
Движок правил использует декларативный подход для создания правил, что позволяет приложениям, использущих бизнес-правила, быть более гибким к настройкам и расширениям. Продукт Oracle Service Bus предоставляет широкие возможности для создания наиболее гибкой интеграционной шины на базе бизнес-правил.
ЛИТЕРАТУРА:
- Документация Ilog Jrules; http://ilog.com/products/jrules/documentation/jrules67
- Ernest Freidman-Hill, Jess in action - 2003.
- Tony Morgan, Business rules and information system - 2003.
Ссылки по теме