Hallo Eine Frage,
Ich brauche für einen Verteilte Anwendung ein kleiner Speicher, na ja Speicher ist vielleicht übertrieben eigentlich nur eine HashMap wo die einzelenen Clients etwas eintragen können aus einem bestimmten Grund – ist aber ja nicht so wichtig. Es geht vielmehr um das Thema Synchronisation.
Hier mal der Code von dem WebServiceTest:
Auf dem Server wird dann der Web-Services veröffentlicht das geht ja einfach in Java SE 6.
In den jeweiligen Clients hole ich mir dann den Webserviceport. Aber wie sieht das mit der Synchronisation aus?
Ich bin mir auch nicht sicher ob es nur eine Instanz von dem WebServiceTest gibt – Habe da auch nichts Richtiges gefunden wo das eventuell erklärt wird.
Existiert da jetzt nur eine Instanz => laut Test müsste es so sein. Reicht das synchronized aus für die Synchronisation ich bin etwas verwirrt seitdem ich das gelesen habe:
http://giu.giustyle.com/06-11-2007-...l-1-monitor-und-das-synchronized-keyword.html
speziell der Punkt: Lost-Update Problem mit synchronized lösen?
Besten Dank schon mal
Ich brauche für einen Verteilte Anwendung ein kleiner Speicher, na ja Speicher ist vielleicht übertrieben eigentlich nur eine HashMap wo die einzelenen Clients etwas eintragen können aus einem bestimmten Grund – ist aber ja nicht so wichtig. Es geht vielmehr um das Thema Synchronisation.
Hier mal der Code von dem WebServiceTest:
Code:
import java.util.HashMap;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(name="TestWebService")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class WebServiceTest
{
private final int MAX_VIEW_ENTRIES = 50;
HashMap<Integer, Integer> actViewState;
public WebServiceTest() {
System.out.print("Konstruktor Normal");
if(actViewState == null){
actViewState = new HashMap<Integer, Integer>(MAX_VIEW_ENTRIES);
for (int i = 1; i < MAX_VIEW_ENTRIES+1; i++) {
actViewState.put(i, 0);
}
}
}
@WebMethod(operationName="tryToGetView")
public synchronized boolean tryToGetView(int clientId, int viewNumber) {
boolean ret = false;
if(actViewState.get(viewNumber) == 0){
actViewState.put(viewNumber, clientId);
ret = true;
}else{
ret = false;
}
System.out.println("<tryToGetViewNr: "+viewNumber+" , ClientId: "+clientId+">" + " return: "+ret);
return ret;
}
@WebMethod(operationName="releaseView")
public synchronized boolean releaseView(int clientId, int viewNumber) {
boolean ret = false;
if(actViewState.get(viewNumber) == clientId){
actViewState.put(viewNumber, 0);
ret = true;
}else{
ret = false;
}
System.out.println("<releaseView: "+viewNumber+" , ClientId: "+clientId+">" + " return: "+ret);
return ret;
}
}
Auf dem Server wird dann der Web-Services veröffentlicht das geht ja einfach in Java SE 6.
Code:
Endpoint endpoint = Endpoint.publish("http://localhost:8080/servicetest", new WebServiceTest());
In den jeweiligen Clients hole ich mir dann den Webserviceport. Aber wie sieht das mit der Synchronisation aus?
Ich bin mir auch nicht sicher ob es nur eine Instanz von dem WebServiceTest gibt – Habe da auch nichts Richtiges gefunden wo das eventuell erklärt wird.
Existiert da jetzt nur eine Instanz => laut Test müsste es so sein. Reicht das synchronized aus für die Synchronisation ich bin etwas verwirrt seitdem ich das gelesen habe:
http://giu.giustyle.com/06-11-2007-...l-1-monitor-und-das-synchronized-keyword.html
speziell der Punkt: Lost-Update Problem mit synchronized lösen?
Besten Dank schon mal