# modulare Java-Anwendung verteilen (Camel)



## Elrond (22. Jul 2022)

Hallo Zusammen,


ich stehe gerade vor einem Problem das ich nicht ganz knackig beschreiben kann und entsprechend nicht weiß welche Lösungen möglich und sinnvoll sind.
Ich versuch es mal:

Ich habe eine Anwendung für Integrationsaufgaben geschrieben, die aus einzelnen Modulen besteht, dabei ist ein Modul jetzt nur eine jar/maven modul mit der benötigten Logik. Im Kern gibt es ein Core Modul das sich jedes Modul einbindet, mit Maven sagt man welche Module benötigt werden und fertig. Das ganze basiert von der Architektur vollständig auf Camel + SpringBoot. Das bedeutet das Core Modul lädt einen CamelContext und der ist abhängig von den weiteren Modulen. Modul Webservice A liefert ein RouteContext der eingebunden wird.

Jetzt kommt eigentlich das Hauptproblem: die Auslieferungen müssen händisch zusammengestrickt werden, das bedeutet, wenn jetzt von 10 Modulen nur 2 ausgeliefert werden, muss der Context so angepasst werden das nur 2 eingebunden werden. Theoretisch müsste man alle Kombinationen als Konfiguration/Context vorhalten....

Das Problem war von Anfang an abzusehen und die Lösung sah aus Apache Karaf zu verwendet. Die Module werden schlicht alle einzeln Erzeugt und die Pakete werden einfach ins Karaf fallen gelassen. Theoretisch war das eigentlich schon die Lösung, nur hatte ich mit Karaf mehr Probleme als gedacht. Jedes Paket musste als Bundle bereitstehen, gleichzeitigt hatten externe Pakete regelmäßig eine fehlerhafte Konfiguration, immer wieder kam es vor das die unterstützen Version von Abhängigkeiten nicht gestimmt haben und viel Zeit in der Fehlersuche verging. Externe Bibliotheken ohne Karaf Unterstützung mussten mühselig als Bundle angepasst werden und das mit jeder neuen Version. Karaf selbst lief auch nicht immer Rund und es war schwer rauszufinden warum beim Kunden A alles geht und beim Kunden B es nicht mal startet. Da über ein Jahr lang eigentlich nur ein Modul überhaupt eine Rolle spielte und alle weiteren kleine Insellösungen waren, habe ich das Karaf eingestellt, das war so vor 4 Jahren.

Anfang des Jahres erhielt die Anwendung einen enormen Schub und das wofür es gedacht wurde rückte wieder in den Vordergrund. Die Anzahl an Modulen nahm stark zu, der Kundenstamm ist gewachsen und die Auslieferungen werden immer unübersichtlicher. Ziel wäre eine einzige Auslieferung zu haben die nur noch konfiguriert wird. Alle Module zusammen zu packen ist leider keine Lösung, weil die Abhängigkeiten sich überschneiden mit unterschiedlichen Versionen.

Welche Möglichkeiten habe ich jetzt?

Mit Karaf erneut anfangen?

Jedes Modul als Dockercontainer ausliefern (kommt nur in Frage wenn der Kunde sich darum nicht kümmern muss, sprich nicht erst ein Dockersystem installieren muss)?


Danke für eure Anregungen


----------

