2013-03-28 14 views
6

Wir müssen viele Java-Web-basierte Anwendungen (für das gleiche Unternehmen) unterschiedlicher Größen, Bereiche und Lebensdauer entwickeln und warten. Einige von ihnen sind riesig und andere sind nur einfache Seiten, die nur wenige Monate (oder Tage) leben können, einige sind bereits implementiert und müssen refactoring werden.So teilen Sie Geschäftslogik zwischen mehreren Anwendungen

Eines haben sie jedoch gemeinsam: Sie benötigen Zugang zu (fast) den gleichen Informationen.

Problem

Aufgrund der Komplexität der Daten das Unternehmen übernimmt, müssen wir mit vielen verschiedenen Quellen behandeln, von denen einige von den alten Zeiten geerbt. Unsere Domänenobjekte können über viele dieser Quellen hinweg zugeordnet werden. Beispielsweise wird ein Vertragsdomänenobjekt unserer Hauptdatenbank zugeordnet, aber die zugehörigen (physischen) Dateien werden auf einem Dokumentenserver gespeichert, und die zugehörige Aktivität wird in einer NoSQL-Datenbank gespeichert. Das Hinzufügen, Entfernen oder Durchsuchen eines dieser Objekte erfordert daher viele interne Vorgänge.

Unsere Datenquellen sind (obwohl es jeder sein könnte):

  • AS400 (unter Verwendung von DB2 als Datenbank)
  • Documentum Document Manager
  • Mongo DB
  • Externe Web-Services
  • Andere Legacy-Quellen

Wir verwenden normalerweise Glas sfish als Anwendungsserver und Maven als unser Build-Tool.

Tor

Unser Ziel ist es, eine Business-Schicht oder eine Bibliothek, die alle unsere Anwendungen zugreifen können zu erstellen, und es ist:

  • Compact
  • Consistant
  • Leicht
  • verwenden
  • Pflegeleicht
  • Erreichbar vom Menschen y verschiedene Kunden

Was wir bisher

Wir Wochen und noch können wir nichts völlig zufriedenstellend gefunden haben gekämpft haben, finden. Einige Lösungen:

  • -Pack alle Business-Logik in einem oder mehreren Gläsern: Sehr einfach zu teilen, aber allen Anwendungen müssen alle jar Abhängigkeiten und Konfigurationsdateien enthalten und sorgen für Sicherheit, Caching und andere Sachen. Schwierig zu warten (wir müssen die Jars für jedes Projekt aktualisieren, wenn Änderungen vorgenommen werden).

  • Erstellen Sie ein Ejb-Projekt, das die gesamte Logik enthält, und greifen Sie darauf remote zu: Einfache Wartung, Sicherheit, Caching und Konfiguration werden nur einmal implementiert. Wir haben Angst vor der Strafe der Remote-Anrufe. Wie wir in unseren Untersuchungen festgestellt haben, scheint es eine schlechte Übung zu sein (wir haben nicht viel Erfahrung mit ejbs).

  • Erstellen Sie ein Ear-Projekt mit allem drinnen und verwenden Sie lokalen Zugriff: Nun, das ist schneller als die Remote-Version, aber es ist eine Hölle zu pflegen.

  • Gehen Sie für OSGI: Wir haben ein bisschen Angst vor diesem, da es nicht so populär wie Ejb ist und wir es nie ernsthaft benutzt haben.

Gibt es eine übliche Praxis für diese Art von Problem?

Vielen Dank!

+0

Seit einiger Zeit habe ich einige EJB. Können Sie erklären, warum Sie eine separate BL benötigen? Verwenden Sie für die Datenseite DAO-Muster? Wäre es möglich, durch diese auf mehrere Quellen zu mappen? Es sollte möglich sein, mehrere Datenquellen zu verwalten. –

+0

Danke für die superschnelle Antwort! Das ist eigentlich die Hauptidee. Wir wollen DAOs verwenden, um all die schmutzigen Sachen einzukapseln. Das Problem besteht darin, wie Sie von den Client-Anwendungen auf diese DAOs zugreifen können. – danielsan

+0

Ich würde einen osgi-Ansatz empfehlen, wenn Sie eine komplett neue App erstellen. Aber ich würde es nicht empfehlen, wenn Sie planen, viele Sachen zu portieren und wenn das Team neu für osgi ist. – techuser

Antwort

2

Ich würde nicht empfehlen, alle Logik in 1 EAR-Projekt zu setzen und lokalen Zugriff zu verwenden. Wenn Sie viel Code an einem Ort haben, wird es schwieriger zu warten, zu testen, zu implementieren usw.

Ich würde Multilti-Modul Maven-Projekt mit gemeinsamen Abhängigkeiten erstellen. Eine der Abhängigkeiten - Service mit Business-Logik und DAO-Zugriff, die API verfügbar macht. Mit Maven Project können Sie die Version der POM-Dateien einfach steuern. Verschiedene Projekte können mit einer anderen Version des gemeinsamen Dienstes arbeiten. Maven wird die Versionskontrolle für Sie übernehmen. Es erfordert jedoch einige Konfigurations- und Implementierungsbemühungen.

Eine andere von Ihnen erwähnte Option - eigenständige EAR mit Remote-EJBs sollte auch gut funktionieren. Machen Sie sich keine Sorgen über die Leistung und die Anzahl der Remote-Anrufe, es sei denn, Sie haben eine schwere Last. Speichern Sie einfach entfernte EJB-Stubs auf dem Client, um eine unnötige JNDI-Suche zu vermeiden.

Persönlich bevorzuge ich erste Option mit gemeinsamen Abhängigkeit verwaltet von Maven. Es ist klar und einfach zu pflegen, einfach zu verwalten, zu implementieren, zu konfigurieren. Mit Maven müssen Sie die JAR-Datei nicht manuell für jedes Projekt ändern, Sie können einfach Tools wie Nexus verwenden

+0

Danke Anton. Bis jetzt haben wir ein Multi-Modul Maven-Projekt, bestehend aus 6 Modulen (alle Geschäftslogik und Domain-Objekte). Ich verstehe, dass Sie meinen, wir könnten jede der Client-Anwendungen als ein weiteres unabhängiges Maven-Projekt haben und die Business API als Abhängigkeit bezeichnen, habe ich recht? In diesem Fall bedeutet dies, dass wir mit jeder Client-Anwendung eine Business-API bereitstellen würden. In diesem Fall müssten wir verschiedene Anwendungsserver verwenden. – danielsan

+0

Ja, wenn Sie Ihre Geschäftslogik extrahieren, um Maven-Projekt zu trennen, können Sie alle Ihre Anwendungen als Abhängigkeit hinzufügen. In diesem Fall können Sie verschiedene Anwendungsserver verwenden, wenn Sie möchten – Anton

Verwandte Themen