Re: New significance of holdable result sets in Java 8

From: Dave Cramer <pg(at)fastcrypt(dot)com>
To: Marko Topolnik <marko(dot)topolnik(at)gmail(dot)com>
Cc: List <pgsql-jdbc(at)postgresql(dot)org>
Subject: Re: New significance of holdable result sets in Java 8
Date: 2014-11-12 18:51:45
Message-ID: CADK3HHLShS4BiyMc=_1CCiz+JWykGzQ=ky-JaTJnHLd-9SL68w@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Marko,

When you say holdable cursors are you referring to a holdable cursor
outside of a transaction? It seems so because the transaction commits after
leaving the service layer ?

If so these are not without significant cost on the server side.

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca

On 12 November 2014 10:22, Marko Topolnik <marko(dot)topolnik(at)gmail(dot)com> wrote:

> As of the release of Java 8 and its Streams API a new door has opened for
> many things, including an important improvement in the way RESTful services
> can be implemented. Let me briefly describe the architecture with Spring's
> REST support: an MVC framework is used where the Controller dispatches the
> HTTP request to a Service method; the Service method contacts the database
> and returns a Model-oriented representation of the response; the View layer
> then transforms it into the actual HTTP response bytes.
>
> Data is passed from Controller to View as the return value of a method.
> Traditionally, if you wanted a collection-shaped response, you would return
> a List. This meant eager loading of all data needed for the response, which
> caused scalability issues related to the JVM heap space.
>
> With the Streams API it is now very convenient to return a
> lazily-evaluated stream of Model objects. It is also very convenient to
> make this stream pull data directly from an underlying ResultSet,
> tronsforming each row on-the-fly into a Model object. This, however, calls
> for holdable result sets because the transaction commits when program
> control leaves the Service layer.
>
> The Spring team has recognized the relevance of the above use case and
> with release 4.1.2 they have introduced a specific enhancement needed to
> support result sets holdable into the View layer (albeit only when JDBC is
> used over Hibernate). This is described in the issue SPR-12349 [1]. Spring
> also plans to support this use case with additional helper code which turns
> Hibernate's ScrollableResults into a Stream (SPR-12388 [2]).
>
> The above could raise the level of interest of the PostgreSQL JDBC team in
> implementing holdable result sets backed by native holdable cursors instead
> of the current client-side cursors, which don't allow the space complexity
> to be reduced from O(n) to O(1) on the JVM side. I am aware that this is
> not a trivial endeavor as it requires intervention into the FE/BE protocol,
> but I would nevertheless propose that this concern be reassessed in the
> light of new developments in the Java ecosystem.
>
> Regards,
> Marko Topolnik
>
>
>
> [1] https://jira.spring.io/browse/SPR-12349
> [2] https://jira.spring.io/browse/SPR-12388
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc
>

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Marko Topolnik 2014-11-12 18:58:33 Re: New significance of holdable result sets in Java 8
Previous Message George Woodring 2014-11-12 18:48:09 Anyway to tell jdbc to use server timezone?