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