nikb
I'm new here

FSI Modul erzeugt fehlerhafte SQL Queries

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!

0 Kudos
3 Replies
nikb
I'm new here

Hatte wirklich noch niemand dieses Problem?

0 Kudos

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.

Peter
0 Kudos
MarcusDau
Occasional Collector

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.

0 Kudos