WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 22.08.2002, 15:12   #1
sam4712
Jr. Member
 
Registriert seit: 01.05.2002
Beiträge: 49


Standard Java Servlets (Counter)

hi leute

ich hab folgendes problem mit java servlets und komm einfach nicht weiter. es macht sich schon die pure verzweiflung breit

Szenario 1:
ich hab ein normales http servlet in dem ich eine Countervariable mit static initialisiert hab. bei jedem aufruf der doPost methode wird der counter um eins erhöht und ausgegeben. funktioniert.

Szenario 2:
ich dasselbe servet mit derselben Countervariable. Allerdings befindet sich in meinem Servlet noch eine Methode - nennen wir sie z.B. Test - die vor der doPost methode von einem MessageHandlet aufgerufen wird. Nun soll diese Methode meinen Counter um eins erhöhen. Geb ich nun die Variable im Tomcat fenster aus zeigt sie den richtigen wert an. will ich aber nun diesselbe variable in meiner doPost Methode ausgeben wird einfach nur 0 ausgegeben.
Die doPost Methode und die Test Methode zählen also diesselbe Countervariable unterschiedlich hoch.

Ich hoffe ich hab mich halbwegs verständlich ausgedrückt
Weiss vielleicht irgendwer warum dies so ist bzw. wie man das umgehen kann.

bin fuer jede hilfe dankbar

gruss

sam
sam4712 ist offline   Mit Zitat antworten
Alt 24.08.2002, 00:07   #2
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

hmm, etwas code wäre hilfreich

ansonsten kann ich dir nur sagen, dass es vom servlet an sich nur eine instanz gibt.

sprich

Code:
class A extends HttpServlet
{
 public int counter;

 public void doPost ....

}
würd das selbe ergebnis bringen wie counter als static, weils eben nur ein objekt davon gibt.


die methodenaufrufe selber dagegen werden als threads aufgerufen, können also parallelläufig sein, was für den counter gleichzeitig ein problem darstellen kann, da counter++ keine atomare operation ist, du also das counterhochzählen mit synchronized implementieren müsstest.


keine ahnung, ob dir das jetzt irgendwie weiterhilft oder überhaupt das thema trifft, aber stell mal deinen code rein, dann gehts sicher einfacher
____________________________________
Whoever built humanity left in a major design flaw: it was the tendency to bend at the knees.
Who-T ist offline   Mit Zitat antworten
Alt 25.08.2002, 20:52   #3
sam4712
Jr. Member
 
Registriert seit: 01.05.2002
Beiträge: 49


Standard

vielen dank mal fuer dein posting. leider bin ich bis jetzt nicht wirklich weitergekommen, aber ich stell mal die wichtigsten codestücke rein.

import.....

public class mservlet extends HttpServlet implements ServiceListener,SingleThreadModel
{

....

static int counter = 0;

....

public void messageReceived(ServiceEvent evt) throws Exception
{

....

counter++; // The counter is incremented
System.out.println(counter); // and prints out the right value

....

}

....

public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{

....

out.println("Counter:" + counter); // 0 is printed out

....

}

die MessageReceived methode wird ausgeführt bevor die dopost methode ausgeführt wird. das servlet ist gleichzeitg so eine art service, das von einem Message Handler angesprochen wird. fuer mich ist es wichtig mit den werten die ich in der message received methode bekomme, in der dopost methode weiterarbeiten zu können.

wär toll wenn mir wer weiterhelfen könnte


lg

sam
sam4712 ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:28 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag