Announcement

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

    Spring / Jetty conflict

    Hi,

    I make my web application run on jetty,while i access the index page,i got some exception like this:
    Code:
    === 2007-07-24 14:08:13,109 [l0-5] ERROR ProxyHttpServletResponse - Error - getO
    utputStream() called on a request that has already returned a Writer - stack tra
    ce for this getOutputStream() call:
    java.lang.Exception
     at com.isomorphic.servlet.ProxyHttpServletResponse.getOutputStream(Proxy
    HttpServletResponse.java:144)
    what's the problem?

    Thanks in advance.

    Joy.Cai

    #2
    we use jetty-6.1.5rc0 .

    Comment


      #3
      The problem is that the servlet API does not allow getOutputStream() to be called on a request that has already returned a Writer, see:

      http://java.sun.com/j2ee/sdk_1.3/tec...OutputStream()

      If you show the rest of the stack trace it might make it clear how you got into this situation.

      Comment


        #4
        === 2007-07-24 23:37:51,484 [l0-2] ERROR ProxyHttpServletResponse - Error - getOutputStream() called on a request that has already returned a Writer - stack trace for this getOutputStream() call:
        java.lang.Exception
        at com.isomorphic.servlet.ProxyHttpServletResponse.getOutputStream(ProxyHttpServletResponse.java:144)
        at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:277)
        at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
        at org.mortbay.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:465)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
        at com.opensymphony.clickstream.ClickstreamFilter.doFilter(ClickstreamFilter.java:56)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at com.isomorphic.js.JSSyntaxScannerFilter.doFilter(JSSyntaxScannerFilter.java:251)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at com.isomorphic.servlet.CompressionFilter.doFilter(CompressionFilter.java:248)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:350)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.acegisecurity.securechannel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:138)
        at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:217)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:217)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:229)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
        at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        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:712)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
        at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
        at org.mortbay.jetty.Server.handle(Server.java:313)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
        at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
        at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
        at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
        2007-07-24 23:37:51.731::WARN: /MyApp/: java.io.IOException: Error - getOutputStream() called on a request that has already returned a Writer

        Comment


          #5
          Hmm, there are lots of libraries in the stack who could be causing this problem.

          Do you understand the basic problem? Once getWriter() has been called on a servletResponse, a character encoding has been chosen, and it is no longer legal to call getOutputStream(), which is for writing raw data (not characters). It happens to be a SmartClient class reporting this but it's a basic error in the use of servlets.

          What is this URL intended to be returning?

          We would suggest attempting to resolve this by removing the various filters intercepting this URL (looks like authentication, clickstream tracking, and others) until you find the combination of libraries that creates this issue.

          Comment


            #6
            As per your suggestion, we have removed all filters except SmartClient ones. However, the problem insists. Below please find the log. Please NOTE, Jetty 6.1.5 uses Servlet 2.5 and JSP 2.1/2.0. We don't have any problem to run the same SmartClient application on Tomcat. We try Jetty 6 only because it offers some innovative features boost the performance of AJAX applications.


            === 2007-07-25 09:06:28,937 [l0-7] DEBUG ProxyHttpServletResponse - Using charset: ISO-8859-1 (JSSyntaxScannerFilter)
            === 2007-07-25 09:06:28,937 [l0-7] ERROR ProxyHttpServletResponse - Error - getOutputStream() called on a request that has already returned a Writer - stack trace for previous getWriter() call: java.lang.Exception
            at com.isomorphic.servlet.ProxyHttpServletResponse.ge tWriter(ProxyHttpServletResponse.java:188)
            at org.apache.jasper.runtime.JspWriterImpl.initOut(Js pWriterImpl.java:171)
            at org.apache.jasper.runtime.JspWriterImpl.flushBuffe r(JspWriterImpl.java:164)
            at org.apache.jasper.runtime.PageContextImpl.release( PageContextImpl.java:221)
            at org.apache.jasper.runtime.JspFactoryImpl.internalR eleasePageContext(JspFactoryImpl.java:157)
            at org.apache.jasper.runtime.JspFactoryImpl.releasePa geContext(JspFactoryImpl.java:108)
            at org.apache.jsp.index_jsp._jspService(org.apache.js p.index_jsp:225)
            at org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:93)
            at javax.servlet.http.HttpServlet.service(HttpServlet .java:820)
            at org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:373)
            at org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:477)
            at org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:371)
            at javax.servlet.http.HttpServlet.service(HttpServlet .java:820)
            at org.mortbay.jetty.servlet.ServletHolder.handle(Ser vletHolder.java:487)
            at org.mortbay.jetty.servlet.ServletHandler.handle(Se rvletHandler.java:362)
            at org.mortbay.jetty.security.SecurityHandler.handle( SecurityHandler.java:216)
            at org.mortbay.jetty.servlet.SessionHandler.handle(Se ssionHandler.java:181)
            at org.mortbay.jetty.handler.ContextHandler.handle(Co ntextHandler.java:712)
            at org.mortbay.jetty.webapp.WebAppContext.handle(WebA ppContext.java:405)
            at org.mortbay.jetty.servlet.Dispatcher.forward(Dispa tcher.java:268)
            at org.mortbay.jetty.servlet.Dispatcher.forward(Dispa tcher.java:126)
            at org.mortbay.jetty.servlet.DefaultServlet.doGet(Def aultServlet.java:465)
            at javax.servlet.http.HttpServlet.service(HttpServlet .java:707)
            at javax.servlet.http.HttpServlet.service(HttpServlet .java:820)
            at org.mortbay.jetty.servlet.ServletHolder.handle(Ser vletHolder.java:487)
            at org.mortbay.jetty.servlet.ServletHandler$CachedCha in.doFilter(ServletHandler.java:1093)
            at com.isomorphic.js.JSSyntaxScannerFilter.doFilter(J SSyntaxScannerFilter.java:251)
            at org.mortbay.jetty.servlet.ServletHandler$CachedCha in.doFilter(ServletHandler.java:1084)
            at com.isomorphic.servlet.CompressionFilter.doFilter( CompressionFilter.java:248)
            at org.mortbay.jetty.servlet.ServletHandler$CachedCha in.doFilter(ServletHandler.java:1084)
            at org.mortbay.jetty.servlet.ServletHandler.handle(Se rvletHandler.java:360)
            at org.mortbay.jetty.security.SecurityHandler.handle( SecurityHandler.java:216)
            at org.mortbay.jetty.servlet.SessionHandler.handle(Se ssionHandler.java:181)
            at org.mortbay.jetty.handler.ContextHandler.handle(Co ntextHandler.java:712)
            at org.mortbay.jetty.webapp.WebAppContext.handle(WebA ppContext.java:405)
            at org.mortbay.jetty.handler.ContextHandlerCollection .handle(ContextHandlerCollection.java:211)
            at org.mortbay.jetty.handler.HandlerCollection.handle (HandlerCollection.java:114)
            at org.mortbay.jetty.handler.HandlerWrapper.handle(Ha ndlerWrapper.java:139)
            at org.mortbay.jetty.Server.handle(Server.java:313)
            at org.mortbay.jetty.HttpConnection.handleRequest(Htt pConnection.java:506)
            at org.mortbay.jetty.HttpConnection$RequestHandler.he aderComplete(HttpConnection.java:830)
            at org.mortbay.jetty.HttpParser.parseNext(HttpParser. java:514)
            at org.mortbay.jetty.HttpParser.parseAvailable(HttpPa rser.java:211)
            at org.mortbay.jetty.HttpConnection.handle(HttpConnec tion.java:381)
            at org.mortbay.io.nio.SelectChannelEndPoint.run(Selec tChannelEndPoint.java:396)
            at org.mortbay.thread.BoundedThreadPool$PoolThread.ru n(BoundedThreadPool.java:442)

            === 2007-07-25 09:06:28,953 [l0-7] ERROR ProxyHttpServletResponse - Error - getOutputStream() called on a request that has already returned a Writer - stack trace for this getOutputStream() call: java.lang.Exception
            at com.isomorphic.servlet.ProxyHttpServletResponse.ge tOutputStream(ProxyHttpServletResponse.java:144)
            at org.mortbay.jetty.servlet.Dispatcher.forward(Dispa tcher.java:277)
            at org.mortbay.jetty.servlet.Dispatcher.forward(Dispa tcher.java:126)
            at org.mortbay.jetty.servlet.DefaultServlet.doGet(Def aultServlet.java:465)
            at javax.servlet.http.HttpServlet.service(HttpServlet .java:707)
            at javax.servlet.http.HttpServlet.service(HttpServlet .java:820)
            at org.mortbay.jetty.servlet.ServletHolder.handle(Ser vletHolder.java:487)
            at org.mortbay.jetty.servlet.ServletHandler$CachedCha in.doFilter(ServletHandler.java:1093)
            at com.isomorphic.js.JSSyntaxScannerFilter.doFilter(J SSyntaxScannerFilter.java:251)
            at org.mortbay.jetty.servlet.ServletHandler$CachedCha in.doFilter(ServletHandler.java:1084)
            at com.isomorphic.servlet.CompressionFilter.doFilter( CompressionFilter.java:248)
            at org.mortbay.jetty.servlet.ServletHandler$CachedCha in.doFilter(ServletHandler.java:1084)
            at org.mortbay.jetty.servlet.ServletHandler.handle(Se rvletHandler.java:360)
            at org.mortbay.jetty.security.SecurityHandler.handle( SecurityHandler.java:216)
            at org.mortbay.jetty.servlet.SessionHandler.handle(Se ssionHandler.java:181)
            at org.mortbay.jetty.handler.ContextHandler.handle(Co ntextHandler.java:712)
            at org.mortbay.jetty.webapp.WebAppContext.handle(WebA ppContext.java:405)
            at org.mortbay.jetty.handler.ContextHandlerCollection .handle(ContextHandlerCollection.java:211)
            at org.mortbay.jetty.handler.HandlerCollection.handle (HandlerCollection.java:114)
            at org.mortbay.jetty.handler.HandlerWrapper.handle(Ha ndlerWrapper.java:139)
            at org.mortbay.jetty.Server.handle(Server.java:313)
            at org.mortbay.jetty.HttpConnection.handleRequest(Htt pConnection.java:506)
            at org.mortbay.jetty.HttpConnection$RequestHandler.he aderComplete(HttpConnection.java:830)
            at org.mortbay.jetty.HttpParser.parseNext(HttpParser. java:514)
            at org.mortbay.jetty.HttpParser.parseAvailable(HttpPa rser.java:211)
            at org.mortbay.jetty.HttpConnection.handle(HttpConnec tion.java:381)
            at org.mortbay.io.nio.SelectChannelEndPoint.run(Selec tChannelEndPoint.java:396)
            at org.mortbay.thread.BoundedThreadPool$PoolThread.ru n(BoundedThreadPool.java:442)

            2007-07-25 09:06:29.535::WARN: /MyApp/: java.io.IOException: Error - getOutputStream() called on a request that has already returned a Writer

            Comment


              #7
              Hi SyncShock,

              Still wondering what kind of request this is - a .jsp, .js, .html, or ajax call? If its a JSP, does it include SmartClient JSP tags?

              Also, what happens if you remove SmartClient's optional filters (such as the JSSyntaxScannerFilter)?

              Comment


                #8
                The problem insists even I removed JSSyntaxScannerFilter. Actually, we have a jsp file http://localhost/MyApp/index.jsp, and have the following lines in web.xml.

                <welcome-file-list>
                <welcome-file>index.jsp</welcome-file>
                </welcome-file-list>

                When I visit http://localhost/MyApp/index.jsp, no problem at all. However when I visit http://localhost/MyApp/, the problem comes up. Any idea?

                Comment


                  #9
                  That kind of fetch wouldn't ordinarily involve SmartClient at all.

                  What SmartClient servlet or filter have you mapped to that URL? Can you show the relevant parts of web.xml ?

                  Comment


                    #10
                    Code:
                    <!-- ISC init: initializes ISC framework -->
                    	<servlet>
                    		<servlet-name>Init</servlet-name>
                    		<servlet-class>com.isomorphic.base.Init</servlet-class>
                    		<load-on-startup>2</load-on-startup>
                    	</servlet>
                    
                    	<!-- Dynamic Compression -->
                    	<filter>
                    		<filter-name>CompressionFilter</filter-name>
                    		<filter-class>com.isomorphic.servlet.CompressionFilter</filter-class>
                    	</filter>
                    	<filter-mapping>
                    		<filter-name>CompressionFilter</filter-name>
                    		<url-pattern>/*</url-pattern>
                    	</filter-mapping>
                    
                    	<!-- The IDACall servlet handles all Built-in DataSource operations -->
                    	<servlet>
                    		<servlet-name>IDACall</servlet-name>
                    		<servlet-class>com.isomorphic.servlet.IDACall</servlet-class>
                    	</servlet>
                    	<!-- RPCManager uses this URL by default for Built-in DataSource operations -->
                    	<servlet-mapping>
                    		<servlet-name>IDACall</servlet-name>
                    		<url-pattern>/isomorphic/IDACall/*</url-pattern>
                    	</servlet-mapping>
                    	<!-- Built-in DataSource operations backcompat -->
                    	<servlet-mapping>
                    		<servlet-name>IDACall</servlet-name>
                    		<url-pattern>/isomorphic/IDACall.aspx/*</url-pattern>
                    	</servlet-mapping>
                    
                    	<servlet>
                    		<servlet-name>XMLSelect</servlet-name>
                    		<servlet-class>com.isomorphic.xml.XMLSelectServlet</servlet-class>
                    	</servlet>
                    	<servlet-mapping>
                    		<servlet-name>XMLSelect</servlet-name>
                    		<url-pattern>/isomorphic/XMLSelect/*</url-pattern>
                    	</servlet-mapping>
                    <!-- The FileDownload servlet downloads static files, like a webserver -->
                    	<servlet>
                    		<servlet-name>FileDownload</servlet-name>
                    		<servlet-class>com.isomorphic.servlet.FileDownload</servlet-class>
                    	</servlet>
                    	<!-- Use FileDownload servlet to download all static content that's part of the skin, such as
                    	image files, so we can set Expires headers and other cache control directives.  In a
                    	production deployment, you'd want to use a webserver such as Apache to do this.  
                    	-->
                    	<servlet-mapping>
                    		<servlet-name>FileDownload</servlet-name>
                    		<url-pattern>/isomorphic/skins/*</url-pattern>
                    	</servlet-mapping>    
                    	<servlet-mapping>
                    		<servlet-name>FileDownload</servlet-name>
                    		<url-pattern>/isomorphic/system/reference/skin/*</url-pattern>
                    	</servlet-mapping>
                    	<!-- also download .gz versions of SmartClient modules -->
                    	<servlet-mapping>
                    		<servlet-name>FileDownload</servlet-name>
                    		<url-pattern>/isomorphic/system/modules/*</url-pattern>
                    	</servlet-mapping>
                    	<servlet-mapping>
                    		<servlet-name>FileDownload</servlet-name>
                    		<url-pattern>/isomorphic/system/development/*</url-pattern>
                    	</servlet-mapping>
                    <servlet>
                    		<servlet-name>PreCache</servlet-name>
                    		<servlet-class>com.isomorphic.servlet.PreCache</servlet-class>
                    		<load-on-startup>3</load-on-startup>
                    	</servlet>
                    
                    	<!-- Apache AXIS RPC servlet -->
                    	<servlet>
                    		<servlet-name>AxisServlet</servlet-name>
                    		<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
                    	</servlet>
                    	<!-- SOAP RPC requests -->
                    	<servlet-mapping>
                    		<servlet-name>AxisServlet</servlet-name>
                    		<url-pattern>/isomorphic/services/1.0/*</url-pattern>
                    	</servlet-mapping>
                    
                    	<!-- //>RealtimeMessaging -->
                    	<!-- The MessagingServlet is used by realtime messaging -->
                    	<servlet>
                    		<servlet-name>MessagingServlet</servlet-name>
                    		<servlet-class>com.isomorphic.messaging.MessagingServlet</servlet-class>
                    	</servlet>
                    	<!-- Messaging uses this URL by default -->
                    	<servlet-mapping>
                    		<servlet-name>MessagingServlet</servlet-name>
                    		<url-pattern>/isomorphic/messaging/*</url-pattern>
                    	</servlet-mapping>
                    <filter>
                    		<filter-name>JSSyntaxScannerFilter</filter-name>
                    		<filter-class>com.isomorphic.js.JSSyntaxScannerFilter</filter-class>
                    	</filter>
                    	<filter-mapping>
                    		<filter-name>JSSyntaxScannerFilter</filter-name>
                    		<url-pattern>/*</url-pattern>
                    	</filter-mapping>
                    
                    	<filter>
                    		<filter-name>NoCacheFilter</filter-name>
                    		<filter-class>com.isomorphic.servlet.NoCacheFilter</filter-class>
                    	</filter>
                    	<filter-mapping>
                    		<filter-name>NoCacheFilter</filter-name>
                    		<url-pattern>*.xml</url-pattern>
                    	</filter-mapping>
                    	<filter-mapping>
                    		<filter-name>NoCacheFilter</filter-name>
                    		<url-pattern>*.xsl</url-pattern>
                    	</filter-mapping>
                    
                    <!--
                    ======================== End of SmartClient settings ========================
                    -->
                    
                    <!--
                    ======================== ClickStream settings ========================
                    -->
                    	<filter>
                    		<filter-name>clickstreamFilter</filter-name>
                    		<filter-class>com.opensymphony.clickstream.ClickstreamFilter</filter-class>
                    	</filter>
                    	<filter-mapping>
                    		<filter-name>clickstreamFilter</filter-name>
                    		<url-pattern>/*</url-pattern>
                    	</filter-mapping>
                    	<listener>
                    		<listener-class>com.opensymphony.clickstream.ClickstreamListener</listener-class>
                    	</listener>
                    this is our web.xml config.

                    Comment


                      #11
                      We found out the problem is caused by the conflict of Spring and Jetty, which seems unrelated to SmartClient. Thanks for your support.

                      BTW, we're trying to utilize the new feature Continuation of Jetty 6 in our SmartClient internet application. Would Isomorphic like to give us some advices, to which we should pay attention, during our research.

                      Comment


                        #12
                        Hi SyncShock,

                        It looks like a Jetty-specific version of the Messaging Servlet could be written that *might* improve performance for a large number of subscribers with a low volume of messages.

                        However whether there would actually be an improvement is very dependent on the underlying operating system's implementation of threads, the message volume, the quality of Jetty's implementation, and other factors.

                        While Isomorphic Consulting could deliver a custom Messaging Servlet for Jetty, we'd recommend testing your server under the anticipated production load before considering this option.

                        Comment


                          #13
                          Thanks Isomorphic.

                          Our team would like to work with Isomorphic team together to do the research on this possible significant server-side performance improvement based on Jetty's Continuation technology for SmartClient application. What we like to achieve is to improve the end user's interaction experience on our SmartClient-enabled internet, NOT intranet, platform as much as possible.

                          May we establish a private communication channel for this? We can sign an official NDA with Isomorphic if necessary. Please send an email to webmaster@syncshock.com, let's start there. Thanks.

                          Comment

                          Working...
                          X