![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Jr. Member
![]() Registriert seit: 01.05.2002
Beiträge: 49
|
![]() 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 |
![]() |
![]() |
![]() |
#2 |
Elite
![]() |
![]() 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 .... } 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. |
![]() |
![]() |
![]() |
#3 |
Jr. Member
![]() Registriert seit: 01.05.2002
Beiträge: 49
|
![]() 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 |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|