Logist Knowledge Server

Werbung
Integration zwischen Oracle basierten
Anwendungen und Business Rules Engines
Ein Vortrag für das DOAG Regionaltreffen
24. November 2004, Karlsruhe
Dipl. Ing. Armin Singer (BA)
Geschäftsführer der Semantec GmbH
[email protected]
Entwicklungszyklus in IT
Experten
Inbetriebnahme
Fachleute
Business
Idee
Analyse
Änderungswünsche
Re-design
Manager
Analysten
Konzeptionäre
Grobspezifikation
Feinspezifikation
Pflichtenheft
Endusertest
Bugfixes
Entwickler
Machbarkeit
Projektleiter
IT
Lastenheft
Integrationstest
Implementierung
Unittest
• Hoher Kommunikationsaufwand
• Hohe Durchlaufzeiten
• Risiko des Qualitätsverlustes
• Verständnis über die Anwendungen geht verloren
• Aufwändige Pflege
Hohe Kosten in der IT
Mehrwert = Nutzen – Kosten
Quelle: IDC
Software Evolution nach Gartner
Applications
Applications
Applications
Processmanagement
Processmanagement
Rules
Engine
Rules
Engine
Rules
Engine
Database
Engine
Database
Engine
Database
Engine
Database
Engine
Operating
Environment
Operating
Environment
Operating
Environment
Operating
Environment
Applications
Applications
Applications
Applications
Data
Rules
Operating
Environment
1970
Applications
Applications
Applications
Services
Data
Rules
DataRulesRules
heute
im Entstehen
>>zurück
Business Rules Operation Mode
1.
Application
send
query
receive
data
send
send
decision
data
1. 3. request
2.
Data Base
send query
receive data
4.
receive
decision
advice
2.
3.
Rule Base
Rule 1
Rule 2
Rule 3
Rule 4
Logist Architektur
PL/SQL API
PL/SQL Library
.NET Portal
IIS Web Server
ASPX
Portal Web Forms
J2EE Portal
J2EE Web Server
JSP
Portal TagLib
Logist Tools
Knowledge Builder
Knowledge Batch
XML
.Net Server
LAPI COM+ Proxy
J2EE Server
LAPI Java Proxy
Knowledge Admin
Logist Server API (LAPI), Web Service
Logist Knowledge Server
Listeners: Web Service (SOAP), XML API (TCP/IP), MQSeries *
Agents: Inference Engine, Compiler, …
Logist Knowledge Repository
RuleSets
RTF
LIF
Schema connectivity*
XMI, XML Schemas
Data connectivity
XML, JDBC, ODBC
Application connectivity
MQSeries*, Web Services
ApplinX*
LIF sources
Application DB Web Service
Welche Konzepte stecken hinter dem BRA?
• Deklarative Ansätze >>
• Separation of Concerns >>
• Vermeidung von Codierung-Decodierung >>
• Selbsterklärung von Anwendungen >>
>>
• Einfache Bedienoberflächen >>
• Sicherheit durch Validierung und Verifizierung >>
weiter
Deklarativ
"The great thing about this (BR-) technology
is that it’s declarative and not procedural. In
other words, you get things done by simply
writing down what you want to be done —
you don’t specify in detail how it is to be
done."
Chris Date, Mitbegründer der relationalen Datenbanksysteme über den Business Rules Ansatz
>>zurück
PL/SQL Code (1):
PROCEDURE ICIS_Faell_datum_ermitteln (
p_vvs_begin IN DATE, /* Vertragsversionsbeginndatum */
p_aenderungstyp IN VARCHAR2, /* Änderungstyp der Deckung */
p_zws_code IN varchar2, /* Code für Zahlweise */
p_hauptfaelligkeit IN DATE, /* Hauptfälligkeit */
p_dpr_typ IN VARCHAR2, /* DPR-TYP */
p_datum_von IN DATE, /* Datum, ab dem erhoben wird */
p_datum_bis IN DATE, /* Datum, bis zu dem erhoben wird */
p_abr_in_monate IN NUMBER, /* Monatskennzeichen aus ZBD */
p_anz_monate IN NUMBER, /* Anzahl Monate gemäß p_zws_code (Falls 99 >> =0)*/
p_datum_faellig IN OUT DATE, /* Datum, an dem abgerechnet wird */
p_fpr_batch_entitaet IN OUT VARCHAR2,
p_fpr_auspraegung IN OUT VARCHAR2,
p_fpr_feh_fehlercode IN OUT VARCHAR2,
p_fpr_fehlertext IN OUT VARCHAR2,
p_returncode IN OUT NUMBER) IS /* Returncode der Prozedur */
/* Ermittlung des Fälligkeitsdatums gemäß Funktionsbeschreibung 9834a
in der Fassung vom 2.10.1997
mw, 6.10.1997
mw, 25.11.1997
keine Sonderbehandlung für monatliche Zahlweise
*/
F_ORACLE
F_SACH
CONSTANT NUMBER(1) := -2;
CONSTANT NUMBER(1) := -3;
v_tagesdatum
DATE;
v_fr_erh_datum DATE;
v_plus_monate NUMBER(2);
BEGIN
p_datum_faellig := TO_DATE ('01.01.1990', 'dd.mm.yyyy');
p_returncode
:= 0;
v_tagesdatum
:= sysd_te;
IF (
p_zws_code IN ('0', '99')
OR p_dpr_typ = 'EP')
THEN
-- Einmalprämie
p_datum_faellig := v_tagesdatum;
PL/SQL Code (2):
ELSIF p_zws_code = '81'
--20020313_029HK: Neue Zahlweise berücksichtigen
THEN
-- Projektprämie
IF p_datum_von < v_tagesdatum
THEN
p_datum_faellig := v_tagesdatum;
ELSE
p_datum_faellig := p_datum_von;
END IF;
--20020313_029HK:
--20020313_029HK:
--20020313_029HK:
--20020313_029HK:
--20020313_029HK:
--20020313_029HK:
--20020313_029HK:
--20020313_029HK:
--20020313_029HK:
THEN
-- monatliche Zahlweise
ELSIF p_zws_code = '88'
IF p_datum_von < v_tagesdatum
THEN
p_datum_faellig := v_tagesdatum;
ELSE
p_datum_faellig := p_datum_von;
END IF;
ELSIF p_zws_code IN ('1', '2', '4', '12')
THEN
-- ganz-, halb, viertel-jährliche ZW
v_plus_monate
:= ROUND (12 / p_anz_monate);
IF p_aenderungstyp = '7'
THEN
-- Folge
p_datum_faellig := ADD_MONTHS (p_datum_von, NVL(p_abr_in_monate, 0));
ELSE
-- Neuanlage, Änderungen
/* Ermittlung des frühesten Erhebungsdatums */
v_fr_erh_datum := TO_DATE (LTRIM (TO_CHAR (p_hauptfaelligkeit, 'DDMM')) ||
LTRIM (TO_CHAR (p_vvs_begin, 'YYYY')), 'DDMMYYYY');
-- HF im Versicherungsbeginnjahr
IF v_fr_erh_datum > p_vvs_begin
THEN
v_fr_erh_datum := ADD_MONTHS (v_fr_erh_datum, -12);
END IF;
PL/SQL Code (3):
WHILE v_fr_erh_datum <= ADD_MONTHS (p_vvs_begin, 0 - v_plus_monate)
LOOP
v_fr_erh_datum := ADD_MONTHS (v_fr_erh_datum, v_plus_monate);
END LOOP;
v_fr_erh_datum := ADD_MONTHS (v_fr_erh_datum, NVL(p_abr_in_monate,0));
IF p_datum_von < v_fr_erh_datum
THEN
IF v_fr_erh_datum > v_tagesdatum
THEN
p_datum_faellig := v_fr_erh_datum;
ELSE
p_datum_faellig := v_tagesdatum;
END IF;
ELSE
IF p_datum_von > v_tagesdatum
THEN
p_datum_faellig := p_datum_von;
ELSE
p_datum_faellig := v_tagesdatum;
END IF;
END IF;
END IF;
ELSE
p_returncode := F_SACH;
p_fpr_batch_entitaet := 'Faelligkeitsdatum';
p_fpr_fehlertext
:= 'Zahlweise nicht definiert !';
RETURN;
END IF;
EXCEPTION
WHEN OTHERS THEN
p_returncode := F_ORACLE;
p_fpr_batch_entitaet := 'Faelligkeitsdatum';
p_fpr_auspraegung
:= NULL;
p_fpr_feh_fehlercode := 'ORA-' || to_char(SQLCODE);
p_fpr_fehlertext
:= SQLERRM;
RETURN;
END ICIS_Faell_datum_ermitteln;
Vorgehensweise
1.
2.
3.
4.
5.
6.
7.
Programmcode analysieren
Entscheidungstabelle erstellen
Toolunterstützte Validierung&Verifizierung
Entscheidungsbaum erstellen (Tool)
Vergleich: Entscheidungsbaum - Code
Generierung und Optimierung der Regeln
Ersetzen des Codes durch einen Aufruf der Business
Rules Engine
1. Analyze code
Bedingungen
Aktionen
1. Due today
2. Due latest among (today, charge_starting_date)
3. Due charge_starting_date + months_to_billing
4. Due latest among (today, charge_starting_date, next_periodic_date)
2. Entscheidungstabelle erstellen
komplett
optimiert
3. V & V Report
4.+ 5. Entscheidungsbaum
6. Generate and optimize rules (a)
6. Generate and optimize rules (b)
Wenn Deckungsart “Einzelprämie“ ist
Dann setze Fälligkeitsdatum auf heute
Wenn Zahlweise “einmalig“ ist
Dann setze Fälligkeitsdatum auf heute
Wenn Zahlweise “Projektprämie“ ist
Dann setze Fälligkeitsdatum auf spätestes von (heute,
Abrechnungsdatum)
Wenn Zahlweise "periodisch” ist und Dynamic “automatisch” ist
Dann setze Fälligkeitsdatum auf Abrechnungsdatum + Laufzeit
Wenn Zahlweise "periodisch” ist und Dynamik nicht “automatisch” ist
Dann setze Fälligkeitsdatum auf spätestes von (heute,
Abrechnungsdatum, nächste_Zahlperiode + Laufzeit)
6. Generate and optimize rules (c)
7. Aufrufende Prozedur ändern
PROCEDURE ICIS_Faell_datum_ermitteln (
p_vvs_begin IN DATE, /* Vertragsversionsbeginndatum */
p_aenderungstyp IN VARCHAR2, /* Änderungstyp der Deckung */
p_zws_code IN varchar2, /* Code für Zahlweise */
p_hauptfaelligkeit IN DATE, /* Hauptfälligkeit */
p_dpr_typ IN VARCHAR2, /* DPR-TYP */
p_datum_von IN DATE, /* Datum, ab dem erhoben wird */
p_datum_bis IN DATE, /* Datum, bis zu dem erhoben wird */
p_abr_in_monate IN NUMBER, /* Monatskennzeichen aus ZBD */
p_anz_monate IN NUMBER, /* Anzahl Monate gemäß p_zws_code (Falls 99 >> =0)*/
p_datum_faellig IN OUT DATE, /* Datum, an dem abgerechnet wird */
p_fpr_batch_entitaet IN OUT VARCHAR2,
p_fpr_auspraegung IN OUT VARCHAR2,
p_fpr_feh_fehlercode IN OUT VARCHAR2,
p_fpr_fehlertext IN OUT VARCHAR2,
p_returncode IN OUT NUMBER) IS
input_data = BR_interface.input_data;
output_data = BR_interface.output_data;
BEGIN
BR_interface.Map_input_data
(input_data
"Contract",
"beginning_of_new_version",
"automatic_change",
"mode_of_billing",
"single_premium",
"beginning_of_new_version",
"months_to_billing",
"next_periodic_date",
p_vvs_begin,
p_aenderungstyp,
p_zws_code,
p_dpr_typ,
p_datum_von,
p_abr_in_monate,
v_fr_erh_datum);
BR_Interface.DSR (input_data, output_data);
BR_interface.Map_output_data (output_data, "Contract", "due_date", due_date);
END ICIS_Faell_datum_ermitteln;
>>zurück
Logist Knowledge Builder
The User Approach – Logist Tools
Knowledge
Builder
Design
Simulate
& Test
FeedBack
Notes,
Online Rule
Development
Execute
Production
Knowledge
Builder/
Knowledge
Runner
Knowledge
Portal Components
>>zurück
Logist V&V
Logist V&V
>>zurück
Zusammenfassung
• Das Trennen von Geschäftsregeln und Code ist eine folgerichtige
Konsequenz des Prinzips „Separation of Concerns“ und ein nächster
Schritt in der IT Evolution
• Business Rule Engines ermöglichen ein deklaratives Arbeiten mit
Geschäftsregeln und führen diese aus.
• Eine Codierung/Decodierung von Geschäftsregeln in Programmcode
entfällt
• Der BRA ersetzt NICHT die Anwendungsprogrammierung!
• Der BRA ist erprobt, gereift und einsatzbereit
• Semantec hilft Ihnen bei der Integration des BRA in Ihre
Anwendungslandschaft und berät Sie zum Thema BRA
Reduzierung der IT Cost of Ownership
durch die Trennung von
Geschäftslogik und Anwendung
Vielen Dank für Ihre Aufmerksamkeit!
Dipl. Ing. Armin Singer (BA)
Geschäftsführer der Semantec GmbH
[email protected]
Logist Architektur
(LIF)
Message Bus
Logist
Knowledge
Server
Inference
Engine
Inference
Engine
Logist API - LAPI
DB / XML
Logist Integration Framework
Web Service
Logist
Knowledge
Builder
Inference
Engine
Application
Logist Knowledge Repository
Knowledge Packages
Logist
Knowledge
Portal
Logist
Knowledge
Batch Processor
Logist
Knowledge
Administrator
Knowledge
Engineers
Knowledge
Operations
Business
Operations
Knowledge
Administrators
.NET Portal
IIS Web Server
ASPX
Portal Web Forms
J2EE Portal
J2EE Web Server
JSP
Portal TagLib
Logist Tools
Knowledge Builder
Knowledge Batch
.Net Server
LAPI COM+ Proxy
Logist
Architektur
J2EE Server
LAPI Java Proxy
Knowledge Admin
Logist Server API (LAPI), Web Service
Logist Knowledge Server
Listeners: Web Service (SOAP), XML API (TCP/IP), MQSeries *
Agents: Inference Engine, Compiler, …
Logist Knowledge Repository
LIF
Schema connectivity*
XMI, XML Schemas
Data connectivity
XML, JDBC, ODBC
Application connectivity
MQSeries*, Web Services
ApplinX*
LIF sources
RuleSets
RTF
* Planned in next versions
Application DB Web Service
Herunterladen