Re: New significance of holdable result sets in Java 8 - Mailing list pgsql-jdbc

From Dave Cramer
Subject Re: New significance of holdable result sets in Java 8
Date
Msg-id CADK3HHLShS4BiyMc=_1CCiz+JWykGzQ=ky-JaTJnHLd-9SL68w@mail.gmail.com
Whole thread Raw
In response to New significance of holdable result sets in Java 8  (Marko Topolnik <marko.topolnik@gmail.com>)
Responses Re: New significance of holdable result sets in Java 8  (Marko Topolnik <marko.topolnik@gmail.com>)
Re: New significance of holdable result sets in Java 8  (Kevin Wooten <kdubb@me.com>)
List 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.topolnik@gmail.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@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-jdbc

pgsql-jdbc by date:

Previous
From: George Woodring
Date:
Subject: Anyway to tell jdbc to use server timezone?
Next
From: Marko Topolnik
Date:
Subject: Re: New significance of holdable result sets in Java 8