Wiki-Quellcode von Systemarchitektur
Verstecke letzte Bearbeiter
author | version | line-number | content |
---|---|---|---|
![]() |
1.1 | 1 | {{content/}} |
2 | |||
![]() |
3.10 | 3 | {{formcycle/}} ist einer reine Java-Anwendung und basiert auf einer modularisierten und schichtenorientierten Komponenten-Architektur, die sich mit jedem Java-fähigen Betriebssystem unter einem Anwendungsserver (Tomcat, JBOSS) nutzen lässt. Der Datenbankzugriff basiert vollständig auf der //Java Database Connectivity API// ({{smallcaps}}Jdbc{{/smallcaps}}). Im folgenden werden bestimmte Komponenten und Eigenschaften genauer beschrieben. |
![]() |
1.1 | 4 | |
![]() |
2.1 | 5 | == Laufzeitumgebung == |
6 | Für den Betrieb von {{formcycle/}} ist Java in mindestens der Version 11 sowie ein entsprechender Servlet-Container (z.B. Tomcat) nötig. Ferner wird für die Daten-Persistenz eine relationale Datenbank benötigt. FORMCYCLE unterstützt hierbei MySQL, MS SQL, PostgreSQL und Oracle. | ||
7 | |||
8 | == Überblick der Modularisierung == | ||
9 | |||
![]() |
3.2 | 10 | {{figure image="Systemarchitektur_Überblick.png" width="300"}} |
11 | Überblick der Modularisierung von {{formcycle case="dat"/}}. | ||
12 | {{/figure}} | ||
![]() |
2.1 | 13 | |
14 | {{formcycle/}} basiert auf einer hoch-modulare Anwendungs-Architektur welche sich in die folgenden Teile gruppieren lässt: | ||
15 | |||
16 | === Commons === | ||
17 | |||
18 | Innerhalb der Commons Module stehen die in der kompletten Anwendung verwendeten Model- und Entitäts-Klassen zur Verfügung. | ||
19 | |||
20 | === DAO === | ||
21 | |||
22 | Innerhalb der DAO-Module ist die Logik für die Daten-Persistenz gekapselt. Hierbei kommt Hibernate als JPA-Implementierung zum Einsatz und ist für die entsprechenden CRUD-Operationen der einzelnen Entitäten verantwortlich. Die Kommunikation mit der verwendeten Datenbank wird mittels HikariCP und den jeweiligen JDBC-Treibern realisiert. | ||
23 | |||
24 | === Logik === | ||
25 | |||
26 | Innerhalb der einzelnen Logik-Module ist die eigentliche Business-Logik von {{formcycle/}} gekapselt. Die relevantesten Funktionalitäten einzelner Module sind hierbei folgende: | ||
27 | |||
28 | * Durchführung der Workflow-Verarbeitung (Abarbeiten der konfigurierten Aktionen) | ||
29 | * Das Integrieren und Ausführen von installierten Plugins | ||
30 | * LDAP-Anbindung an Fremdsysteme (UnboundID LDAP SDK) | ||
31 | * Cluster-Kommunikation mehrerer {{formcycle/}}-Server (JGroups) | ||
32 | * Das Ausführen zeitgesteuerter Aufgaben (Quartz) | ||
33 | |||
34 | === Formular-Designer === | ||
35 | |||
36 | Die Module des Formular-Designers sind neben dem eigentlichen Design-Prozess auch für das Rendern bestehender Formulare sowie das Validieren von eingegebenen Daten innerhalb eines Formular-Aufrufs verantwortlich. | ||
37 | |||
38 | === APIs === | ||
39 | |||
40 | Basierend auf den Logik- bzw. Formular-Designer-Modulen setzten mehrere Schnittstellen auf welche es ermöglichen die entsprechenden Funktionalitäten zu nutzen. So steht neben einer Java-API basierend auf RPC (SIMON/MINA) auch eine REST-Schnittstelle zur Verfügung. Ebenso lassen sich hierrüber die CRUD-Operationen der DAO-Schicht aufrufen. | ||
41 | |||
42 | === Verwaltungs-Frontend === | ||
43 | |||
44 | Das Frontend zur Verwaltung und Konfiguration von {{formcycle/}} besteht aus mehreren Modulen welche mittels entsprechender Beans (JSF) sowohl DAO, Logik oder auch entsprechende API-Module ansteuert und dem Benutzer die dazu benötigten Web-Oberflächen bereitstellt. | ||
45 | |||
46 | === Formular-Frontend === | ||
47 | |||
48 | Beim Formular-Frontend handelt es sich um Module welche für die Auslieferung und Verarbeitung der Formulare verantwortlich sind. Hierfür wird neben der RPC-API zum Aufruf des eigentlichen Renderns des entsprechenden HTML-Codes (inkl. CSS, JavaScript) auch die REST-API benutzt um weitere Daten oder Dateien innerhalb der Ausführung im Client-Browser bereitzustellen. Ferner werden über die RPC-API auch weitere Funktionalitäten wie z.B. die Benutzer-Authentifizierung oder das Ausführen von Plugins realisiert. | ||
49 | |||
50 | == Verwendete Technologien/Bibliotheken == | ||
51 | |||
52 | Innerhalb von {{formcycle/}} kommen unter anderem folgende Bibliotheken und Technologien zum Einsatz: | ||
53 | |||
![]() |
3.5 | 54 | * Java ab Version 11 |
![]() |
2.1 | 55 | * JSF inkl. Primefaces und Omnifaces |
56 | * HTML, CSS und JavaScript | ||
57 | * Aspose Word, Apache PDFBox, Apache POI | ||
58 | * div. Apache Commons Bibliotheken | ||
59 | * JPA, Hibernate ORM, HikariCP, JDBC | ||
60 | * Liquibase | ||
61 | * Hibernate Validator | ||
62 | * JavaMail | ||
![]() |
3.8 | 63 | * Log4j2 über SLF4J |
![]() |
2.1 | 64 | * Quartz |
65 | * EHCache | ||
66 | * JGroups | ||
67 | * SIMON, MINA | ||
68 | * UnboundID LDAP SDK | ||
69 | * SimpleXML, fastjson | ||
70 | * Xalan XSLT processor | ||
71 | * Mozilla Rhino | ||
![]() |
3.9 | 72 | * pac4j |
![]() |
2.1 | 73 | |
![]() |
1.1 | 74 | == Systemarchitektur beim Einsatz eines optionalen Frontend-Servers == |
75 | |||
76 | {{figure image="systemarchitektur2.png" width="300"}} | ||
77 | Architektur von {{formcycle case="dat"/}}, wenn sowohl ein Master-Server als auch ein Frontend-Server genutzt wird. | ||
78 | {{/figure}} | ||
79 | |||
80 | Der Einsatz eines [[Frontend-Servers>>doc:Formcycle.SystemSettings.UserInterface.FrontendServer]] ist sinnvoll bei: | ||
81 | |||
![]() |
3.3 | 82 | * Netzwerkübergreifende Installation (etwa lokales Intranet + DMZ) |
![]() |
1.1 | 83 | * Lastverteilung |
84 | * Regionale Aufteilung (Jeder Mandant hat einen eigenen Frontend-Server mit eigenen Formularen) | ||
85 | * Kundenspezifische Erweiterungen (Integration in vorhandene Systemumgebung, eigene Verwaltungsoberflächen) | ||
86 | |||
87 | {{table dataTypeAlpha="0" preSort="0-asc" colWidth="200-500"}} | ||
88 | |=Modul|=Beschreibung | ||
89 | |Frontend|Informationen zum Status des Servers, eigene Oberflächen. | ||
90 | |API (RPC)|Ermöglicht den Zugriff auf Vorgänge, Status, Aktionsverarbeitungen, Aktionen und vieles mehr. | ||
91 | |Common|Schichtenübergreifende Funktionalitäten. | ||
92 | |BSV|Bidirektionale Socket-Verbindung zur Kommunikation zwischen Master-Server und Frontend-Server. | ||
93 | {{/table}} |