# mediation - konzept.



## SBehnen27 (2. Jun 2008)

hi gemeinde.

ich stehe grade in den startlöchern, um ein konzept für ein Projekt zu erstellen. 

folgendes soll gebaut werden:

ein vermittler zwischen n content-management-systemen und einem werkzeug. der vermittler reicht die suchanfragen des werkzeugs an die CMS weiter, homogenisiert die antwortdaten und reicht diese an das werkzeug durch.
ich habe mir gedacht, ich baue einen mediator und entsprechende wrapperklassen, um die systeme anzubinden.

jetzt stehe ich vor der grundsätzlichen frage, wie ich die verteilung mache.
beispielszenario:

-anfrage nach daten zum thema "x"
-weiterreichen der anfrage an jedes angebundene system.
-empfangen der antworten.
-überführen der daten in ein einheitliches format

jetzt kommt der knackpunkt:
-die daten werden ggf. im werkzeug verändert. diese veränderten daten sollen wieder in die CMS gelangen.
-wie bekomme ich die daten wieder ins richtige system zurück?

hier die erste frage: wie konfiguriere ich am besten, welches system angebunden ist? Es könnte sich ja mal die IP ändern... xml?

Es geht hier nicht darum, eine lösung vorgesetzt zu bekommen. ich brauche nur anregungen und denkanstöße.
für selbige bin ich dankbar!


----------



## Niki (2. Jun 2008)

Ich finde das wäre eine schöne Lösung mit WebServices. Jedes CMS bietet ein WebService zum Abfragen und zum Ändern von Daten an. Dadurch muss bereits das CMS die Daten im richtigen Format liefern. Dein Werkzeug interessiert nicht woher die Daten kommen. Es hat nur irgendwo konfiguriert welche CMS es gibt und weiß die dazugehörigen WS-Endpoint Adressen.
Wenn man die Möglichkeit hat die CMS mit WebServices zu erweitern würde ich es auf jeden Fall so machen. Genau für solche Sachen sind meiner Meinung nach WebServices da.


----------



## SBehnen27 (2. Jun 2008)

jo. so weit schon richtig. bisher haben alle CMS einen webservice angeboten, der als schnittstelle dient. dennoch gibt es kein einheitlichzes format zwischen verschiedenen systemen (z.b. Reddot und fiona). Dementsprechend muss in ein einheitliches format umgebaut werden. die wrapper, so ist es geplant, implementieren die schnittstellen zu den webservices und bieten in richtung des mediators eine einheitliche sicht auf die CMS. 
wie genau ich diese mediation mit den verschiedenen CMS (die anzahl kann ja variieren und soll eigentlich nicht hardcoded sein) mache, weiss ich noch nicht.

"verschiedene cms" sei erklärt: 
es wird für einige CMS / DMS / PIM / ECM / ... wrapperklöassen geben. d.h. das system kann standardmässig mit allen diesen systemen umgehen. in einem szenario _könnte_ das system mit 20 CMS reden. benötigt werden jedoch nur 2. also kommt eine configuration ins spiel, die den zugriff auf diese systeme regelt.


----------



## SBehnen27 (2. Jun 2008)

nach einigen überlegungen habe ich nun doch eine konkrete frage:
es geht um die XML-konfigurationsdateien.

hier würde ich gerne den namen des CMS, den klassenpfad des wrappers und informationen wie serverIP usw. halten.

hiervon verspreche ich mir, dass das jar file, welches den mediator enthält löosgelöst von den wrappern arbeitet und einfach instanzen derjenigen wrapper erstellt, die in der xml datei konfiguriert sind.

wie behandle ich sowas auf java-seite (also das laden der xml datei bzw. den klassen, die dort angegeben sind)?


----------



## Niki (2. Jun 2008)

für die XML Datei kannst du ein BindingFramework verwenden wie z.B XMLBeans, JAXB,...
Dafür musst du zunächst einmal ein XML Schema erzeugen. Du kannst die Forensuche verwenden und nach XMLBeans suchen. Ich hab zu dem Thema mal ein Tutorial erstellt.

Die XML-Datei könnte dann ca. so aussehen:

```
<cmsConfig>
  <cms id="cms1">
    <ip></ip>
    <wrapperKlasse></wrapperKlasse>
  </cms>
</cmdConfig>
```

Die WrapperKlasse sollte dann natürlich ein Interface implementieren. Der Aufruf geht dann so:


```
String wrapperClassName = //Hier aus XMLBeans die Info holen
Class wrapperClass = Class.forName(wrapperClassName);
Object tmp = wrapperClass.newInstance();
if(tmp instanceof CMSWrapper){
  CMSWrapper wrapper = (CMSWrapper)tmp;
  //mit wrapper arbeiten...
}
```


----------



## SBehnen27 (2. Jun 2008)

grandios. kurz und knapp. und vor allem genau das, was mir hilft. danke dir!


----------

