IBM WebSphere ILOG JRules는 설계, 개발, 테스팅, 배치, 실행에서부터 유지보수에 이르기까지 비즈니스 규칙의 모든 측면을 다루는 기능의 포괄적인 세트를 제공하는 선도하는 Business Rule Management System(BRMS)이다.
웹 서비스는 애플리케이션이 플랫폼 및 프로그래밍 언어 불문(language-agnostic) 방식으로 상호 간에 통신할 수 있게 해주는 기술이다. 웹 서비스는 표준화된 XML 메시징을 통해 네트워크를 넘어 액세스할 수 있는 작업의 콜렉션을 설명하는 소프트웨어 인터페이스이다. 웹 서비스는 널리 사용되어 대부분의 서비스 지향 아키텍처(SOA)에서 중심 역할을 담당한다.
JRules는 의사결정 서비스가 필수 프로그램 코딩을 추가하지 않고 웹 서비스로 노출될 수 있는 HTDS(Hosted Transparent Decision Server)라는 기능을 소개한다.
이 샘플을 실행하려면 다음 제품을 정확하게 설치하고 구성해야 한다.
- IBM WebSphere ILOG JRules V7.0.x
설치 후 다음이 수행 가능해야 한다.
- JRules 설치 프로그램과 함께 제공되는 Rule Studio를 시작한다.
- http://localhost:8080/res/에서 Rule Execution Server 콘솔 홈페이지를 보자. 이는 즉시 tomcat 서버 인스턴스에서 지원된다. JRules를 WebSphere 또는 Oracle WebLogic과 같이 다른 애플리케이션 서버에서 실행하려면 추가 구성이 필요하다.
샘플을 실행하려면 다음 JRules 번들/컴포넌트는 필요하지 않음을 참고하자.
- Rule Team Server 번들
- Decision Validation Service
- Rule Solutions for Office
비즈니스 시나리오는 매우 단순하다. 고객 정보를 넣고 의사결정 서비스를 호출하여 대출 신청이 합법적인지 대출 이자율을 결정하는 Java EE 웹 기반 대출 견적 신청이 있다고 가정하자. 간단하게 만들기 위해 제공된 대출 금액과 신청자의 연령으로 대출 이자율을 결정한다. 두 개의 키 엔티티는 고객과 대출이다.
실제 실행 도중에 JRules를 활용하는 내재된 오브젝트 모델인 XOM(JRules Execution Object Model)을 모델링하는 두 가지 방법이 있다. 도메인 오브젝트는 Java 또는 XML 중 하나로 모델링될 수 있다. 이 예제에서는 XML XOM을 사용한다.
그림 1. XML_Customer
그림 2. XOM_Loan
규칙 프로젝트에서 구현된 두 개의 규칙은 Loan Value와 Young Applicant이다. 이는 Eligibility와 Rating 서브패키지로 각각 분류된다.
목록 1. SRule Eligibility.Loan Value
if
the advance amount of the loan of 'the customer' is more than 100000
then
set the decision of the loan of 'the customer' to "Declined";
else
set the decision of the loan of 'the customer' to "Accepted";
set the rate of the loan of 'the customer' to 5.5;
|
목록 2. Rule Rating.Young Applicant
if
the age of 'the customer' is less than 21
then
set the rate of the loan of 'the customer' to 6.5;
|
조화로운 ruleflow는 eligibility 패키지와 rating 패키지 둘 다에서부터 규칙이 연결된다.
그림 3. Ruleflow
RuleSet 매개변수는 의사결정 서비스로 호출될 규칙 세트에 대해 데이터 인터페이스를 정의한다. 모든 Customer 입력에 대해 의사결정 서비스는 적합한 대출 이자율이 무엇인지 결정할 수 있다. 대출 이자율은
customer.getLoan().getRate()를 통해 업데이트된 고객 오브젝트에 리턴될 것이다.
그림 4. RuleSet Parameter
수 많은 통합 옵션이 즉시 사용가능하며, 예를 들면, 웹 서비스, J2SE 또는 Local/Remote EJB 모드 등이 있다. 이 기사에서는 웹 서비스로 이를 사용하는 방법에 대해 배울 것이다. 사용하기 전에 이 규칙 프로젝트 LoanRules(위에 표시된 모든 아티팩트로 구성됨)가 이미 작성되었다고 가정하고, 그 다음에 할 일은 다음과 같다.
- LoanRules를 RuleApp Archive로 패키지하는 RuleApp 프로젝트 작성
- 내장 Tomcat 서버에 대해 Rule Execution Server Configuration 작성
- RuleApp Archive를 Tomcat으로 배치
- Decision Service의 WSDL 파일 생성 및 확인
- 웹 서비스를 호출하는 웹 서비스 클라이언트 실행
1단계. LoanRules를 RuleApp Archive로 패키지하는 RuleApp 프로젝트 작성
"New Project" 마법사를 사용하여 새 RuleApp 프로젝트를 작성한다. RuleApp 프로젝트는 RuleApp 아카이브를 생성하는 데 사용된다.
그림 5. 새 RuleApp 작성
"LoanRules"를 지정하고 이를 RuleApp 프로젝트에 추가한다. 이렇게 하면 RuleApp 아카이브가 Rule Project "LoanRules"에서 정의된 규칙을 포함할 것이라고 JRules가 알려준다.
그림 6. RuleProject "LoanRules" 추가
모든 기타 기본 설정을 수락하고 "Finish"를 클릭한다. 이제 RuleApp 프로젝트 "LoanRuleApp"이 준비되었다.
2단계. Tomcat에 대해 Rule Execution Server Configuration 작성
이 단계는 ruleapp을 RES(Rule Execution Server)로 배치하는 면에서 선택적이지만, 나중에 사용하기 위해 RES 구성을 저장하기 위해 권장되며 더 시맨틱적인 접근방식이다. 이는 개발, 테스팅 및 프로덕션 환경에 사용 가능한 RES 구성 목록이 있는 경우 대상 RES를 전환하기에 훨씬 더 간편하다.
그림 7. 새 RES Configuration Project 작성
Tomcat 서버에 대해 올바른 구성을 입력하고 이 tomcat 인스턴스에서 실행 중인 RES(Rule Execution Server) Console의 사용자와 비밀번호를 지정한다. "Test Connection" 단추를 클릭하여 연결이 작동하는지 확인한다.
그림 8. Tomcat 서버 구성
모든 기타 기본 설정을 수락하고 "Finish"를 클릭한다. 이제 RES Configuration Project가 생겼다. 이 프로젝트는 적절한 개발을 위해 1단계에서 작성한 RuleApp 프로젝트에서 사용될 것이다.
3단계. RuleApp Archive를 Tomcat으로 배치
LoanRuleApp 프로젝트 폴더에서 "archive.xml" 파일을 두 번 클릭한다.
그림 9. RuleApp Project 열기
패널의 왼쪽 맨 아래에 "Deploy" 링크가 있음을 주목하자. 이를 클릭하면 버저닝 정책을 선택하라는 메시지가 표시된다. 이는 최초로 RuleApp을 배치하는 것이기 때문에, "Increment RuleApp major version"을 선택한다.
그림 10. 새 버전으로 배치
첫 번째 단일 선택 단추를 클릭하고 "Tomcat"을 선택한다. 이는 Tomcat 서버에 규칙을 배치하려고 하는 것을 JRules에 알리는 것이다. "Finish"를 클릭하여 마법사를 완료한다.
그림 11. RuleApp을 서버로 배치
콘솔 패널에 배치가 성공했음을 표시하는 긴 인쇄문이 나타날 것이다.
그림 12. RuleApp이 배치되었음을 표시하는 메시지
4단계. Decision Service의 WSDL 파일 생성 및 확인
Tomcat에서 RES 콘솔에 로그인하자. 기본 URL은 http://localhost:8080/res이다. 필요한 경우 호스트 이름이나 포트를 변경한다. 기본 사용자 이름과 비밀번호는 resAdmin이다.
로그인하면 "Explorer" 탭을 클릭한다. 배치된 RuleApps 목록이 표시된다. 이 예제에서 "LoanRuleApp" 버전 1.0이라는 RuleApp을 볼 수 있다.
그림 13. RES Console에 나열된 RuleApp
"LoanRuleApp"을 클릭하여 RuleApp View로 들어간다. 이는 LoanRuleApp에 대한 사용자 정의 특성을 편집하는 곳이다. 맨 아래 "RuleSet" 패널에서 "LoanRules"라는 이름의 행이 있다. 이는 LoanRuleApp에 포함된 ruleset이다.
그림 14. RuleApp View
"LoanRules"를 클릭하여 RuleSet View로 들어간다.
그림 15. RuleSet View
"Get HTDS WSDL for this ruleset version"의 링크를 볼 수 있다. 이를 클릭하여 이 의사결정 서비스에 대해 WSDL 파일을 생성한다. WSDL 페이지로 이동될 것이다. 이 웹 서비스 엔드포인트 URL은 http://localhost:8080/DecisionService/ws/LoanRuleApp/1.0/LoanRules/1.0?WSDL이다.
그림 16. 생성된 WSDL
5a단계. SOAPUI를 사용하여 웹 서비스를 호출하는 웹 서비스 클라이언트 시뮬레이트
이 단계에서는 SOAPUI를 웹 서비스 클라이언트로 사용하여 위의 웹 서비스를 테스트할 것이다.
먼저 마법사 대화 상자인 http://localhost:8080/DecisionService/ws/LoanRuleApp/1.0/LoanRules/1.0?WSDL에서 WSDL URL을 지정하여 새 SOAPUI 프로젝트를 작성한다. 선택사항인 "Create sample requests for all operations"를 선택하여 입력 XML의 구조가 어떠한 모양인지 살펴본다.
그림 17. New SOAPUI Project 마법사
두 번째로 다음 XML을 SOAPUI의 왼쪽에 있는 요청 텍스트 상자에 붙여넣는다. 고객의 DOB에 대해 접미부 "Z"가 있음을 주목하자. 이는 협정 세계시(UTC)와 동일한 시간대를 의미한다.
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:dec="http://www.ilog.com/rules/DecisionService"
xmlns:loan="http://ilog.com/loan"
xmlns:par="http://www.ilog.com/rules/param"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
</soapenv:Header>
<soapenv:Body>
<dec:DecisionServiceRequest>
<par:inputCustomer>
<loan:Customer>
<loan:ID>AB1265H</loan:ID>
<loan:Salary>35000</loan:Salary>
<loan:Dob>1960-01-01Z</loan:Dob>
<loan:Security/>
<loan:Loan>
<loan:AdvanceAmount>100000</loan:AdvanceAmount>
<loan:Term>36</loan:Term>
<loan:PaymentFrequency>1</loan:PaymentFrequency>
<loan:ID>AB1265H</loan:ID>
<loan:Product/>
</loan:Loan>
</loan:Customer>
</par:inputCustomer>
</dec:DecisionServiceRequest>
</soapenv:Body>
</soapenv:Envelope>
|
"Run" 단추를 클릭하면 XML에서 응답 soap 메시지가 오른쪽에 표시될 것이다. 여기에서부터 비즈니스 의사결정과 관련된 정보인 5.5퍼센트의 이자율로 대출이 승인됨을 찾을 수 있어야 한다.
목록 3. XML 결과물
<Loan>
<AdvancedAmount>1000000.0</AdvancedAmount>
<Term>36</Term>
<Rate>5.5</Rate>
<RepaymentAmount xsi:null="true"/>
<Decision>Accepted</Decision>
|
이제 SOAPUI GUI는 아래 그림 18의 스크린샷과 비슷할 것이다.
그림 18. SOAPUI 스크린샷
5b단계. 웹 서비스를 호출하는 Apache Axis Client 실행
고급 개발자는 SOAPUI에서 활용하는 것이 아니라 웹 서비스를 테스트하기 위해 Apache Axis 클라이언트를 구현하려 할 수 있다. 예를 들어, 이 웹 서비스를 확인하기 위해 .NET 애플리케이션을 사용할 것이다.
ServiceLocator와 PortType 클래스를 사용하여 서비스를 호출한다. 이러한 클래스는 WSDL2Java ant 대상으로 자동 생성되었다.
DecisionServiceLoanRules_ServiceLocator service
= new DecisionServiceLoanRules_ServiceLocator();
DecisionServiceLoanRules_PortType port
= service.getDecisionServiceSOAPlocalhost();
DecisionServiceRequest request = new DecisionServiceRequest();
DecisionServiceResponse response = null;
InputCustomer customerWrapper = new InputCustomer();
Customer customer = new Customer();
|
Axis ServiceLocator 및 portType 인스턴스 초기화
유형 Customer의 입력 데이터를 계속 설정한다. 여기에는 다음 값 세트가 있다. 특히 고객의 DOB가 1960년 1월 1일이고 대출 금액은 $100,000이다.
customer.setID("AB1265H");
customer.setSalary(35000.00);
customer.setDob(new Date(60,1,1));
Loan loan = new Loan();
loan.setAdvanceAmount(100000.00);
loan.setTerm(36);
loan.setPaymentFrequency(1);
loan.setProduct(new Product());
customer.setLoan(loan);
|
최종 단계는 의사결정 서비스를 호출하고 대출 이자율을 출력하는 것이다. 의사결정이 대출 요청을 거절하는 경우, Customer.Loan.Decision 속성이 "Declined"로 설정될 것이다.
response = port.executeDecisionService(request);
InputCustomer customerWrapperReturned
= response.getInputCustomer();
System.out.println("The decision is " +
customerWrapperReturned.getCustomer().getLoan().getDecision());
System.out.println("The rate is " +
customerWrapperReturned.getCustomer().getLoan().getRate());
|
그 다음으로 클라이언트를 실행한다. 리턴된 결과가 콘솔에 인쇄된다. 대출이 승인될 것이고, 내재된 대출 이자율은 5.5퍼센트이다. MIME 라이브러리 누락에 대한 첫 번째 결과물 메시지인 "Unable to find required class..."는 테스트 케이스와 무관하므로 무시하자.
그림 19. Java Console 결과물
JRules는 성공적인 RuleApp 배치에서 자동으로 웹 서비스를 생성하고 호스트한다. 이는 JRules가 제공하는 민첩성과 웹 서비스와 함께 제공되는 유연성을 결합한다. 이 기능은 WebSphere Process Server, WebSphere Enterprise Service Bus 및 WebSphere Message Broker와 같이 다른 IBM 제품과의 더 원활한 통합을 가능하게 한다.
교육
- IBM WebSphere ILOG JRules v7
Information Center는 모든 WebSphere ILOG JRules v7 문서로의 단일화된 웹 포털이며, WebSphere MQ 환경을 설치, 구성, 사용 및 사용자 정의하는 것에 대한 개념적인 태스크 및 참조 정보가 나와있다.
- JRules에서 대부분의 주요 주제를 다루는 포괄적인 튜토리얼로 시작하자.
- JRules v7에 소개된 새 기능에 대한 자세한 설명은 기술 자료가 나와있는 what is new in JRules v7에
대해 추가적으로 읽어보자.
- WebSphere ILOG JRules v7의 무료 시험판 다운로드인 WebSphere ILOG JRules v7
Trial을 다운로드하자. 이는 시험판 기간 동안에 무료로 Windows 및 Linux 설치에 대한 제한적인 온라인 지원이 포함되어 있다.
- developerWorks WebSphere
application connectivity 영역에 액세스하여 WebSphere 애플리케이션 연결(이전에 WebSphere 비즈니스 통합) 방법 기사, 다운로드, 튜토리얼, 교육, 제품 정보 및 기타 등등을 확인하자.
- developerWorks WebSphere business
process management 영역에 액세스하여 비즈니스 프로세스를 모델링, 어셈블, 배치 및 관리하는 데 유용한 WebSphere BPM 방법 기사, 다운로드, 튜토리얼, 교육, 제품 정보 및 기타 자원을 확인하자.
- developerWorks의 SOA 및 웹 영역에서 기술을 향상시키는 데 필요한 참고자료를 얻을 수 있다.
- developerWorks
기술 행사 및 웹 캐스트를 통해 다양한 IBM 제품 및 IT 산업 주제에 대한 최신 정보를 얻을 수 있다.
- 무료 developerWorks Live!
briefing을 통해 최신 IBM 제품 및 도구에 대한 정보뿐만 아니라 IT 업계의 최신 경향까지도 빠르게 확인할 수 있다.
- Twitter에서 SOA 페이지를 살펴보자.
- developerWorks
on-demand demos에서는 입문자를 위한 제품 설치 및 설정부터 숙련된 개발자를 위한 고급 기능까지 망라된 다양한 데모를 제공한다.
제품 및 기술 얻기
-
자신에게 가장한 적합한 방법으로 IBM
제품을 평가해 보자. 시험판 제품을 다운로드하거나, 온라인으로 제품을 사용해 보거나, 클라우드 환경에서 제품을 사용하거나,
SOA Sandbox에서
SOA(Service Oriented Architecture)를 효과적으로 구현하는 방법을 배울 수 있다.
토론
- My developerWorks 커뮤니티에 참여하자.
개발자 중심 블로그, 포럼, 그룹 및 Wiki 검색 중에 다른 developerWorks
사용자와 의견을 교환해 보자.
