Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    SGWT 2.5 Regression in CLOB handling?

    - SGWT Version: SC_Snapshot-2011-05-14 (Power)
    - Hosted mode
    - gwt Version: 2.1.1, 2.2.0
    - Browser: Firefox 4, IE8
    - OS: Win 7 , Mac OS X
    - DB: Oracle 10.2, Driver: ojdbc14

    The CLOB-problem mentioned in http://forums.smartclient.com/showthread.php?t=14890 seems to be back again.


    Test case:
    Set up a small app where a SelectItem gets its options from a (sql) datasource. One of the fields should be a large textfield (CLOB in DB).

    Our oberservation:
    As long as the CLOB-field is declared in the ds.xml the app fails to load the Datasource correctly. SelectItem (or a Listgrid displaying all fields) show a "spinning wheel of death".
    The Server log says "Getrennte Verbindung", which means "Connection closed". There is no such error if the CLOB field is commented in ds.xml. Everything's fine then.

    Server Stack Trace:
    Code:
    === 2011-05-16 19:09:46,840 [l0-4] INFO  SQLDriver - [builtinApplication.VTM_FILTER_fetch] Executing SQL query on 'Oracle': SELECT VTM_FILTER.FILTER_SELECTED_FILTERRULES, VTM_FILTER.FILTER_ID, VTM_FILTER.FILTER_STRUCTURE_AS_JSON, VTM_FILTER.FILTER_NAME, VTM_FILTER.FILTER_STANDARD_FILTER, VTM_FILTER.FILTER_USER_ID FROM E2EFM_SCHEMA.VTM_FILTER WHERE ('1'='1')
    === 2011-05-16 19:09:46,893 [l0-4] INFO  DSResponse - [builtinApplication.VTM_FILTER_fetch] DSResponse: List with 9 items
    === 2011-05-16 19:09:46,894 [l0-4] DEBUG RPCManager - Content type for RPC transaction: text/plain; charset=UTF-8
    === 2011-05-16 19:09:46,895 [l0-4] DEBUG RPCManager - non-DMI response, dropExtraFields: false
    === 2011-05-16 19:09:46,918 [l0-4] ERROR IDACall - Error executing operation: VTM_FILTER_fetch
    java.io.IOException: Getrennte Verbindung
    	at oracle.jdbc.driver.DatabaseError.SQLToIOException(DatabaseError.java:764)
    	at oracle.jdbc.driver.OracleClobReader.needChars(OracleClobReader.java:232)
    	at oracle.jdbc.driver.OracleClobReader.read(OracleClobReader.java:178)
    	at java.io.BufferedReader.fill(Unknown Source)
    	at java.io.BufferedReader.read1(Unknown Source)
    	at java.io.BufferedReader.read(Unknown Source)
    	at java.io.Reader.read(Unknown Source)
    	at com.isomorphic.util.IOUtil.copyCharacterStreams(IOUtil.java:183)
    	at com.isomorphic.util.IOUtil.copyCharacterStreams(IOUtil.java:127)
    	at com.isomorphic.js.JSTranslater.convertReader(JSTranslater.java:762)
    	at com.isomorphic.js.JSTranslater.convertSimple(JSTranslater.java:675)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:533)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:511)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:502)
    	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:950)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:573)
    	at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1110)
    	at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1063)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:575)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:511)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:502)
    	at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:950)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:573)
    	at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1110)
    	at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1063)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:575)
    	at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:511)
    	at com.isomorphic.js.JSTranslater.toJS(JSTranslater.java:473)
    	at com.isomorphic.rpc.RPCManager.completeResponse(RPCManager.java:1151)
    	at com.isomorphic.rpc.RPCManager.send(RPCManager.java:582)
    	at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:130)
    	at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:95)
    	at com.isomorphic.servlet.IDACall.doPost(IDACall.java:54)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:152)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1097)
    	at com.isomorphic.servlet.CompressionFilter.doFilter(CompressionFilter.java:259)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)
    	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
    	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
    	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    	at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    	at org.mortbay.jetty.Server.handle(Server.java:324)
    	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
    	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
    	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
    	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
    	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
    	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
    	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
    === 2011-05-16 19:09:46,920 [l0-4] DEBUG RPCManager - Content type for RPC transaction: text/plain; charset=UTF-8
    === 2011-05-16 19:09:46,920 [l0-4] DEBUG RPCManager - non-DMI response, dropExtraFields: false
    === 2011-05-16 19:09:46,922 [l0-4] INFO  Compression - /Sgwt25_checks/sc/IDACall: 4388 -> 940 bytes
    Our DataSource
    Code:
    <DataSource 
    	schema="E2EFM_SCHEMA"
    	dbName="Oracle"
    	tableName="VTM_FILTER"
    	ID="VTM_FILTER"
    	dataSourceVersion="1"
    	serverType="sql"
    >
    	<fields>
    		<field sqlType="decimal" primaryKey="true" sqlLength="22" name="FILTER_ID" type="sequence"></field>
    		<field sqlType="varchar" sqlLength="45" name="FILTER_NAME" length="100" type="text"></field>
        	<field sqlType="varchar" sqlLength="45" name="FILTER_SELECTED_FILTERRULES" length="45" type="text"></field>
        	<field sqlType="varchar" sqlLength="4000" name="FILTER_STRUCTURE_AS_JSON" length="4000" type="text"></field>
    		<field sqlType="varchar" sqlLength="45" name="FILTER_USER_ID" length="45" type="text"></field>
    		<field sqlType="char" sqlLength="5" name="FILTER_STANDARD_FILTER" length="5" type="text"></field>
    		 		
    	</fields> 
    </DataSource>
    Stripped onModuleLoad (enough to recreate the error)
    Code:
    public void onModuleLoad() {
    	
    		final ToolStrip ts = new ToolStrip();
    		
    		// Filter Selection
    		final SelectItem selectFilter = new SelectItem("FILTER_NAME","");
    		selectFilter.setAllowEmptyValue(true);
    		selectFilter.setEmptyDisplayValue("--- No filter selected ---");
    		selectFilter.setOptionDataSource(DataSource.get("VTM_FILTER"));
    		ts.addFormItem(selectFilter);
    				
    	
    		RootPanel.get("clobTest").add(ts);
    	}
    Client side log:
    Code:
    19:09:46.956 [ERROR] [Sgwt25_checks] 19:09:46.953:XRP5:WARN:RPCManager:Error evaling structured RPC response: SyntaxError: '}' erwartet response text: [{endRow:9,queueStatus:0,totalRows:9,isDSResponse:true,invalidateCache:false,status:0,startRow:0//isc_RPCResponseStart-->[{queueStatus:-1,isDSResponse:true,invalidateCache:false,status:-1,data:"java.io.IOException: Getrennte Verbindung\r\n    at oracle.jdbc.driver.DatabaseError.SQLToIOException(DatabaseError.java:764)\r\n    at oracle.jdbc.driver.OracleClobReader.needChars(OracleClobReader.java:232)\r\n    at oracle.jdbc.driver.OracleClobReader.read(OracleClobReader.java:178)\r\n    at java.io.BufferedReader.fill(Unknown Source)\r\n    at java.io.BufferedReader.read1(Unknown Source)\r\n    at java.io.BufferedReader.read(Unknown Source)\r\n    at java.io.Reader.read(Unknown Source)\r\n    at com.isomorphic.util.IOUtil.copyCharacterStreams(IOUtil.java:183)\r\n    at com.isomorphic.util.IOUtil.copyCharacterStreams(IOUtil.java:127)\r\n    at com.isomorphic.js.JSTranslater.convertReader(JSTranslater.java:762)\r\n    at com.isomorphic.js.JSTranslater.convertSimple(JSTranslater.java:675)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:533)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:511)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:502)\r\n    at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:950)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:573)\r\n    at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1110)\r\n    at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1063)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:575)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:511)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:502)\r\n    at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:950)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:573)\r\n    at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1110)\r\n    at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1063)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:575)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:511)\r\n    at com.isomorphic.js.JSTranslater.toJS(JSTranslater.java:473)\r\n    at com.isomorphic.rpc.RPCManager.completeResponse(RPCManager.java:1151)\r\n    at com.isomorphic.rpc.RPCManager.send(RPCManager.java:582)\r\n    at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:130)\r\n    at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:95)\r\n    at com.isomorphic.servlet.IDACall.doPost(IDACall.java:54)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)\r\n    at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:152)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)\r\n    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)\r\n    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1097)\r\n    at com.isomorphic.servlet.CompressionFilter.doFilter(CompressionFilter.java:259)\r\n    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)\r\n    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)\r\n    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)\r\n    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)\r\n    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)\r\n    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)\r\n    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)\r\n    at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)\r\n    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)\r\n    at org.mortbay.jetty.Server.handle(Server.java:324)\r\n    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)\r\n    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)\r\n    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)\r\n    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)\r\n    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)\r\n    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)\r\n    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)\r\n"}]
    com.smartgwt.client.core.JsObject$SGWT_WARN: 19:09:46.953:XRP5:WARN:RPCManager:Error evaling structured RPC response: SyntaxError: '}' erwartet response text: [{endRow:9,queueStatus:0,totalRows:9,isDSResponse:true,invalidateCache:false,status:0,startRow:0//isc_RPCResponseStart-->[{queueStatus:-1,isDSResponse:true,invalidateCache:false,status:-1,data:"java.io.IOException: Getrennte Verbindung\r\n    at oracle.jdbc.driver.DatabaseError.SQLToIOException(DatabaseError.java:764)\r\n    at oracle.jdbc.driver.OracleClobReader.needChars(OracleClobReader.java:232)\r\n    at oracle.jdbc.driver.OracleClobReader.read(OracleClobReader.java:178)\r\n    at java.io.BufferedReader.fill(Unknown Source)\r\n    at java.io.BufferedReader.read1(Unknown Source)\r\n    at java.io.BufferedReader.read(Unknown Source)\r\n    at java.io.Reader.read(Unknown Source)\r\n    at com.isomorphic.util.IOUtil.copyCharacterStreams(IOUtil.java:183)\r\n    at com.isomorphic.util.IOUtil.copyCharacterStreams(IOUtil.java:127)\r\n    at com.isomorphic.js.JSTranslater.convertReader(JSTranslater.java:762)\r\n    at com.isomorphic.js.JSTranslater.convertSimple(JSTranslater.java:675)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:533)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:511)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:502)\r\n    at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:950)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:573)\r\n    at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1110)\r\n    at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1063)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:575)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:511)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:502)\r\n    at com.isomorphic.js.JSTranslater.convertMap(JSTranslater.java:950)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:573)\r\n    at com.isomorphic.js.JSTranslater.convertIterator(JSTranslater.java:1110)\r\n    at com.isomorphic.js.JSTranslater.convertCollection(JSTranslater.java:1063)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:575)\r\n    at com.isomorphic.js.JSTranslater.convert(JSTranslater.java:511)\r\n    at com.isomorphic.js.JSTranslater.toJS(JSTranslater.java:473)\r\n    at com.isomorphic.rpc.RPCManager.completeResponse(RPCManager.java:1151)\r\n    at com.isomorphic.rpc.RPCManager.send(RPCManager.java:582)\r\n    at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:130)\r\n    at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:95)\r\n    at com.isomorphic.servlet.IDACall.doPost(IDACall.java:54)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)\r\n    at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:152)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)\r\n    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)\r\n    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1097)\r\n    at com.isomorphic.servlet.CompressionFilter.doFilter(CompressionFilter.java:259)\r\n    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)\r\n    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)\r\n    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)\r\n    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)\r\n    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)\r\n    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)\r\n    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)\r\n    at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)\r\n    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)\r\n    at org.mortbay.jetty.Server.handle(Server.java:324)\r\n    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)\r\n    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)\r\n    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)\r\n    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)\r\n    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)\r\n    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)\r\n    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)\r\n"}]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:105)
        at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
        at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
        at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:281)
        at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531)
        at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352)
        at java.lang.Thread.run(Unknown Source)

    #2
    Oracle stores length 4000 normally as a varchar. We'll only guess that a field requires CLOB treatment if it's *over* 4000.

    Comment


      #3
      Retested with field length 5000 in ds.xml. Error still comes up.

      Comment


        #4
        Are you reporting this as a regression relative to some previous version of SmartGWT? Because this area of the code has had no changes for a while making this an unlikely regression. So, please try out and post a standalone test case - just the DataSource and client-code calling it, no application-specific server-side code at all, and tested against the standard SDK.

        Comment


          #5
          I'm reporting this as a regression because:
          It worked in sgwt 2.3, didn't work in sgwt 2.4 and was fixed in sgwt 2.5 nightlies around Jan/15th.

          I set up a completely clean workspace, so no version mismatches possible.

          Re-tested with sgwt 2.5 nightly 2011-05-17 on gwt 2.2.0 in Hosted mode. Error is still there. I will test in a container now.
          Attached Files

          Comment


            #6
            Error comes up during test in container too

            Comment


              #7
              Thanks for the test case. We found the problem and it's been fixed - grab the next nightly from smartclient.com/builds.

              Comment


                #8
                thanks a lot. Will test with the next nightly again.

                When do you plan to release sgwt 2.5? Will it support gwt 2.3?

                Comment


                  #9
                  Retested with nightly 2011-05-18 (Power).

                  Works like a charm now!

                  Thanks

                  Comment

                  Working...
                  X