Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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?
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:
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?
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.
Implementiere doch ein eigenes HandlerMapping, das immer das gleiche Handler-Objekt zurückliefert, wenn Du vermeidne willst, dass immer neue Handler erzeugt werden.