Toon posts:

[Java] Resin bug?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ok, dit wordt een wat vaag verhaal, ik betwijfel dat jullie er ook maar iets zinnigs over kunnen zeggen maar jullie zijn m'n laatste hoop :)

Ik ben bezig met Java Servlets, die test ik thuis onder Resin. Ik maak gebruik van een database connection pool die ik ergens gedownload heb maar inmiddels compleet begrijp. Een van de methoden van deze connectionpool is getConnection(), in mijn hele servlet wordt deze maar 1 keer aangeroepen, niet in een lus, gewoon los midden in.

Het viel mij op dat soms als ik de pagina aanriep deze methode twee keer aangeroepen wordt. Maar nadat ik getConnection aanroep roep ik altijd ook releaseConnection aan om de connectie weer vrij te geven. Ik besloot de aanroepen te loggen, ik laat nu in een tekstbestand schrijven wanneer welke methode aangeroepen wordt. Daar komt iets heel vreemds uit.

In mijn programma worden de methoden grofweg zo aangroepen
code:
1
2
3
Connection conn = pool.getConnection();
// bla bla bla
pool.releaseConnection(conn);

Dit fragment komt 1 keer voor, niet in een lus. Nu vind ik soms in mijn log bestand dit:
code:
1
2
3
getConnection() was called
releaseConnection() was called
getConnection() was called

terwijl ik dus 100% zeker weet dat ik aan het eind geen getConnection() aanroep, ik heb wel 100 keer Editplus alle sourcefiles laten doorzoeken op getConnection(), maar deze Servlet is echt de enige waar het aangeroepen wordt.

Kortom: Ik ben ten einde raad. Is dit een bug in Resin, heeft iemand zoiets ooit meegemaakt? Heeft iemand een idee wat nu verder te doen?

:'(

  • paulh
  • Registratie: Juli 1999
  • Laatst online: 22-06 15:30
Ik dacht dat resin zijn eigen connectiepool had ... misschien moet je dat eens uitzoeken.

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:48
Kan je bij de makers van Resin niet terecht met zo'n vraag?

https://fgheysels.github.io/


Verwijderd

Topicstarter
paulh schreef op 06 augustus 2002 @ 16:18:
Ik dacht dat resin zijn eigen connectiepool had ... misschien moet je dat eens uitzoeken.
Uiteindelijk moet het ook onder tomcat en andere servers kunnen draaien dus dat lijkt me geen goed plan. Ik zal tomcat eens installeren en kijken of het daar wel goed gaat...

Verwijderd

Topicstarter
Net Tomcat 4 geinstalleerd en daar gebeurt dus precies hetzelfde :? Ik word gek.

  • paulh
  • Registratie: Juli 1999
  • Laatst online: 22-06 15:30
Maak je gebruik van een poolservlet die geextend wordt of zo ... misschien wordt hij daar nog een keer in aangeroepen ?

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


Verwijderd

Topicstarter
Nee, ik gebruik de DatabasePoolManager van http://www.sourceforge.net/projects/jspmyadmin daarvoor gebruikte ik een eigen geschreven poolmanager waar ik hetzelfde probleem mee had. Ik ga maar eens proberen of ik een wat simpeler programma kan schrijven waarmee hetzelfde gebeurt...

  • bodiam
  • Registratie: December 2001
  • Laatst online: 31-12-2024
Misschien is het handig als je eventjes een new Date.toString() erbij zet, zodat je kunt zien wanneer de meldingen voorkomen. Daarnaast zou iets meer code misschien ook handig kunnen zijn om je te kunnen helpen.

Erik

Verwijderd

