Search the FirstSpirit Knowledge Base
Hallo zusammen,
wir nutzen das FSI Modul um in unserer Liveapplikation auf Datenquellen zuzugreifen. Das funktioniert soweit auch wunderbar, aber nach einer gewissen Zeit produziert das FSI Modul fehlerhafte Queries, die vom JDBC Treiber bereits abgefangen und nicht mehr zur Datenbank durchgelassen werden. Das hat einen 500 Fehler zur Folge. Bisher hilft danach nur ein manueller Neustart des kompletten Applicationservers - was natürlich keine Dauerlösung sein kann.
Das von FSI richtig erzeugte Query sieht folgendermassen aus:
2010-12-14 18:43:26,512 DEBUG [ReleaseSessionHandler] SELECT CHANGED_BY,FS_ID,FS_RELEASE_TO,FS_VALID_FROM,FS_VALID_TO,KEY_,LAT,LON,NAME,NAMEN_DE,NAMEN_JP,NAME_CN,RELEASED_BY,SYSTEM_OF_UNITS,WF_COL,WF_ID,ZOOM FROM P330166_329995.COUNTRIES t4 WHERE (t4.FS_RELEASE_TO>? AND t4.FS_VALID_FROM<=? ) AND t4.FS_ID IN (1090)
Ein fehlerhaftes Query sieht z.B. so aus:
2010-12-14 19:08:35,497 DEBUG [ReleaseSessionHandler] SELECT CHANGED_BY,FS_ID,FS_RELEASE_TO,FS_VALID_FROM,FS_VALID_TO,KEY_,LAT,LON,NAME,NAMEN_DE,NAMEN_JP,NAME_CN,RELEASED_BY,SYSTEM_OF_UNITS,WF_COL,WF_ID,ZOOM FROM P330166_329995.COUNTRIES t4 WHERE (t4.FS_RELEASE_TO>? AND t4.FS_VALID_FROM<=? ) AND FS_ID=? AND FS_ID=?
Dabei ist das Ende des Querystrings variabel, es kann auch vorkommen, das der letzte Parameter (z.B: [...]
AND FS_ID=? AND FS_ID=? AND FS_ID=?) drei oder viermal angehangen wird (was ebenso falsch ist).
FSI Modulversion: aktuelle FSI Modulversion
DB Server: MS SQL Server 2005
JDBC Treiber: sqljdbc-1.1.jar
OS: Windows Server 2008 R2 64-Bit
Java: Java(TM) SE Runtime Environment (build 1.6.0_21-b07), Java HotSpot(TM) 64-Bit Server VM (17.0-b17, mixed mode)
App-Server: Tomcat 6.0 64-Bit
FSI arbeitet auf dem Freigabestand.
Poolsize ist Standard (5 min, 10 max)
Hier ein Log vom letzten auftreten des Fehlers (passiert nach einem Reload der Webanwendung, es tritt aber auch im Verlauf durch andere unbekannte Ereignisse auf - Racing Condition?). (Die Zeilen sind aus zwei logfiles zusammen kopiert).
2010-12-14 19:05:28,302 DEBUG [InitServlet] initialize schema...
2010-12-14 19:05:41,258 INFO [ConnectionManagerFactory] Create a new Connection pool for jdbc:sqlserver://XXXX:1433;databasename=XXXX;user=XXXX
2010-12-14 19:05:41,481 INFO [DBConnectionManager] Driver: org.apache.catalina.loader.StandardClassLoader@1d2940b3
2010-12-14 19:05:41,481 INFO [DBConnectionManager] Connection manager: WebappClassLoader
context:
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@1d2940b3
2010-12-14 19:05:41,481 INFO [DBConnectionManager] com.microsoft.sqlserver.jdbc.SQLServerDriver: Major 3, minor 0, jdbc compliant = true
2010-12-14 19:05:41,494 DEBUG [DBConnectionManager] Transaction isolation: READ_COMMITTED
2010-12-14 19:05:41,685 DEBUG [DBConnectionManager] Transaction isolation: READ_COMMITTED
2010-12-14 19:05:41,692 DEBUG [DBConnectionManager] Transaction isolation: READ_COMMITTED
2010-12-14 19:05:41,699 DEBUG [DBConnectionManager] Transaction isolation: READ_COMMITTED
2010-12-14 19:05:41,706 DEBUG [DBConnectionManager] Transaction isolation: READ_COMMITTED
2010-12-14 19:05:41,979 INFO [DBConnectionManager] Created connection pool with 5 initial connections, maximum pool size is 10
INFO: fsi-InitContent: unregister session-handler...
14.12.2010 19:05:19 org.apache.catalina.core.ApplicationContext log
INFO: fsi-InitContent: unregistered!
14.12.2010 19:05:33 org.apache.catalina.core.ApplicationContext log
INFO: fsi-InitContent: set default schema: FS_<NAME1>
14.12.2010 19:05:42 org.apache.catalina.core.ApplicationContext log
INFO: fsi-InitContent: schema 'FS_<NAME1>' (release=true) initialized!
14.12.2010 19:07:28 org.apache.catalina.core.ApplicationContext log
14.12.2010 19:07:35 org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
com.microsoft.sqlserver.jdbc.SQLServerException: Wert für Parameternummer "3" wurde nicht festgelegt.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildParamTypeDefinitions(SQLServerPreparedStatement.java:262)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildPreparedStrings(SQLServerPreparedStatement.java:221)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doPrepExec(SQLServerPreparedStatement.java:598)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:386)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:283)
at de.espirit.or.impl.AbstractSessionHandler.fetchByKeys(AbstractSessionHandler.java:200)
at de.espirit.or.impl.AbstractSession$EntityListImpl.fetch(AbstractSession.java:984)
at de.espirit.or.impl.AbstractSession$EntityListImpl.fetch(AbstractSession.java:958)
at de.espirit.common.util.AbstractLazyList.get(AbstractLazyList.java:156)
at java.util.AbstractList$Itr.next(Unknown Source)
at org.apache.taglibs.standard.tag.common.core.ForEachSupport$SimpleForEachIterator.next(Unknown Source)
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.next(Unknown Source)
at javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(Unknown Source)
at org.apache.jsp.de.deutschland.addressesworldwide.locationsajaxresponse_jsp._jspx_meth_c_005fforEach_005f0(locationsajaxresponse_jsp.java:1254)
at org.apache.jsp.de.deutschland.addressesworldwide.locationsajaxresponse_jsp._jspService(locationsajaxresponse_jsp.java:233)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:774)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:896)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Unknown Source)
Hat jmd aus der Community bereits schonmal ein ähnliches Problem gehabt? Warum werden vom FSI Modul fehlerhafte Queries erzeugt?
Vielen Dank im voraus wir sind dankbar für jeden Hinweis!
Hatte wirklich noch niemand dieses Problem?
Ich habe von diesem Problem noch nie vorher gehört. Daher vermute ich, das die Ursache des Problems nicht im FSI-Modul liegt (auch wenn Sie die Version nicht angegeben haben). Am wahrscheinlichsten ist ein Fehler im JSP/Servlet (z.B. illegale Benutzung von statischen Variablen). Wenn das ausgeschlossen werden kann, wäre der nächste Kandidat der JDBC-Treiber (ev. mal eine andere Version ausprobieren oder den jTDS-Treiber). Obwohl ich dies als Fehler-Ursache eher für unwahrscheinlich halte.
Doch, den Fehler kann ich bestätigen. Den hatte ich auch vor kurzem. Ich bin mir ehrlich gesagt aber nicht mehr so bewusst, was genau die Lösung war und ob es gelöst war. Problem ist nämlich, dass wir gerade auf 4.2.223 gewechselt sind und dort ein Problem mit FSI in der Preview haben: https://community.e-spirit.com/thread/1644
Wenn das behoben ist, dann schaue ich mal, ob der obige Fehler auch bei uns wieder auftaucht.