Dieses Dokument gibt den Gesamtueberblick ueber das Lernprojekt: welche fiktive Systemlandschaft wir nachbauen, warum sie so aussieht, wie sie aussieht, und in welchen Phasen sie entsteht. Es ist der Einstiegspunkt fuer die gesamte Dokumentation.
Novaris Versicherung AG ist ein mittelgrosser Versicherer, dessen IT-Landschaft ueber gut 20 Jahre gewachsen ist:
CTR_MASTER, siehe
LegacyContractRecord).Policy-Entity), das
eng mit dem noch nicht vollstaendig abgeloesten DB2-Bestand zusammenspielt.Diese Gemengelage - zwei Datenbanken fuer denselben fachlichen Bestand, SOAP-Partner, asynchrones Messaging, EJB als tragende Businesslogik-Technologie - ist bewusst keine Kunstwelt: Sie ist ein sehr typisches Bild fuer Versicherer, die Java-EE-Technologie frueh uebernommen, aber nie vollstaendig konsolidiert haben. Genau dieses Bild soll man am Ende dieses Projekts aus eigener Erfahrung verstanden haben - inklusive der Stellen, an denen es unschoen ist, und warum es trotzdem so aussieht.
+-----------------------------------+
| novaris-policy-web-legacy-jsf | (JSF-"Kundenportal")
| Legacy-Auth: JAAS (LTPA: nur Doku) |
+------------------+------------------+
| Local-EJB (selbes EAR:
| novaris-policy-ear)
v
+------------------+ +-----+----------+ JDBC +----------------+
| novaris-billing- |<-------------------->| novaris-policy- |<-------->| Oracle |
| soap (SOAP-Service)| SOAP/@WebServiceRef | core (EJB-Kern) | | (Policenbestand)|
+------------------+ +-----+----------+ +----------------+
| JDBC (Legacy-DAO)
v
+----------------+
| DB2 |
| (CTR_MASTER) |
+----------------+
^
| JMS/MQ (Queue, Request/Reply)
+------+---------+
| novaris-claims- |
| mq |
+-----------------+
novaris-policy-core --(Topic, Pub/Sub)--> jms/novaris/policyEventsTopic
|
+------------------------+------------------------+
v v
+--------------------------+ +--------------------------+
| novaris-notification-jms | | novaris-notification-jms |
| PolicyDocumentGeneration | | CustomerNotification |
| MDB (Selektor: POLICY_ | | MDB (Selektor: POLICY_ |
| ISSUED) | | ISSUED or CLAIM_REG.) |
+--------------------------+ +--------------------------+
| Phase | Inhalt | Status |
|---|---|---|
| 0 | Reactor-Skeleton, Doku-Grundgeruest | erledigt |
| 1 | novaris-common-legacy + novaris-policy-core: der EJB-Kern (Stateless/Stateful/MDB/Timer/Interceptor, duale Persistenz Oracle+DB2) |
erledigt |
| 2 | novaris-billing-soap: SOAP-Service + SOAP-Client-Integration in policy-core |
erledigt |
| 3 | novaris-claims-mq (Queue, Request/Reply) + novaris-notification-jms (Topic, Pub/Sub) |
erledigt |
| 4 | novaris-policy-web-legacy-jsf (JSF-"Kundenportal") + novaris-policy-ear, WebSphere-Konfigurationsdoku, Legacy-Auth |
erledigt |
| 5 | novaris-integration-tests: echtes Oracle + echtes IBM MQ (Docker-CLI-orchestriert), Open-Liberty-Serverstart verifiziert; DB2 und automatisiertes EAR-Deployment bewusst nur dokumentiert |
erledigt |
| 6+ | Migration/Refactoring (bewusst separat, nicht Teil dieses Aufbaus) | spaeter, auf Wunsch des Nutzers |
novaris-billing-soap/src/main/resources/wsdl/BillingService.wsdl) ist die dokumentierte
Quelle der Wahrheit, wird aber nicht per wsimport generiert - die dafuer
verfuegbare Maven-Plugin-Toolchain erwies sich auf dem aktuellen JDK als nicht mehr
lauffaehig. SEI und Fault-Klassen liegen deshalb handgeschrieben, aber vertragsgetreu, in
novaris-common-legacy. Details und Begruendung: novaris-billing-soap/README.md und
docs/20-soap/01-contract-first-und-wsdl.md.BillingServiceEndpoint in novaris-billing-soap, mit In-Memory-
Registrierung (kein eigener DB-Ausbau fuer dieses Partnersystem in dieser Phase) und
einem echten SOAP Fault (BillingRegistrationFault) fuer fachliche Ablehnungen.BillingIntegrationBean in novaris-policy-core, per
@WebServiceRef angebunden, mit Timeout-Konfiguration, Retry bei technischen Fehlern und
Fault-spezifischer Behandlung (idempotent bei ALREADY_REGISTERED).PolicyManagementBean.activatePolicy(...) ruft
das Billing-System synchron innerhalb der eigenen CMT-Transaktion auf - ein SOAP-
Aufruf ist nicht XA-transaktional, es entsteht ein "Dual-Write"-Inkonsistenzrisiko. Das
wird nicht geloest, sondern bewusst dokumentiert (siehe Javadoc von
BillingIntegrationBean.registerPolicyForBilling) - es ist der eigentliche fachliche
Grund fuer Phase 3 (asynchrone JMS/MQ-Entkopplung).novaris-claims-mq (Schaden-Teilsystem): ClaimSubmissionClient sendet
Schadensmeldungen synchron per klassischem Request/Reply-Muster (JMSReplyTo +
JMSCorrelationID auf einer festen Antwort-Queue) an ClaimIntakeMDB in
novaris-policy-core, die jetzt auch eine Antwort zurueckschickt. Siehe
docs/30-jms-mq/02-request-reply.md.novaris-notification-jms (Benachrichtigung): zwei unabhaengige, durable Topic-
Abonnenten (PolicyDocumentGenerationMDB, CustomerNotificationMDB) mit
unterschiedlichen Message-Selektoren auf demselben Policy-Events-Topic - publiziert von
der neuen PolicyEventPublisherBean in novaris-policy-core. Siehe
docs/30-jms-mq/03-topics-und-selektoren.md.javax.jms-API und ist gegenueber dem tatsaechlichen Provider dahinter
unveraendert. Echtes IBM MQ wird in Phase 5 per Testcontainers angebunden..xhtml), nicht eine moderne SPA -
das ist die authentische WebSphere-Ära-Technologie fuer serverseitig gerenderte
Oberflaechen. Managed Beans (javax.faces.bean.ManagedBean, bewusst die JSF-2.x-Form vor
CDI @Named, siehe PolicyOverviewBean-Javadoc) injizieren EJB-Interfaces direkt per
@EJB - moeglich, weil Web- und EJB-Modul im selben EAR liegen
(docs/50-websphere-config/02-ear-packaging-und-deployment.md).PolicyOverviewBean (@RequestScoped, Policenuebersicht)
und PolicyApplicationBean (@SessionScoped, mehrseitiger Antragsprozess). Letztere
demonstriert konkret, warum Stateful Session Beans (PolicyApplicationWizardBean, Phase 1)
und session-gebundene Web-Beans natuerlich zusammenpassen: dieselbe Bean-Instanz - und
damit dieselbe EJB-Referenz - bleibt ueber alle Formular-Postbacks eines Antrags hinweg
erhalten. Schadenserfassung findet bewusst NICHT im Portal statt - Schadensmeldungen
kommen bereits ueber novaris-claims-mq per JMS herein (Phase 3), ein zusaetzlicher
manueller Erfassungsweg waere ein redundanter zweiter Eingangskanal.NovarisLegacyLoginModule (echtes, getestetes JAAS Custom Login Module,
web.xml FORM-Auth mit j_security_check) gegen einen simulierten Altbestand
(LegacyUserDirectory). LTPA (WebSphere-proprietaeres SSO-Token) ist bewusst nur
dokumentiert, nicht nachgebaut - siehe docs/50-websphere-config/01-legacy-auth-jaas-ltpa.md
fuer die Begruendung dieser Grenze.novaris-policy-ear buendelt EJB- und Web-Modul mit handgeschriebener
application.xml zu einer echten, mvn package-bauenden EAR-Datei.novaris-policy-web-modern-spa ist in M7
umgesetzt und wird als eigenes statisches Container-Deployment auf OpenShift vorbereitet.
Die Namensgebung novaris-policy-web-legacy-jsf fuer das jetzige Modul haelt beide
jederzeit eindeutig auseinander.novaris-integration-tests (neues Modul): loest die in Phasen 1-4 bewusst
getroffenen Ersatz-Entscheidungen fuer die zwei wichtigsten Faelle konkret ein -
OraclePersistenceIT (echtes Oracle statt gemockter JPA-Zugriff) und
IbmMqRequestReplyIT (echtes IBM MQ statt eingebettetem ActiveMQ). Beide gruen,
reproduzierbar. Siehe docs/40-persistence-oracle-db2/03-jpa-gegen-echtes-oracle-verifiziert.md
und docs/30-jms-mq/04-ibm-mq-vs-activemq-ersatz.md.docker-Kommandozeile funktionierte einwandfrei. Die
Integrationstests orchestrieren Container deshalb ueber einen schlanken
ProcessBuilder-Wrapper (DockerCli). Siehe novaris-integration-tests/README.md.--privileged, oft 10+ Minuten
Start) als Oracle/IBM MQ. Referenzkonfiguration:
docs/40-persistence-oracle-db2/02-db2-nur-dokumentiert.md.liberty-maven-plugin in diesem
Multi-Modul-Reactor) - bewusst als offener Punkt dokumentiert statt erzwungen, siehe
docs/50-websphere-config/03-liberty-serverstart-verifiziert.md.Policy/LegacyContractRecord-Javadoc.ClaimNotificationMessage-Javadoc -
bewusster Trade-off, der in einer spaeteren Migration (Textformat, Schema) aufgeloest
werden muesste.docs/10-ejb-konzepte/.Migration und Refactoring der hier aufgebauten Legacy-Landschaft sind ausdruecklich fuer einen spaeteren, eigenen Arbeitsschritt vorgesehen - dieses Projekt baut zunaechst bewusst den "Vorher"-Zustand vollstaendig und verstehbar auf.
⌂ Cockpit