# Java 6 Webservice langsam?



## meckiebro (9. Juni 2010)

Hi,
Ich habe einen kleinen Webservice geschrieben und zwar ist der Server in Java geschrieben und der Client in PHP. Ich teste das momentan mit Xampp
Ich habe jetzt folgendes Problem. Wenn ich den Server an meinem Rechner über folgende Zeile publishe

```
Endpoint.publish("http://192.168.1.102:8080/haushalt", service);
```
und ich dann auch Apache mit Xampp an meinem Rechner starte und den Clienten dort ausführe funktioniert alles Problemlos und schnell.

Wenn ich jetzt jedoch den Apache bspw. an einem anderen Rechner starte und von dort den clienten ausführe der Webservice aber jedoch immer noch auf meinem Rechner (192.168.1.102) ausführe dann dauert der Aufruf einer Methode des Webservices schon lange. mindestens 2s. 

Das komische ist ich habe direkt eine Systemausgabe in der Methode eingebaut die ich aufrufe. Bevor die Methode ausgeführt wird vergeht einiges an Zeit und auch dannach..
Warum ist das so und wie kann ich das unterbinden. Ich habe gelesen mann kann die Message vom Webservice komprimieren, aber wie geht das mit Java wo ich doch nur Annotations benutze.

anbei das was ich mit den Annotations eingestellt habe.
@WebService
@SOAPBinding(style=SOAPBinding.Style.RPC, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED, use=SOAPBinding.Use.ENCODED)
@XmlSeeAlso({Group[].class,PublicUser[].class,User[].class,Invoice[].class,Article[].class,Object[].class,StatusCode.class})

Ich danke für die Hilfe und freundliche Grüße
Meckie


----------



## meckiebro (14. Juni 2010)

Hallo nochmal ich.

Ich konnte das Problem immer nocht nicht lösen.
Ich habe mir jetzt noch ein Buch daszu geliehen und die machen das nicht anders als ich.

Viellicht erkläre ich das Problem nochmal einfacher.
Wenn Server und Client am selbsen Rechner laufen geht alles super schnell.
Wenn nicht, dann benötigt der Aufruf einer Methode ca. 1s. 
Das finde ich recht lang und ich kann mir nicht erklären das andere sowas akzeptieren ist doch super nervig.
Ich habe mich jetzt noch in den SOAPHandler eingeklingt und der wird halt recht spät aufgerufen. Alles andere geht fix dann. 

Jemand eine Idee?


----------



## Thomas Darimont (14. Juni 2010)

Hallo,

hast du schonmal mit einem Profiler geschaut wo genau die Zeit verloren geht? Hast du vielleicht ein Problem mit der Serailisierung bzw. dem Un-/Marshalling? Ist das vielleicht ein DNS Lookup Problem? Machst du rigendwo equals mit java.net.URL ?
Ansonsten schau mal hier:
http://stackoverflow.com/questions/1985963/eclipse-generated-web-service-client-extremely-slow

Gruß Tom


----------



## meckiebro (14. Juni 2010)

@Thomas
Erstmal danke für die schnelle Antwort.
Also schonmal soviel:
Ich habe auch das Tutorial welches du hier gepostet hast nachprogrammiert und auch dort habe ich das gleiche Problem. Man merkt das vorallem wunderschön wenn man mehrmals die gleiche Methode aufruft.
Beim rest muss ich nochmal gucken

Gruß
Meckie


----------



## Thomas Darimont (14. Juni 2010)

Hallo,

welches Beispiel meinst du denn genau?

Gruß Tom


----------



## meckiebro (14. Juni 2010)

@Thomas
hier der:
http://www.tutorials.de/forum/java/268800-einfache-webservices-unter-java-6-mustang.html


----------



## Thomas Darimont (14. Juni 2010)

Hallo,

lass deine Anwendung mal mit:

```
-Dhttp.keepAlive=false
```
... laufen. Damit kann ich mein JAX-WS Beispiel auf 2 Rechnern über WLAN enorm beschleunigen.
http://java.sun.com/javase/6/docs/technotes/guides/net/http-keepalive.html

Ansonsten könnte man u.a. auch noch mit dem JVM Property: http.KeepAlive.remainingData
experimentieren.

Gruß Tom


----------



## meckiebro (14. Juni 2010)

So?

System.setProperty("Dhttp.keepAlive", "false");

Oder war das D ein Tipp Fehler?
So hats leider nichts gebracht


----------



## Thomas Darimont (14. Juni 2010)

Hallo,

diese Einstellung habe ich am Client vorgenommen.

entweder programmatisch:

```
System.setProperty("http.keepAlive", "false");
```

oder als JVM Property beim starten deiner Anwendung:

```
java -cp %CLASSPATH% -Dhttp.keepAlive=false de.your.main.Clazz
```

Mit -D kann m an System Properties (JVM Properties) über die Konsole setzen. 

Gruß Tom


----------



## meckiebro (14. Juni 2010)

Ok ich  habe nur das Problem, dass ich den Clienten im Endeffekt mit PHP realisieren möchte, bzw. mit dem Zend-Framework. Ich habe dein Tuturial zum testen nachprogrammiert. Und es hat sich dabei ja rausgestellt das es sowohl in java als auch in php langsam ist

Gruß
Meckie


----------



## Thomas Darimont (14. Juni 2010)

Hallo,

zumindest der Java seitige Aufruf mit JAX-WS sollte nun schneller gehen. Wie rufst du denn den Webservice über PHP/ZEND auf?

Gruß Tom


----------



## meckiebro (15. Juni 2010)

@Thomas

Also für Java funktioniert das super. Danke dafür schonmal. 
Habe das im Apache auch auf off gesetzt. Bringt nur leider nichts. Aber dafür ist das hier das falsche Thema.

Gruß
Meckie


----------



## meckiebro (15. Juni 2010)

```
$service = new SoapClient('http://192.168.1.102:8080/haushalt/?wsdl');
$service->getWebserviceName();
```

So im groben


----------



## Thomas Darimont (15. Juni 2010)

Hallo,

auch hier gibts den KeepAlive Hinweis:
http://php.net/manual/en/class.soapclient.php

Gruß Tom


----------



## meckiebro (15. Juni 2010)

Ich habe das jetzt in der httpd.conf drin gehabt und ka wo noch weil ich nicht genau verstehe wo. das hat zumindest bis jetzt noch nix gebracht. 

Ich habe zum testen jetzt immer nach dem Aufruf einer Methode folgende Zeile ausgeführt.


```
$service->__getLastRequestHeaders().
```

Da steht dann alle mögliche. Interessant ist da nur, dass dort dann auch folgendes steht:

Connection: Keep-Alive.

Scheint also irgendwie noch nicht zu wirken


----------



## Thomas Darimont (15. Juni 2010)

Hallo,

ich meinte damit, dass du am SoapClient das KeepAlive ausschalten sollst:
http://www.xdevsoftware.com/blog/post/Set-KeepAlive-Header-in-PHP-SoapClient.aspx

Gruß Tom


----------



## meckiebro (15. Juni 2010)

^^
Genau die Seite hatte ich auch schon.
Das tolle dabei ist, dass sich dann mein Apache aufhängt wenn ich das ausführe.
Ich schaue aber nochmal. muss jetzt erstmal in die Uni.

Gruß
Meckie


----------



## meckiebro (17. Juni 2010)

Puh also das was du mir da gepostet hast t irgendwie nicht. Gibt es denn keine andere Möglichkeit den Header zu bearbeiten, setzen, ka...

Ich weiß nicht mehr wie ich das angehen soll. Eine Hilfestellung wäre super

Gruß
Meckie


----------

