0

OFBiz Mandantenfähigkeit (Multi Tenancy)

Geschrieben am 13.07.2012 in Technik von Sebastian Leitner

Seit der Revision 927271 aus dem März 2010 ist OFBiz mandanten-fähig. „Mandantenfähigkeit“ heißt bei OFBiz „Multi Tenancy“ und bedeutet eine scharfe Trennung der Mandanten auf Datenbank-Basis. Technisch bedeutet dies, dass es eine Datenbank gibt, in der die Benutzer und die Zuordnung der Nutzer zu dem Mandant gespeichert sind und außerdem für jeden Mandanten eine komplett eigenständige Datenbank geführt wird. Die Applikation ist jeweils identisch und wird lediglich durch die unterschiedlichen Daten anders gesteuert. Im folgenden Artikel möchten wir erklären, wie ein Multi-Mandanten-System (Multi Tenant) technisch aufzusetzen ist und wie es gewartet werden kann. Am Ende werden wir ein kurzes Fazit ziehen und aufzeigen, wann Multi Tenant genutzt werden sollte und wann man über eine andere Lösung nachdenken könnte. Als Basis für dieses Beispiel dient ein OFBiz-Stand von Ende Mai 2012, eine lokal installierte MySQL-Datenbank sowie die Tenant-Demo-Daten, die im Trunk des OFBiz-Projekts mitgeliefert werden.

Eine Datenbank für jeden Mandanten

Test Daten

Die Konfiguration der Mandanten-Datenbank findet sich in der TenantDataSouces-Entität, nicht wie üblich in der entityengine.xml. Beim Login in das Mandantensystem wird über die Basis-Datenbank die Mandanten-Datenbank ermittelt und eine Verbindung aufgebaut. Vorher sollten die Verbindungsparamter wie folgt definiert werden: (siehe OFBIZ-HOME/framework/entity/data/TenantDemoData.xml):

TenantDataSource tenantId="DEMO1" entityGroupName="org.ofbiz" jdbcUri="jdbc:mysql://localhost:3306/ofbiz_DEMO1" jdbcUsername="demo1_root" jdbcPassword="ofbiz"

Parallel wird in der MySQL Datenbank die Tabelle ofbiz_DEMO1 angelegt und der User demo1_root erhält die nötigten Rechte auf die neue Entität an. Analog dazu muss eine Datenbank für den Mandanten DEMO2 erstellt und die Konfiguration angepasst werden.

ofbiz-component.xml

Sollte eine eigene Konfigurationsdatei erstellt worden sein, muss diese der ofbiz-component.xml (OFBIZ-HOME/framework/entity/ofbiz-component.xml) hinzugefügt werden. Anschließend können die OFBiz Daten in folgender Reihenfolge geladen werden:

$ java -Xmx512m -XX:MaxPermSize=128m -jar ofbiz.jar -install -readers=seed -delegator=default $ java -Xmx512m -XX:MaxPermSize=128m -jar ofbiz.jar -install -readers=seed-initial -delegator=default $ java -Xmx512m -XX:MaxPermSize=128m -jar ofbiz.jar -install -readers=ext -delegator=default

Achtung: Die Tenant-Daten sollten nicht mit seed oder seed-initial, sondern lieber im ext-Level geladen werden, da die seed/seed-inital Daten in alle Mandanten-Datenbanken gespeichert werden, die Verbindungsinformationen aber nur in der OFBiz Basis Datenbank stehen sollten.

entityengine.xml

In der entityengine.xml muss noch die datasource reference im Delegator definiert werden:

 <delegator name="default" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main" distributed-cache-clear-enabled="false">; (...) <group-map group-name="org.ofbiz.tenant" datasource-name="localpostnewtenants"/>; (...) </delegator>

Laden der Mandanten Daten

Der Ant Task load-demo-multitenant läd die Mandaten Daten. Zum initialisieren der Datenbank der einzelnen Mandanten müssen folgende Kommandos ausgeführt werden:

$ java \-Xmx512m \-XX:MaxPermSize=128m \-jar ofbiz.jar \-install \-readers=seed \-delegator=default $ java \-Xmx512m \-XX:MaxPermSize=128m \-jar ofbiz.jar \-install \-readers=seed \-delegator=default#DEMO1 $ java \-Xmx512m \-XX:MaxPermSize=128m \-jar ofbiz.jar \-install \-readers=seed \-delegator=default#DEMO2

Entity Reader pro Mandanten

Um Mandanten-spezifische Daten nicht in jeder Mandanten Datenbank zu speichern kann es sinnvoll sein, einen speziellen Reader pro Mandant zu definieren. Damit wird sichergestellt, dass es keine Vermischung der Ladedaten gibt. Die Reader können in der entityengine.xml definiert und in der ofbiz-component.xml aktiviert werden.

Login für Mandanten aktivieren

Die die Mandanten-Auswahl im Login-Fenster lässt sich mit der Option multitenant in der Datei OFBIZ-HOME/framework/common/config/general.propertieseinschalten, indem diese auf Y gesetzt wird. Damit ist eine mandantenfähige OFBiz Instanz mit zwei Demo Mandanten aufgesetzt und kann genutzt werden.

Fazit: Wann ist Multi-Tenant sinnvoll?

Bei Multi-Tenant Installationen werden die Daten der Mandanten auf Datenbank-Ebene voneinander getrennt. Es ist also ausgeschlossen, dass die Nutzer Daten von Mandanten einsehen können, denen sie nicht zugeordnet sind. Es gibt Szenarien, in denen dies gewünscht und vielleicht sogar gesetzlich vorgeschrieben ist. Nehmen wir als Beispiel ein Unternehmen, dass verschiedene Tochter-Unternehmen hat und Personal-Daten (HR) mit OFBiz verwaltet. Ein weiteres Beispiel wäre, wenn ein E-Commerce-Unternehmen mehrere Shops vertreibt, die jeweils komplett unabhängig voneinander agieren und jeweils riesige Sortimente und Datenmengen haben. Durch die getrennten Datenbanken müssen für jede Suchanfrage weniger Daten durchsucht werden, es kann ein Performance-Vorteil entstehen. Betreibt aber ein E-Commerce-Unternehmen gleichartige Shops oder sogar sog. White-Label Systeme, die ein identisches oder ähnliches Sortiment anbietet, würde eine Multi Tenant Installation massive Redundanz bedeuten, was zu erhöhtem Pflegeaufwand führt. Hier macht es unter Umständen Sinn, die einzelnen Nutzer der Stores auf einer Datenbank arbeiten zu lassen und die Trennung der Daten durch Rechte-Verwaltung zu realisieren. So kann man bspw. die Artikeldaten und den Katalog in allen Stores nutzen. Es zeigt sich, dass es also mehrere Möglichkeiten gibt, eine Mandanten-Fähigkeit zu realisieren und dass man anhand seiner Anforderungen abwägen sollte, welche im konkreten Fall die bessere Möglichkeit ist.

Lesen Sie weiter:

Weitere Überlegungen zum Einsatz von OFBiz im Unternehmen haben wir bei den Nicht-funktionalen Anforderungen zusammen getragen.

Dieser Artikel gefällt Ihnen? Sagen Sie's Ihren Freunden:

Hinterlassen Sie eine Antwort





*