Derzeit bevorzuge ich Projekte im Raum Berlin oder full remote.
BeschreibungDas Verwaltungsportal des Bundes soll für Bürgerinnen und Bürger sowie Unternehmen einen zentralen und komfortablen Zugang zu allen Verwaltungsleistungen des Bundes ermöglichen. Über die Anbindung an den Portalverbund werden ebenfalls die Leistungen der Länder und Kommunen zugänglich sein. Dabei verfolgt das Projekt eine ganzheitliche Lösung für Bürger/innen, Unternehmen und für Behörden. Die Umsetzung der einzelnen Applikationen erfolgte in einer hexagonalen Service-Architektur. Die Vorgangsbearbeitung dient der Verwaltung und Bearbeitung von durch den Bürger übermittelter Anträge innerhalb der Behörden.
AusführungLinux (Ubuntu) Java 17, Spring, Spring Boot Kubernetes, Docker REST, Jackson Hibernate 5, Oracle DB, H2, domain-driven design, hexagonal architecture Cloud MinIO, MapStruct, Micrometer, Lombok, Feign, Resilience4J, Testcontainers, OpenTracing, AOP, Mockito Junit 5, AssertJ, JSONAssert IDE: IntelliJ 2021 Vorgehensmodell: Scrum Tools: Maven, GitLab VCS: git
Einfache Möglichkeit zum Versand von Einwegnachrichten, die beim Lesen automatisch gelöscht werden. Möglichkeit für Attachment als Bild. Bei Erstellung der Nachricht wird ein Link generiert, der dem Empfänger mitzuteilen ist. Ruft der Empfänger den Link auf, so wird die Nachricht auf dem Server gelöscht, wodurch sie nur einmalig gelesen werden kann Microservice Architektur: message store, authorization/ authentication, frontend
Features
Betrieb
Beschreibung
Das Verwaltungsportal des Bundes soll für Bürgerinnen und Bürger sowie Unternehmen einen zentralen und komfortablen Zugang zu allen Verwaltungsleistungen des Bundes ermöglichen. Über die Anbindung an den Portalverbund werden ebenfalls die Leistungen der Länder und Kommunen zugänglich sein. Dabei verfolgt das Projekt eine ganzheitliche Lösung für Bürger/innen, Unternehmen und für Behörden.
Die Umsetzung der einzelnen Applikationen erfolgte in einer hexagonalen Service-Architektur.
In diesem Umfeld ist es notwendig hochgeladene und generierte Dokumente sicher zu verwalten. Für diesen Zweck wurde ein Dokumentenservice entwickelt. Dieser nimmt Dokumente entgegen, ohne diese unmittelbar zum Download anzubieten. Erst wenn diese durch die Verwaltungssoftware als final markiert werden, können Sie mit einem Zugriffsschlüssel für eine begrenzte Zeit vom Nutzer heruntergeladen werden. Temporär hochgeladene Dokumente werden zyklisch aus dem System gelöscht.
Ausführung
Linux (Ubuntu)
Java 14, Spring, Spring Boot
Kubernetes, Docker
REST, Jackson
Hibernate 5, Oracle DB, H2, domain-driven design, hexagonal architecture
Cloud
MinIO, MapStruct, Micrometer, Lombok, Feign, Resilience4J, Testcontainers, OpenTracing, AOP, Mockito
Junit 5, AssertJ, JSONAssert
IDE: IntelliJ 2020
Vorgehensmodell: Scrum
Tools: Maven, GitLab
VCS: git
Beschreibung
Das Verwaltungsportal des Bundes soll für Bürgerinnen und Bürger sowie Unternehmen einen zentralen und komfortablen Zugang zu allen Verwaltungsleistungen des Bundes ermöglichen. Über die Anbindung an den Portalverbund werden ebenfalls die Leistungen der Länder und Kommunen zugänglich sein. Dabei verfolgt das Projekt eine ganzheitliche Lösung für Bürger/innen, Unternehmen und für Behörden.
Die Umsetzung der einzelnen Applikationen erfolgte in einer hexagonalen Service-Architektur.
Die Leistungsbeantragung dient der Bereitstellung von Formularen für den Bürger, um eine Leistung zu beantragen. Für die Behörde wird eine Verwaltung dieser Anträge bereitgestellt, um die Vorgänge zu bearbeiten.
Ausführung
Linux (Ubuntu)
Java 14, Spring, Spring Boot
Kubernetes, Docker
REST, Jackson
Hibernate 5, Oracle DB, H2, domain-driven design, hexagonal architecture
Cloud
MinIO, MapStruct, Micrometer, Lombok, Feign, Resilience4J, Testcontainers, OpenTracing, AOP, Mockito
Junit 5, AssertJ, JSONAssert
IDE: IntelliJ 2020
Vorgehensmodell: Scrum
Tools: Maven, GitLab
VCS: git
Beschreibung
Eine existierende Plattform zum Versand von Nachrichten wird durch eine Nachrichtenagnostische Komponente aus einigen Microservices (Abonnement Dienste) mit Anwendungsfall spezifischen Ereignissen zur Generierung von Nachrichten versorgt.
Der Abonnementspeicherdienst ist für die Persistenz von unbekannten Events (im Json-Format) zuständig. Die Events werden durch die Definition eines Anwendungsfalls (Thema) im Themenverwaltungsdienst definiert und von Kafka gelesen und samt ihrer eindeutigen Themenkennung in einer PostgreSQL gespeichert. Der Abonnementverarbeitungsdienst verarbeitet zeitgesteuert die verschiedenen Themen durch Anfragen an den Abonnementspeicherdienst. Dabei reichert er die Daten mittels Anfragen an weitere Dienste an und leitet sie an die zentrale Nachrichtenplattform zum Versand weiter.
Durch die Zunahme der Anwendungsfälle ist ein erheblicher Zuwachs des Datenvolumens (etwa 250 Mio. Zeilen) zu verzeichnen wodurch die Ausführung der DB-Abfragen zunehmend langsamer wird. Nachdem alle Zugriffsoptimierungen ausgeschöpft waren, entschlossen wir uns die Daten aufzuteilen und eine multi tenancy Architektur in der Persistenzschicht einzuführen. Als tenant dient hierbei ein Thema. Da die Anzahl der Themen zunehmend wächst ist die dedizierte Zuordnung einer DB-Instanz je Thema nicht möglich. Daher wird je Thema ein eigenes DB-Schema benutzt um die Indizes für die Abfragen klein zu halten.
Die Hauptanforderung an die multi tenancy Komponente ist eine möglichst einfache Integration in den bestehenden Abonnementspeicherdienst. Dabei griff ich auf die Unterstützung von Hibernate zurück die mittels AspectJ an Annotations zur Selektion des Tenants gebunden habe. Dabei integriert sich alles weitgehend automatisch in Spring Boot.
Nach der Datenmigration zeigten erste Vergleiche der Ausführungsgeschwindigkeiten der Abfragen hierbei eine Steigerung von mindestens Faktor 10.
Ausführung
Linux (Ubuntu)
Java 8/11, Spring, Spring Boot
Amazon AWS, EC2
Docker
REST, Jackson
Hibernate 5, PostgreSQL, H2, redis, RabbitMQ (AMQP), Kafka (Nakadi)
event driven architecture, domain-driven design, hexagonal architecture
Cloud
Mockito
Junit 4/5, Hamcrest, AssertJ
IDE: IntelliJ 2018
Vorgehensmodell: Scrum
Tools: Maven, GitHub Enterprise
VCS: git
Beschreibung
Architektur und Implementierung eines Microservices zur Verwaltung von Werbekampagnen. Der Microservice ist für die Stammdaten der Kampagnen zuständig und steuert die Generierung des relevanten Kundensegments durch einen weitere Microservice. Dabei verfügt er über eine Zustandsmaschine, die die Status der einzelnen Kampagnen steuert. Die Status werden auch vom Segmentierungsservice mittels Nachrichten aktualisiert. Der Segmentierungsservice sendet hierzu bei Beginn der Aussendung der Messages relevanter Kunden an die verarbeitende Plattform und bei Beendigung der Aussendung jeweils einen Statusupdate an die Kampagnenverwaltung zur Aktualisierung des Status.
Die Microservices basieren auf Spring Boot. Die Kommunikation erfolgt über REST, AMQP sowie Kafka (gekapselt durch Nakadi).
Ausführung
Linux (Ubuntu)
Java 8/11, Spring, Spring Boot
Amazon AWS, EC2
Docker
REST, Jackson
Hibernate 5, PostgreSQL, H2, redis, RabbitMQ (AMQP), Kafka (Nakadi)
event driven architecture, domain-driven design, hexagonal architecture
Cloud
Mockito
Junit, Hamcrest, AssertJ
IDE: IntelliJ 2019
Vorgehensmodell: Scrum
Tools: Maven, GitHub Enterprise
VCS: git
Neuentwicklung eines Spring Boot basierenden Microservices zur Ermittlung Mitarbeiter bezogener Daten aus verschiedenen Backendsystemen. Die Daten werden an verschiedenen REST Endpunkten bereitgestellt. Da die Backend-systeme einen zu den REST Endpunkten abweichenden Business-Key benutzen, wird ein CSV-Dump aus einem Legacy-System bereitgestellt. Dieser wird zyklisch mittels Quartz eingelesen und als Mapping in einer PostgreSQL bereitgehalten. Die Mitarbeiterinformationen werden dann aus einer Oracle DB oder per SOAP/REST von anderen Backendsystemen ermittelt.
Neuentwicklung eines Spring Boot basierenden Microservices zum Versand von Formulardaten per eMail. Die Daten werden an einen REST Endpunkt angenommen und basierend auf diversen Regeln in unterschiedlichen Formaten an diverse Empfänger versendet. Als Template Engine wurde thymeleaf benutzt.
Architektur und Implementierung neuer Funktionen eines Online Terminvereinbarungsservice durch Spring Boot basierende Microservices. Die Kommunikation der Microservices basiert auf REST und Kafka. Daten werden in PostgreSQL gespeichert.
Architektur und Implementierung neuer Funktionen einer auf Nachrichten basierenden Kommunikationsplattform auf Basis Spring Boot. Die gesamte Plattform ist auf diverse Microservices verteilt, die mittels REST und AMQP untereinander kommunizieren. Dabei kommt ein Templatesystem zum Einsatz, das den Klienten den Versand der Nachrichten vereinfacht, da nur ein Minimum an Payload benötigt wird. Das Rendering der Nachricht geschieht innerhalb der Plattform für den jeweils relevanten Kommunikationskanal. Hier wird derzeit SMS, Push (iOS und Android), eMail, Facebook Messenger und Brief unterstützt. Alle Nachrichtenkanäle verfügen über eine Vielzahl an Kennzahlen zum Tracken der einzelnen Nachrichten.
Architektur und Implementierung neuer Funktionen sowie Bugfixing einer Spring basierenden Community Plattform. Architektur und Implementierung einer Sitelist zur Anbindung von Suchmaschinen wie Google auf Basis Spring Boot, welche in der hauseigenen Cloud läuft. Die hier benötigten Scheduling-Aufgaben wurden mit Spring implementiert. Zur Synchronisation der Instanzen wurde redis gewählt. Als client seitiger Loadbalancer diente ribbon. Servicediscovery wurde mittels consul realisiert. Logging erfolgte mittels ELK (Elasticsearch, Logstash, Kibana)
Architektur und Implementierung einer neuen Anwendung von Grund auf. Umsetzung als Microservice-Architektur auf Basis Spring Boot in einem Docker Container im AWS-Umfeld. Anbindung von Google Double Click und Metrigo für „onsite“ Werbung und „sponsored products“. Scheduling-Aufgaben wurden mittels Quartz gesteuert. Für die Übermittlung von Nachrichten wurde Amazons SQS benutzt.
Implementierung zentraler Dienste der Stammdatenverwaltung. Hierzu gehören Liegenschaften, Gebäude, Messstellen, Messinstrumente usw.
Implementierung administrativer Funktionen in ein bestehendes webbasierendes Vertragsverwaltungssystem
Modul Migration
Zur Übernahme von Vertragsbeständen aus einer fremden Bestandsverwaltung musste ein Konzept zur Migration dieser Datenstrukturen in das bestehende Bestandsverwaltungssystem erstellt werden. Dabei soll eine BPM-Engine als Rahmen dienen. Bei der Erstellung der Infrastruktur wurde hier auf RESTful Services mittels RESTEasy gesetzt. Das Modul gliedert sich in zwei Teile, wobei eines für die Transformation der Datenstrukturen in die Zielstrukturen zuständig ist und das andere die Zusteuerung ins bestehende System übernimmt.
Modul Angebotserstellung
Ziel war eine möglichst eigenständige Komponente zur Erstellung von Änderungsangeboten an bestehenden Verträgen zu realisieren. Auch sollte die Option einer neuen GUI-Technologie nicht verschlossen werden. Hierfür wurde die Geschäftslogik mittels EJB 3 umgesetzt. Für die Verbindung der Vertragskomponente (EJB 2) zur Angebotskomponente (EJB 3) wurde eine Prozessschicht in EJB 3 gewählt. Diese sorgt transaktionsgesteuert für Konsistenz in beiden Komponenten.
Modul JSF-Prototyp
Zur Abschätzung des Migratiosnaufwandes von Struts zu JSF musste ein Prototyp gebaut werden. Dieser benutzte weitestgehend die vorhandenen Beans.
Modul C/S-Trennung
Die ursprüngliche Anwendung hatte keine Client/Server-Trennung, wodurch eine gute Transaktionsbehandlung kaum möglich war. Da die GUI-Komponente jedoch direkt auf die Entitäten der Persistenzschicht aufbaute, wurde eine Transformation in ein DTO-Objekt zur Übergabe an die Beans gewählt. Serverseitig wurden diese wieder zurück in die Entitäten transformiert, womit die C/S-Trennung für eine sinnvolle Transaktionsbehandlung ermöglicht wurde.
Modul Verbesserungen beim Exception-Handling
Die Umstellung auf EJB3 eröffnete neue Möglichkeiten beim Exception-Handling. Zentrale Beans werfen nun mittels @ApplicationException annotierte Exceptions, die auch eine Wurzel-Klasse mit dem Attribut rollback=true haben. Somit ist die Transaktionsbehandlung besser möglich.
Modul Verbesserungen an der Persistenzschicht
Einheiten behafteter Größen - Geldbeträge sind in der Persistenzschicht einheitlich in Euro zu speichern, wenngleich der Zugriff auf die Klassen auch Centbeträge erlauben muss. Hierfür galt es einen flexiblen embeddable type für Hibernate umzusetzen.
Modul Komponente zur fachlichen Prüfung von Daten
Contextsensitive Daten sind sowohl am Frontend, als auch am Backend auf dieselbe Weise zu prüfen. Hierfür wurde eine Komponente geschaffen, die sich einfach sowohl als JSTL als auch in der zentralen Validierung des Systems benutzen lässt.
Einfache Möglichkeit zum Versand von Einwegnachrichten, die beim Lesen automatisch gelöscht werden. Möglichkeit für Attachment als Bild.
Machbarkeitsstudie für Social Community/Marketplace Plattform auf Basis von JBoss Seam.
Implementierung administrativer Funktionen in ein bestehendes webbasierendes Belegverwaltungssystem
Implementierung der Funktion Bankeinzug in ein bestehendes webbasierendes Bestell- und Informationssystem, welches in den Warenhäusern eingesetzt wird. Anbindung diverser Backendsysteme zur Speicherung der Bank- und Personendaten.
Komplettes Refactoring einer Legacy-Applikation. Das Projekt ist über Jahre hinweg gewachsen. Es wurde auch einem unsanften Wechsel der Programmiersprache unterzogen und von der Architektur mehrfach umgestellt. Die Spuren dieser Umstellungen und daraus resultierende Architekturvielfalt wurde bereinigt und auf eine komplett neue, verschlankte, leistungsfähige Architektur gestellt.
Erweiterungen am Formularhandling, der Suche und des Mitglieder-Suchservices.
UNIX / Sun Solaris
Oracle RDBMS 9i
PL/SQL
JavaScript, HTML, CSS
Access, Word (VBA),
IBM WAS 5
IBM WSAD 5.1
Java 2, J2EE 1.3
Servlet, JSP, Taglib, XML, XSLT
Struts
sowie Erweiterung der Suchfunktion um
das portalinterne Forum.
Ausführung: PC / WindowsUNIX / Sun Solaris
Oracle RDBMS 9i
PL/SQL
JavaScript, HTML, CSS
Access, Word (VBA),
IBM WAS 4
IBM WSAD 5.1
Java 2, J2EE 1.3
Servlet, JSP, Taglib, XML, XSLT
JUnit, Struts
Test driven development, Story-Cards, Scrum (Anlehnung)
UNIX / Sun Solaris
Oracle RDBMS 9i
PL/SQL
JavaScript, HTML, CSS
Access, Word (VBA),
IBM WAS 4
IBM WSAD 5
Java 2, J2EE 1.3
Servlet, JSP, Taglib, XML, XSLT
Struts
von Oracle Application Server (PL/SQL)
zu IBM Websphere (Java 2)
Ausführung: PC / Windows (95/NT)UNIX / Sun Solaris
Oracle RDBMS 8.1.7
Oracle Applications Server 4.0.7
PL/SQL
JavaScript, HTML, CSS
Visual Basic
Access, Word (VBA),
DAO, RDO
OLE
IBM Websphere 3.5
IBM Visual Age for Java 3.5.3
Java 2, J2EE 1.3
J2EE, Servlet, JSP, MQ-Series
Aktuelle steuerliche Themen werden zur Verfügung gestellt.
Es können Auswertungen der Berater auf Ihre Mandanten
erstellt werden.
Ausführung: PC / Windows (95/NT)UNIX / Sun Solaris
Oracle RDBMS 8.0.5
Oracle Applications Server 4.0.7
PL/SQL
JavaScript, HTML
Visual Basic
Access, Word (VBA),
DAO, RDO
Visual Basic
Access, SQL, Word (VBA),
DAO, RDO
OLE
Koordination der Softwareentwicklung
Beschreibung: Diverse Datenbanken zur Unterstützung des MobilfunknetzaufbausOracle, Access, Excel, Project
Power-Designer
Active-X, DAO, ODBC, SQL
Visual Basic, Visual C++
Microsoft SQL-Server, SQL,
Access, (dBase), DAO
HTML
Access, SQL
Erweiterung eines vorhandenen und Erstellung eines neuen Business Case
Ausführung: PC / WindowsExcel, Business Case
Analyse vorhandener DB auf AS/400,
Design neuer DB für PC
Ausführung: PC / WindowsAccess, SQL
Erweiterung eines vorhandenen Business Case in Zusammenarbeit mit Controllern.
Ausführung: PC / WindowsExcel, Business Case
IBM Communication-Manager, IBM LAN-Server
Ansteuerung von GPIB-Meßgeräten,
Auswertung in Excel.
Ausführung: PC / WindowsLabVIEW, Excel
Ansteuer-SW für eigenentwickelte Schrittmotoransteuerung,
Mess-SW für Durchflußmenge (Schrittmotor),
Auswertung in Excel.
Ausführung: PC / WindowsLabVIEW, Excel
Messung div. physikalischer Größen und Auswertung in Excel.
Ausführung: PC, Transputer / WindowsLabVIEW, C, Excel, Word
Sonstige Entwicklungswerkzeuge
Projektverwaltung/Tools
Versionskontrollsysteme
Build tools
Cloud
Komponenten/ Frameworks
CI/CD
Techniken/ Verfahren
Web-Container, EE-Server
Web Server
Technologien
Standard-Software
und Frameworks
Telekommunikation
Marktforschung
SteuernHandel
Versicherung
Energiedienstleistung
Derzeit bevorzuge ich Projekte im Raum Berlin oder full remote.
BeschreibungDas Verwaltungsportal des Bundes soll für Bürgerinnen und Bürger sowie Unternehmen einen zentralen und komfortablen Zugang zu allen Verwaltungsleistungen des Bundes ermöglichen. Über die Anbindung an den Portalverbund werden ebenfalls die Leistungen der Länder und Kommunen zugänglich sein. Dabei verfolgt das Projekt eine ganzheitliche Lösung für Bürger/innen, Unternehmen und für Behörden. Die Umsetzung der einzelnen Applikationen erfolgte in einer hexagonalen Service-Architektur. Die Vorgangsbearbeitung dient der Verwaltung und Bearbeitung von durch den Bürger übermittelter Anträge innerhalb der Behörden.
AusführungLinux (Ubuntu) Java 17, Spring, Spring Boot Kubernetes, Docker REST, Jackson Hibernate 5, Oracle DB, H2, domain-driven design, hexagonal architecture Cloud MinIO, MapStruct, Micrometer, Lombok, Feign, Resilience4J, Testcontainers, OpenTracing, AOP, Mockito Junit 5, AssertJ, JSONAssert IDE: IntelliJ 2021 Vorgehensmodell: Scrum Tools: Maven, GitLab VCS: git
Einfache Möglichkeit zum Versand von Einwegnachrichten, die beim Lesen automatisch gelöscht werden. Möglichkeit für Attachment als Bild. Bei Erstellung der Nachricht wird ein Link generiert, der dem Empfänger mitzuteilen ist. Ruft der Empfänger den Link auf, so wird die Nachricht auf dem Server gelöscht, wodurch sie nur einmalig gelesen werden kann Microservice Architektur: message store, authorization/ authentication, frontend
Features
Betrieb
Beschreibung
Das Verwaltungsportal des Bundes soll für Bürgerinnen und Bürger sowie Unternehmen einen zentralen und komfortablen Zugang zu allen Verwaltungsleistungen des Bundes ermöglichen. Über die Anbindung an den Portalverbund werden ebenfalls die Leistungen der Länder und Kommunen zugänglich sein. Dabei verfolgt das Projekt eine ganzheitliche Lösung für Bürger/innen, Unternehmen und für Behörden.
Die Umsetzung der einzelnen Applikationen erfolgte in einer hexagonalen Service-Architektur.
In diesem Umfeld ist es notwendig hochgeladene und generierte Dokumente sicher zu verwalten. Für diesen Zweck wurde ein Dokumentenservice entwickelt. Dieser nimmt Dokumente entgegen, ohne diese unmittelbar zum Download anzubieten. Erst wenn diese durch die Verwaltungssoftware als final markiert werden, können Sie mit einem Zugriffsschlüssel für eine begrenzte Zeit vom Nutzer heruntergeladen werden. Temporär hochgeladene Dokumente werden zyklisch aus dem System gelöscht.
Ausführung
Linux (Ubuntu)
Java 14, Spring, Spring Boot
Kubernetes, Docker
REST, Jackson
Hibernate 5, Oracle DB, H2, domain-driven design, hexagonal architecture
Cloud
MinIO, MapStruct, Micrometer, Lombok, Feign, Resilience4J, Testcontainers, OpenTracing, AOP, Mockito
Junit 5, AssertJ, JSONAssert
IDE: IntelliJ 2020
Vorgehensmodell: Scrum
Tools: Maven, GitLab
VCS: git
Beschreibung
Das Verwaltungsportal des Bundes soll für Bürgerinnen und Bürger sowie Unternehmen einen zentralen und komfortablen Zugang zu allen Verwaltungsleistungen des Bundes ermöglichen. Über die Anbindung an den Portalverbund werden ebenfalls die Leistungen der Länder und Kommunen zugänglich sein. Dabei verfolgt das Projekt eine ganzheitliche Lösung für Bürger/innen, Unternehmen und für Behörden.
Die Umsetzung der einzelnen Applikationen erfolgte in einer hexagonalen Service-Architektur.
Die Leistungsbeantragung dient der Bereitstellung von Formularen für den Bürger, um eine Leistung zu beantragen. Für die Behörde wird eine Verwaltung dieser Anträge bereitgestellt, um die Vorgänge zu bearbeiten.
Ausführung
Linux (Ubuntu)
Java 14, Spring, Spring Boot
Kubernetes, Docker
REST, Jackson
Hibernate 5, Oracle DB, H2, domain-driven design, hexagonal architecture
Cloud
MinIO, MapStruct, Micrometer, Lombok, Feign, Resilience4J, Testcontainers, OpenTracing, AOP, Mockito
Junit 5, AssertJ, JSONAssert
IDE: IntelliJ 2020
Vorgehensmodell: Scrum
Tools: Maven, GitLab
VCS: git
Beschreibung
Eine existierende Plattform zum Versand von Nachrichten wird durch eine Nachrichtenagnostische Komponente aus einigen Microservices (Abonnement Dienste) mit Anwendungsfall spezifischen Ereignissen zur Generierung von Nachrichten versorgt.
Der Abonnementspeicherdienst ist für die Persistenz von unbekannten Events (im Json-Format) zuständig. Die Events werden durch die Definition eines Anwendungsfalls (Thema) im Themenverwaltungsdienst definiert und von Kafka gelesen und samt ihrer eindeutigen Themenkennung in einer PostgreSQL gespeichert. Der Abonnementverarbeitungsdienst verarbeitet zeitgesteuert die verschiedenen Themen durch Anfragen an den Abonnementspeicherdienst. Dabei reichert er die Daten mittels Anfragen an weitere Dienste an und leitet sie an die zentrale Nachrichtenplattform zum Versand weiter.
Durch die Zunahme der Anwendungsfälle ist ein erheblicher Zuwachs des Datenvolumens (etwa 250 Mio. Zeilen) zu verzeichnen wodurch die Ausführung der DB-Abfragen zunehmend langsamer wird. Nachdem alle Zugriffsoptimierungen ausgeschöpft waren, entschlossen wir uns die Daten aufzuteilen und eine multi tenancy Architektur in der Persistenzschicht einzuführen. Als tenant dient hierbei ein Thema. Da die Anzahl der Themen zunehmend wächst ist die dedizierte Zuordnung einer DB-Instanz je Thema nicht möglich. Daher wird je Thema ein eigenes DB-Schema benutzt um die Indizes für die Abfragen klein zu halten.
Die Hauptanforderung an die multi tenancy Komponente ist eine möglichst einfache Integration in den bestehenden Abonnementspeicherdienst. Dabei griff ich auf die Unterstützung von Hibernate zurück die mittels AspectJ an Annotations zur Selektion des Tenants gebunden habe. Dabei integriert sich alles weitgehend automatisch in Spring Boot.
Nach der Datenmigration zeigten erste Vergleiche der Ausführungsgeschwindigkeiten der Abfragen hierbei eine Steigerung von mindestens Faktor 10.
Ausführung
Linux (Ubuntu)
Java 8/11, Spring, Spring Boot
Amazon AWS, EC2
Docker
REST, Jackson
Hibernate 5, PostgreSQL, H2, redis, RabbitMQ (AMQP), Kafka (Nakadi)
event driven architecture, domain-driven design, hexagonal architecture
Cloud
Mockito
Junit 4/5, Hamcrest, AssertJ
IDE: IntelliJ 2018
Vorgehensmodell: Scrum
Tools: Maven, GitHub Enterprise
VCS: git
Beschreibung
Architektur und Implementierung eines Microservices zur Verwaltung von Werbekampagnen. Der Microservice ist für die Stammdaten der Kampagnen zuständig und steuert die Generierung des relevanten Kundensegments durch einen weitere Microservice. Dabei verfügt er über eine Zustandsmaschine, die die Status der einzelnen Kampagnen steuert. Die Status werden auch vom Segmentierungsservice mittels Nachrichten aktualisiert. Der Segmentierungsservice sendet hierzu bei Beginn der Aussendung der Messages relevanter Kunden an die verarbeitende Plattform und bei Beendigung der Aussendung jeweils einen Statusupdate an die Kampagnenverwaltung zur Aktualisierung des Status.
Die Microservices basieren auf Spring Boot. Die Kommunikation erfolgt über REST, AMQP sowie Kafka (gekapselt durch Nakadi).
Ausführung
Linux (Ubuntu)
Java 8/11, Spring, Spring Boot
Amazon AWS, EC2
Docker
REST, Jackson
Hibernate 5, PostgreSQL, H2, redis, RabbitMQ (AMQP), Kafka (Nakadi)
event driven architecture, domain-driven design, hexagonal architecture
Cloud
Mockito
Junit, Hamcrest, AssertJ
IDE: IntelliJ 2019
Vorgehensmodell: Scrum
Tools: Maven, GitHub Enterprise
VCS: git
Neuentwicklung eines Spring Boot basierenden Microservices zur Ermittlung Mitarbeiter bezogener Daten aus verschiedenen Backendsystemen. Die Daten werden an verschiedenen REST Endpunkten bereitgestellt. Da die Backend-systeme einen zu den REST Endpunkten abweichenden Business-Key benutzen, wird ein CSV-Dump aus einem Legacy-System bereitgestellt. Dieser wird zyklisch mittels Quartz eingelesen und als Mapping in einer PostgreSQL bereitgehalten. Die Mitarbeiterinformationen werden dann aus einer Oracle DB oder per SOAP/REST von anderen Backendsystemen ermittelt.
Neuentwicklung eines Spring Boot basierenden Microservices zum Versand von Formulardaten per eMail. Die Daten werden an einen REST Endpunkt angenommen und basierend auf diversen Regeln in unterschiedlichen Formaten an diverse Empfänger versendet. Als Template Engine wurde thymeleaf benutzt.
Architektur und Implementierung neuer Funktionen eines Online Terminvereinbarungsservice durch Spring Boot basierende Microservices. Die Kommunikation der Microservices basiert auf REST und Kafka. Daten werden in PostgreSQL gespeichert.
Architektur und Implementierung neuer Funktionen einer auf Nachrichten basierenden Kommunikationsplattform auf Basis Spring Boot. Die gesamte Plattform ist auf diverse Microservices verteilt, die mittels REST und AMQP untereinander kommunizieren. Dabei kommt ein Templatesystem zum Einsatz, das den Klienten den Versand der Nachrichten vereinfacht, da nur ein Minimum an Payload benötigt wird. Das Rendering der Nachricht geschieht innerhalb der Plattform für den jeweils relevanten Kommunikationskanal. Hier wird derzeit SMS, Push (iOS und Android), eMail, Facebook Messenger und Brief unterstützt. Alle Nachrichtenkanäle verfügen über eine Vielzahl an Kennzahlen zum Tracken der einzelnen Nachrichten.
Architektur und Implementierung neuer Funktionen sowie Bugfixing einer Spring basierenden Community Plattform. Architektur und Implementierung einer Sitelist zur Anbindung von Suchmaschinen wie Google auf Basis Spring Boot, welche in der hauseigenen Cloud läuft. Die hier benötigten Scheduling-Aufgaben wurden mit Spring implementiert. Zur Synchronisation der Instanzen wurde redis gewählt. Als client seitiger Loadbalancer diente ribbon. Servicediscovery wurde mittels consul realisiert. Logging erfolgte mittels ELK (Elasticsearch, Logstash, Kibana)
Architektur und Implementierung einer neuen Anwendung von Grund auf. Umsetzung als Microservice-Architektur auf Basis Spring Boot in einem Docker Container im AWS-Umfeld. Anbindung von Google Double Click und Metrigo für „onsite“ Werbung und „sponsored products“. Scheduling-Aufgaben wurden mittels Quartz gesteuert. Für die Übermittlung von Nachrichten wurde Amazons SQS benutzt.
Implementierung zentraler Dienste der Stammdatenverwaltung. Hierzu gehören Liegenschaften, Gebäude, Messstellen, Messinstrumente usw.
Implementierung administrativer Funktionen in ein bestehendes webbasierendes Vertragsverwaltungssystem
Modul Migration
Zur Übernahme von Vertragsbeständen aus einer fremden Bestandsverwaltung musste ein Konzept zur Migration dieser Datenstrukturen in das bestehende Bestandsverwaltungssystem erstellt werden. Dabei soll eine BPM-Engine als Rahmen dienen. Bei der Erstellung der Infrastruktur wurde hier auf RESTful Services mittels RESTEasy gesetzt. Das Modul gliedert sich in zwei Teile, wobei eines für die Transformation der Datenstrukturen in die Zielstrukturen zuständig ist und das andere die Zusteuerung ins bestehende System übernimmt.
Modul Angebotserstellung
Ziel war eine möglichst eigenständige Komponente zur Erstellung von Änderungsangeboten an bestehenden Verträgen zu realisieren. Auch sollte die Option einer neuen GUI-Technologie nicht verschlossen werden. Hierfür wurde die Geschäftslogik mittels EJB 3 umgesetzt. Für die Verbindung der Vertragskomponente (EJB 2) zur Angebotskomponente (EJB 3) wurde eine Prozessschicht in EJB 3 gewählt. Diese sorgt transaktionsgesteuert für Konsistenz in beiden Komponenten.
Modul JSF-Prototyp
Zur Abschätzung des Migratiosnaufwandes von Struts zu JSF musste ein Prototyp gebaut werden. Dieser benutzte weitestgehend die vorhandenen Beans.
Modul C/S-Trennung
Die ursprüngliche Anwendung hatte keine Client/Server-Trennung, wodurch eine gute Transaktionsbehandlung kaum möglich war. Da die GUI-Komponente jedoch direkt auf die Entitäten der Persistenzschicht aufbaute, wurde eine Transformation in ein DTO-Objekt zur Übergabe an die Beans gewählt. Serverseitig wurden diese wieder zurück in die Entitäten transformiert, womit die C/S-Trennung für eine sinnvolle Transaktionsbehandlung ermöglicht wurde.
Modul Verbesserungen beim Exception-Handling
Die Umstellung auf EJB3 eröffnete neue Möglichkeiten beim Exception-Handling. Zentrale Beans werfen nun mittels @ApplicationException annotierte Exceptions, die auch eine Wurzel-Klasse mit dem Attribut rollback=true haben. Somit ist die Transaktionsbehandlung besser möglich.
Modul Verbesserungen an der Persistenzschicht
Einheiten behafteter Größen - Geldbeträge sind in der Persistenzschicht einheitlich in Euro zu speichern, wenngleich der Zugriff auf die Klassen auch Centbeträge erlauben muss. Hierfür galt es einen flexiblen embeddable type für Hibernate umzusetzen.
Modul Komponente zur fachlichen Prüfung von Daten
Contextsensitive Daten sind sowohl am Frontend, als auch am Backend auf dieselbe Weise zu prüfen. Hierfür wurde eine Komponente geschaffen, die sich einfach sowohl als JSTL als auch in der zentralen Validierung des Systems benutzen lässt.
Einfache Möglichkeit zum Versand von Einwegnachrichten, die beim Lesen automatisch gelöscht werden. Möglichkeit für Attachment als Bild.
Machbarkeitsstudie für Social Community/Marketplace Plattform auf Basis von JBoss Seam.
Implementierung administrativer Funktionen in ein bestehendes webbasierendes Belegverwaltungssystem
Implementierung der Funktion Bankeinzug in ein bestehendes webbasierendes Bestell- und Informationssystem, welches in den Warenhäusern eingesetzt wird. Anbindung diverser Backendsysteme zur Speicherung der Bank- und Personendaten.
Komplettes Refactoring einer Legacy-Applikation. Das Projekt ist über Jahre hinweg gewachsen. Es wurde auch einem unsanften Wechsel der Programmiersprache unterzogen und von der Architektur mehrfach umgestellt. Die Spuren dieser Umstellungen und daraus resultierende Architekturvielfalt wurde bereinigt und auf eine komplett neue, verschlankte, leistungsfähige Architektur gestellt.
Erweiterungen am Formularhandling, der Suche und des Mitglieder-Suchservices.
UNIX / Sun Solaris
Oracle RDBMS 9i
PL/SQL
JavaScript, HTML, CSS
Access, Word (VBA),
IBM WAS 5
IBM WSAD 5.1
Java 2, J2EE 1.3
Servlet, JSP, Taglib, XML, XSLT
Struts
sowie Erweiterung der Suchfunktion um
das portalinterne Forum.
Ausführung: PC / WindowsUNIX / Sun Solaris
Oracle RDBMS 9i
PL/SQL
JavaScript, HTML, CSS
Access, Word (VBA),
IBM WAS 4
IBM WSAD 5.1
Java 2, J2EE 1.3
Servlet, JSP, Taglib, XML, XSLT
JUnit, Struts
Test driven development, Story-Cards, Scrum (Anlehnung)
UNIX / Sun Solaris
Oracle RDBMS 9i
PL/SQL
JavaScript, HTML, CSS
Access, Word (VBA),
IBM WAS 4
IBM WSAD 5
Java 2, J2EE 1.3
Servlet, JSP, Taglib, XML, XSLT
Struts
von Oracle Application Server (PL/SQL)
zu IBM Websphere (Java 2)
Ausführung: PC / Windows (95/NT)UNIX / Sun Solaris
Oracle RDBMS 8.1.7
Oracle Applications Server 4.0.7
PL/SQL
JavaScript, HTML, CSS
Visual Basic
Access, Word (VBA),
DAO, RDO
OLE
IBM Websphere 3.5
IBM Visual Age for Java 3.5.3
Java 2, J2EE 1.3
J2EE, Servlet, JSP, MQ-Series
Aktuelle steuerliche Themen werden zur Verfügung gestellt.
Es können Auswertungen der Berater auf Ihre Mandanten
erstellt werden.
Ausführung: PC / Windows (95/NT)UNIX / Sun Solaris
Oracle RDBMS 8.0.5
Oracle Applications Server 4.0.7
PL/SQL
JavaScript, HTML
Visual Basic
Access, Word (VBA),
DAO, RDO
Visual Basic
Access, SQL, Word (VBA),
DAO, RDO
OLE
Koordination der Softwareentwicklung
Beschreibung: Diverse Datenbanken zur Unterstützung des MobilfunknetzaufbausOracle, Access, Excel, Project
Power-Designer
Active-X, DAO, ODBC, SQL
Visual Basic, Visual C++
Microsoft SQL-Server, SQL,
Access, (dBase), DAO
HTML
Access, SQL
Erweiterung eines vorhandenen und Erstellung eines neuen Business Case
Ausführung: PC / WindowsExcel, Business Case
Analyse vorhandener DB auf AS/400,
Design neuer DB für PC
Ausführung: PC / WindowsAccess, SQL
Erweiterung eines vorhandenen Business Case in Zusammenarbeit mit Controllern.
Ausführung: PC / WindowsExcel, Business Case
IBM Communication-Manager, IBM LAN-Server
Ansteuerung von GPIB-Meßgeräten,
Auswertung in Excel.
Ausführung: PC / WindowsLabVIEW, Excel
Ansteuer-SW für eigenentwickelte Schrittmotoransteuerung,
Mess-SW für Durchflußmenge (Schrittmotor),
Auswertung in Excel.
Ausführung: PC / WindowsLabVIEW, Excel
Messung div. physikalischer Größen und Auswertung in Excel.
Ausführung: PC, Transputer / WindowsLabVIEW, C, Excel, Word
Sonstige Entwicklungswerkzeuge
Projektverwaltung/Tools
Versionskontrollsysteme
Build tools
Cloud
Komponenten/ Frameworks
CI/CD
Techniken/ Verfahren
Web-Container, EE-Server
Web Server
Technologien
Standard-Software
und Frameworks
Telekommunikation
Marktforschung
SteuernHandel
Versicherung
Energiedienstleistung
Direktester geht's nicht! Ganz einfach Freelancer finden und direkt Kontakt aufnehmen.
"Der Consultant war in der Entwicklung zum Portalsystem unserer Firma tätig. Schwerpunkte dabei waren die Entwicklung von Anwendungen (z.B. Suchservice in einer Datenbank) und Portalsuche. Er verfügt über exzellente Java/J2EE und Oracle-Kenntnisse. Weitere erforderliche Kenntnisse waren HTML/Javascript, DB2, Entwicklungsumgebung IBM RAD/Websphere. Mit seiner sehr selbstständigen und verantwortungsvollen Vorgehensweise übernahm der Consultant die komplette Projektbetreuung von der Konzeptphase bis zur Produktivschaltung der Lösung. Er behielt auch in kritischen Phasen den Überblick und führte die übertragenen Projekte mit überdurchschnittlichem Engagement zum Erfolg. Dieses in Verbindung mit seinem freundlichen Auftreten macht die Zusammenarbeit sehr angenehm. Bei Bedarf würde ich jederzeit gerne wieder auf seine Unterstützung zurückgreifen."
— Projekt Portal, 01/03 - 03/07
Referenz durch Teamleiter, Softwarehaus (5.000 MA), vom 06.06.08
"Internet-Entwicklung mit PL/SQL, ANSI-C, JAVA, JavaScript, JSP, Oracle DB, Oracle Application Server, Webshpere Application Server: Der Consultant verfügt über ein profundes Wissen in JAVA, JavaScript, PL/SQL, Oracle und IT-Infrastrukturen. Er hat umfassende Kenntnisse aus allen Bereichen des Internets. Er hat das Projekt in allen Phasen von der Spezifikation über die Entwicklungs- und Testphase bis hin zur Inbetriebnahme begleitet. Er hat zudem maßgeblich die Migration des Systems vom Oracle Application Server auf den Webshpere Application Server begleitet. Neben seiner fachlichen Qualifiaktion ist sein besonderes Engagement hervorzuheben. Er identifiziert sich zu 100% mit dem Projekt und hat maßgeblich zum Projekterfolg beigetragen. An dieser Stelle möchte ich mich für die Unterstützung und äußerst kollegiale Zusammenarbeit bedanken. Ich würde mich freuen, wieder in einem Projekt mit ihm zusammenarbeiten zu können."
— Projekt PL/SQL, ANSI-C, JAVA, JavaScript, JSP, Oracle DB, u.a., 01/00 - 12/02
Referenz durch Gruppenleiter eines großen Softwarehauses (ca. 5.000 MA) vom 03.05.02