2 Stimmen

OSGi und die Modularität der Persistenz: Die Wirkung von Beziehungen

Die meisten Fragen, die sich um den Titel dieses Beitrags drehen, betreffen die Ausführung von Hibernate oder einer anderen Zugriffsschicht in einem OSGi-Container. Oder sie fragen danach, wie man die Datenquelle in einem OSGi-Container zum Laufen bringt.

Meine Fragen betreffen die Auswirkungen der OSGi-Modularität auf die Struktur der Datenbank selbst. Genauer gesagt:

  1. Wie kann man die Struktur einer Datenbank selbst modular gestalten, so dass wenn wir ein Modul laden - z.B. Kontaktmanagement - wird das Schema aktualisiert wird, um Tabellen aufzunehmen, die speziell mit diesem Modul verbunden sind?
  2. Wie wirkt sich der vorgenannte Ansatz auf die Beziehungen aus?

Ich denke, die zweite Frage ist die interessantere. Nehmen wir an, dass Kontaktmanagement und Projektmanagement zwei verschiedene OSGi-Module sind. Jedes hätte seinen eigenen Satz von Tabellen im Schema. Was aber, wenn wir auf der Datenbankebene modulübergreifende Beziehungen zwischen zwei oder mehr Tabellen herstellen müssen? Vielleicht möchten wir eine Liste der Projekte sehen, an denen ein bestimmter Kontakt arbeitet oder gearbeitet hat.

Jede Lösung scheint dazu zu führen, dass die verschiedenen Module zu viel übereinander wissen müssen. Wir könnten in die Projektmanagement-Spezifikation schreiben, dass dieses Modul eine Quelle für Kontakte erwartet, und diese Erwartung dann durch Dienste, Schnittstellen, pub-sub usw. abstrahieren. Es scheint jedoch eine Menge Arbeit zu sein, eine fest verdrahtete Beziehung zwischen den zugrunde liegenden Tabellen der beiden Module zu vermeiden.

Was nützt es, oben und in der Mitte modular zu sein, wenn wir diese Modularität zwangsläufig durch Beziehungen zwischen Tabellen unten aufbrechen müssen? Sind Denormalisierung und ein Servicebus wirklich eine gesunde Lösung?

Haben Sie eine Idee?

Ich danke Ihnen.

1voto

Mohammad Salehe Punkte 350

Zur ersten Frage, LiquiBase verwendet werden kann. Sie können Changesets bei der Aktivierung und Deaktivierung von Bundles aktualisieren und zurücksetzen.

Was die zweite Frage betrifft, so denke ich, dass dies etwas ist, das bei der Gestaltung Ihrer Architektur berücksichtigt werden sollte. Es gibt keine Hilfe von irgendeinem Tool. Wenn das PM-Modul vom CM-Modul abhängt, kann das PM-Modul davon ausgehen, dass CM-Tabellen vorhanden sind und Fremdbeziehungen zu ihnen herstellen, aber nicht in umgekehrter Richtung. Sie sollten in Ihrer Architektur deutlich machen, welche Module von welchen Modulen abhängen, um Abhängigkeitszyklen zu vermeiden.

1voto

Balazs Zsoldos Punkte 5896

Nach 5 Jahren JPA habe ich beschlossen, es zu verlassen, und nach monatelanger Recherche fand ich die Kombination Querydsl+Liquibase am besten.

Ich habe viel an der Entwicklung von OSGi-Hilfskomponenten und einem Maven-Plugin gearbeitet. Die Funktionalität des Maven-Plugins (Codegenerierung) kann leicht in andere Build-Tools integriert werden, da das Maven-Plugin nur ein Wrapper um eine eigenständige Bibliothek ist.

Einen ausführlichen Artikel über die Lösung finden Sie hier: http://bzsoldos.wordpress.com/2014/06/18/modularized-persistence/

0voto

Daniel Yokomizo Punkte 168

In einer solchen Situation ist es wichtig zu bewerten, wie unabhängig diese Module/Kontexte sind. In DDD-Begriffen scheinen diese beiden unabhängige begrenzte Kontexte zu sein, so dass ein Kontakt im pm-Modul eine andere Entität (und auch eine andere Klasse) ist als ein Kontakt im cm-Modul. Wenn man diese Unterscheidung beibehält, hat man eine gewisse Denormalisierung in Bezug auf die Kontaktentität (z.B. kopiert man die ID und den Namen des Kontakts, wenn man ihn zu einem Projekt hinzufügt, spätere Änderungen am Kontakt im cm-Modul erfordern eine Pubsub, um die Konsistenz zu wahren), aber jedes Modul ist sehr unabhängig. Ich würde die Benutzeroberfläche als separates Modul beibehalten, das von beiden abhängt und den notwendigen "Glue" (d.h. die Übergabe der IDs und der erforderlichen Informationen zwischen ihnen) bereitstellt.

0voto

andbi Punkte 4314

Vielleicht habe ich die Frage falsch verstanden, aber meiner Meinung nach hat die OSGI-Modularität absolut keinen Einfluss auf die Datenbankstruktur. Es handelt sich um eine Datenspeicherebene, die natürlich modular sein kann, aber aus ganz eigenen Gründen - Leistung, Datenvolumen, Last usw. und mit ganz eigenen Lösungen - Clustern, Olap, Partitionierung und Replikation.

Wenn Sie Datenintegrität zwischen cm und pm benötigen, sollte diese durch Mittel gewährleistet werden, die ursprünglich für diese Art von Aufgabe entwickelt wurden - RDBMS. Wenn Sie Software-Modularität benötigen, wählen Sie eine OSGI-Lösung und Ihre Module kommunizieren auf einer viel höheren logischen/geschäftlichen Ebene. Es kann ihnen völlig gleichgültig sein, wie die Persistenz bereitgestellt wird - als einfache Textdatei oder als Oracle RAC-Cluster mit 100 Knoten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X