# XML-RPC



## max5432 (12. Dez 2008)

Hallo

Ich möchte mit Apache XML-RPC einen multiclientfähigen Server erstellen. Kann man dies mit XML-RPC machen, oder wird für jeden Client eine neue Server-Instanz (Diensterbringer) erzeugt? 

Danke.


----------



## foobar (13. Dez 2008)

Was meinst du mit multiclientfähig? Was genau willste denn machen?


----------



## max5432 (13. Dez 2008)

Ich möchte mehrere Clients bedienen können. Ich war der Meinung, dass der Diensterbringer nur ein einziges Mal erzeugt wird. Jedoch stelle ich fest, dass der Konstruktor der Klasse, die den Dienst erbringt, bei jeder Anfrage neu abearbeitet wird. Heisst, bei jeder Anfrage wird diese Klasse neu instanziert. 

Dies ist mir deshalb aufgefallen, weill ich eine Instanzvariable (eine ArrayList) in der Klasse hatte, in der ich bestimmte Daten verwaltet habe. Als ich auf diese Liste schon bei der zweiten Anfrage zugegriffen habe, habe ich zu meiner Überaschung festgestellt, dass die Liste leer ist, obwoho ich beim ersten Zugriff ein Objekt in die Liste eingefügt habe: sie wurde neu erzeugt. 

Also: wird der Diensterbringer wirklich bei jeder Anfrage neu erzeugt wird?

Hier der Auszug aus meinem Code:



```
// webServer erzeugen
WebServer webServer = new WebServer(portNummer);

// Den XmlRpcServer (Diensterbringer) vom webServer holen
XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();

// Config-Instanz holen
XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();

// Erweiterungen zulassen
serverConfig.setEnabledForExtensions(true);

// Das PropertyHandlerMapping-Objekt erzeugen
PropertyHandlerMapping pHandlerMapping = new PropertyHandlerMapping();

// Den Handler dem pHandlerMapping hinzufügen(Name: diensterbringer)
pHandlerMapping.addHandler("diensterbringer", Diensterbringer.class); /* Erzeugen des Diensterbringers */

xmlRpcServer.setHandlerMapping(pHandlerMapping);

webServer.start();
```

Nun, wieso habe ich bei jeder Anfrage eine neue Instanz der Dinsterbringer-Klasse?


----------



## foobar (13. Dez 2008)

Die Webservices sind Stateless daher bekommste immer ne leere Liste. Du mußt den State auf dem Client tracken.


----------



## max5432 (14. Dez 2008)

> Du mußt den State auf dem Client tracken.



Soll heissen, ich muss den Zustand irgendwie anders abbilden, wenn ich es richtig verstanden habe. Wie könnte man dies einfach (oder auch weniger einfach) machen? Ich möchte wenn möglich bei XML-RPC bleiben und das ganze Gebilde nicht unbedingt aufblähen. 

Danke.


----------



## Murray (19. Dez 2008)

Implementiere doch ein eigenes HandlerMapping, das immer das gleiche Handler-Objekt zurückliefert, wenn Du vermeidne willst, dass immer neue Handler erzeugt werden.


----------