Topicstarter
"wat meer code" zal al snel resulteren in honderden regels, daarom probeer ik een wat kleiner programma te maken waar het zich ook voordoet, maar dat wil niet echt lukken, nu gaat het steeds goed :(

  • reddog33hummer
  • Registratie: Oktober 2001
  • Laatst online: 24-08 18:08

reddog33hummer

Dat schept mogelijkheden

normaal gebruik ik met een pool gewoon

conn.close()

en dan bergt de connectie zichzelf op

Backup not found (R)etry (A)bort (P)anic<br\>AMD 3400+ 64, 2 GB DDR, 1,5 TB Raid5


  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 07:06
Laat anders eens een stacktrace printen op stdout/err. Zie je exact waar en hoe hij aangeroepen wordt.

Geloof dat er gewoon een statement voor is, maar kan het zo snel niet meer vinden... dan maar zo:
code:
1
2
3
4
5
6
7
8
try 
{
   throw new Exception();
}
catch (Exception e)
{
    e.printStacktrace();
}

Verwijderd

Topicstarter
reddog33hummer schreef op 07 augustus 2002 @ 01:15:
normaal gebruik ik met een pool gewoon

conn.close()

en dan bergt de connectie zichzelf op
Zo, maar mijn probleem is dus dat ik aan het eind helemaal geen connectie open, laat staan sluit ;) Maar goed, ik doe voorlopig maar alsof het probleem zich niet voordoet, het doet zich maar heel zelden voor, ik moet er later nog maar eens naar kijken dan...

Verwijderd

Topicstarter
Jelmer Barhorst schreef op 07 augustus 2002 @ 09:11:
Laat anders eens een stacktrace printen op stdout/err. Zie je exact waar en hoe hij aangeroepen wordt.
edit: foutje, ik zal het eens proberen :)

Verwijderd

Topicstarter
Ik snap er steeds minder van, volgens de Exception werd getConnection aangeroepen op regel 126 van de servlet, dat klopt inderdaad daar wordt getConnection aangeroepen, maar dat is dus de ene keer waar ik het over had, die regel kan nooit tweek keer uitgevoerd worden. Het lijkt nu alsof eerst de hele servlet uitgevoerd wordt, daarna nog een keer waarna hij halverwege blijft hangen :? (want de connectie wordt niet gesloten). En dit niet elke keer, maar soms wel en soms niet. Ik snap er geen zak meer van...

  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Waar in je servlet maak je die connectie aan? Als het in de init() is dan zou het zo kunnen zijn dat Resin op de een of andere manier denkt dat er extra instanties van je servlet nodig zijn. Heb je al gekeken naar de objectIds die de meldingen veroorzaken?

With the light in our eyes, it's hard to see.


Verwijderd

Topicstarter
Bobco schreef op 07 augustus 2002 @ 09:49:
Waar in je servlet maak je die connectie aan? Als het in de init() is dan zou het zo kunnen zijn dat Resin op de een of andere manier denkt dat er extra instanties van je servlet nodig zijn.
Nee, dat doe ik gewoon in service().
Heb je al gekeken naar de objectIds die de meldingen veroorzaken?
Je bedoeld met this.toString() (van het servlet?) Ja, heb ik net gedaan en die komen overeen.

Verwijderd

Topicstarter
Ik heb met veel moeite een soort van oorzaak gevonden alhoewel ik hem niet snap. Ik maak in mijn servlet geen gebruik van standaard get variabelen met request.getParameter maar extraheer ze van getPathInfo() zodat ik urls als /servlet/mijnservlet/actie/nummer kan gebruiken, dit werkt goed, behalve als ik /servlet/mijnservlet/topic/nummer doe, dan wordt de servlet namelijk twee keer aangeroepen met /servlet/mijnservlet/topic/00 als "url" en met de exception die dat oplevert (topic 00 bestaat namelijk niet) wordt het geheel stilletjes afgebroken. /servlet/mijnservlet/topic/nummer/ en /servlet/mijnservlet/topic/nummer/nogeennummer gaan wel goed, /servlet/mijnservlet/board/nummer bijvoorbeeld ook.

Hoe dit kan, vraag het me niet...
Pagina: 1