Just an FYI, I had to fix a bug recently to support a JDK6 version of JDBC.
I believe it was Oracle JDBC.
On Thu, Aug 16, 2018 at 3:06 AM, Sanne Grinovero <sanne(a)hibernate.org>
thanks for confirming all that.
There's of course some risk that future JDBC drivers will break
things, but there's no breaking change in any version 9,10,11,12 ; I
believe it's unlikely and even if there's need for working around a
breaking change, we could evaluate various options. We might want to
re-introduce the usage of Proxy, but I suppose we'll also evaluate
alternatives which didn't exist 10y ago - like you mentioned one would
hope that the JDBC maintainer might introduce default method
implementations, or we could use Multi-Release-Jars to workaround JDK
specific defects. This is assuming the JDBC module isn't spin-off from
the JDK altogether.
It's all wild speculation today, so let's see.. either way I'm
confident that such challenges won't stop us; removing the proxy today
will help with both runtime efficiency and my prototypes with ahead of
I've pushed replacement code for the BlobProxy, will soon work on the
other ones you mentioned too.
On Wed, 15 Aug 2018 at 21:28, Steve Ebersole <steve(a)hibernate.org> wrote:
> (Blob | Clob | NClob)Proxy are intended to do exactly what you said
which is exactly what the comment says. They were developed when we still
base-lined on Java 4 or 5. Java 6 added NClob and IIRC added methods to
Blob and Clob.
> Hopefully if they add methods moving forward, they simply use default
impls. If not we'd potentially be in the same boat sometime down the
road. I'm not against removing them though if you wish.
> If we go this route of statically implementing JDBC contracts, then
another one to consider is ResultSetWrapperProxy..
> On Wed, Aug 15, 2018 at 2:26 PM Sanne Grinovero <sanne(a)hibernate.org>
>> I'm trying to understand if we could remove some of the usages of
>> Clearly it's a long journey and maybe we will never be able to remove
>> them all, but I would at least want to try avoiding most of their neet
>> at runtime - limiting their usage at bootstrap/configuration or other
>> similar "one time" contexts.
>> We're all aware that these proxies have not been introduced lightly:
>> most are necessary or very useful; at least useful enough to prefer
>> having them to not having them; surely the tradeoffs have been
>> So what I'm trying to understand now is if all the tradeoffs made in
>> the past are still actual; some of the related code is > 10 years old;
>> I could use some help with evaluating what could be safely removed.
>> One example: org.hibernate.engine.jdbc.BlobProxy has the following
>> "We use proxies here solely to avoid JDBC version incompatibilities."
>> Today we require Java8 as baseline, and the `java.sql.Blob` did not
>> change in any more recent JDK (I just thouroughly diff-ed the
>> JDK8,9,10,11,12 on this package using Gunnar's jdk-api-diff tool).
>> Would that be a reasonable candidate to replace the Proxy usage with a
>> plain implementation of the relevant interfaces? Clearly this implies
>> I'm betting that future JDKs will not break this again, still I'd
>> rather cleanup this usage today.
>> 1 - Could I go ahead with that?
>> 2 - Any more such cleanups come to mind?
>> hibernate-dev mailing list
hibernate-dev mailing list