Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #14216

Re: Apache JDBC utils

Date 2012-05-03 16:58 -0400
From Arne Vajhøj <arne@vajhoej.dk>
Newsgroups comp.lang.java.programmer
Subject Re: Apache JDBC utils
References <jnn1pc$33c$1@dont-email.me> <4fa07113$0$291$14726298@news.sunsite.dk> <20%nr.17070$em4.13305@newsfe21.iad> <4fa2c587$0$292$14726298@news.sunsite.dk> <HDBor.22176$em4.504@newsfe21.iad>
Message-ID <4fa2f169$0$289$14726298@news.sunsite.dk> (permalink)
Organization SunSITE.dk - Supporting Open source

Show all headers | View raw


On 5/3/2012 4:11 PM, Arved Sandstrom wrote:
> On 12-05-03 02:51 PM, Arne Vajhøj wrote:
>> On 5/1/2012 8:14 PM, Arved Sandstrom wrote:
>>> On 12-05-01 08:26 PM, Arne Vajhøj wrote:
>>>> On 4/30/2012 5:55 PM, markspace wrote:
>>>>> I'm making a small website as a personal project using only the JDBC
>>>>> interface. (No ORM, etc.) Well, I did the CRUD for exactly one bean and
>>>>> found it pretty tedious going. So I started looking around for
>>>>> something
>>>>> light-weight to help me out. I found the Apache commons dbutils
>>>>> project:
>>>>>
>>>>> <http://commons.apache.org/dbutils/>
>>>>
>>>>> And: is there a better, light-weight non-ORM package that you might
>>>>> recommend instead? Something a bit more complete.
>>>>
>>>> What are you actually gaining by not using a full blown ORM
>>>> (JPA, traditional Hibernate etc.)?
>>>
>>> Precisely so that you don't have a full-blown ORM with either a native
>>> API or JPA. I'll give you an example: I do integrations with lightweight
>>> ESBs [1], and sometimes I might have to write some simple JDBC in
>>> components and all I want are some Java Beans to represent the ResultSet
>>> rows. Just for packaging. Something like DBUtils could be handy (in fact
>>> I'm delighted that markspace reminded me of this handy API). I
>>> definitely don't want a full-blown JPA ORM in that environment.
>>>
>>> Like I said in another post, if you make an argument that a full-blown
>>> ORM is always preferable to a lightweight one, that's practically
>>> tantamount to saying that it never makes sense to use JDBC either.
>>
>> If we are talking about "single row centric" then I would go for
>> either the heavy ORM to get functionality or plain JDBC to avoid
>> dependency (the last argument is more or less a SE only argument).
>> I would find it difficult to see a good argument for going with
>> the light ORM.
>>
>> For "multi row centric" then I would go for plain JDBC as
>> ORM is not intended for that.
>
> I think I'd analyze it probably the same way. Usually.
>
> However, the situation I am describing here - it's one example, there
> are others - is one where I don't want JPA or native ORM units-of-work
> or anything barely above raw JDBC. It's simply the case that from time
> to time I might want to package a ResultSet row as an object, with zero
> special meaning. That's all I'm saying.
>
> It's not like I often have this requirement. 90+ percent of the tiem
> it's JPA for me, almost all of the rest is plain JDBC. Using a simple OR
> mapper like DBUtils would be very occasional.

Hard to argue against anything being a good choice "very occasional".

Occasionally the requirements are slightly different than the usual.

>>>> I doubt that you will save any code in your app.
>>>
>>> Likely not. That's not why you'd pick a rudimentary mapper.
>>>
>>>> I doubt that the less memory usage will be noticeable.
>>>
>>> Likely not. It's not why I'd make a decision.
>>>
>>>> It is not really a problem that the full blown ORM is hundreds
>>>> of thousands of lines of code, because maintenance is not
>>>> your responsibility.
>>>
>>> It's not, no. But that full-blown ORM with 500,000 lines of code (pretty
>>> close to what EclipseLink 2.2 has in its 'org' package [2]) is going to
>>> have quite a few more defects than an ORM with 5,000 lines of code
>>> (DBUtils has about 8,000 [2]).
>>
>> That is obvious true, but I don't know if it is relevant.
>>
>> If we follow the traditional rule of 1 bug per 1000 lines
>> of code, then we will see:
>>
>> 500 KLOC =>  500 bugs
>> 5 KLOC =>  5 bugs
>>
>> But there are two things to remember:
>> 1) The same usage will only use a smaller portion of the large library.
>> 2) This is when delivered first time. Bugs get fixed as they get found.
>>     The more the code is used the faster the bugs get found.
>>
>> If we compare the 500 KLOC library with the 5 KLOC library then
>> doing what the small library can do may only use 25 or 50 KLOC of
>> the large library.
>>
>> If that is the case and the larger library is used so much more than
>> the smaller library (and the functionality of the larger library
>> that can be done by the smaller library is most likely the
>> functionality most used) that there are 5 or 10 times less bugs
>> left per size, then there may actually be fewer bugs left.
>>
>> Is this just number magic? I don't think so!
>>
>> If you want a stable OS and a stable database would you go for
>> an exotic product with a small code base or a well known
>> product with a much larger code base?
>
> The LOC count isn't one that I'd use to make the decision, Arne.
> Although I'd certainly read the bug database to find out what could hurt.
>
> You mentioned maintenance, not me, and I know from bitter experience
> that ORM problems are *my* problems.
>
> But I'll reiterate that if I went with a small, very rudimentary mapper
> that it would be special case and a situation where a full-blown ORM
> would be massive overkill.

Yes.

And I am sure that such cases do exist.

I am just trying to argue that in most cases a big
jar files is not a problem in itself.

>>> No particular aspersions on EclipseLink, but when one of those defects
>>> is hurting *your* project, even with access to source it's not
>>> straightforward to fix it, and it's not an overnighter to get the EL
>>> team to do so either. With as few lines of code are in DBUtils source,
>>>
>>> *I* can fix it, and readily.
>>
>> I would not want to fix it. I would want something where you can report
>> the bug to someone and let them fix it.
>
> You have no real choice with a large ORM anyway. You report it, and if
> you're lucky a few minor versions down the pipe and a few months later
> you see a fix.

This is the industry way.

>>>> And some of the capabilities (like caching) could become
>>>> very handy in the future.
>>>
>>> The operative word being "could". Leaving aside the other management
>>> capabilities of the persistence context Level 1 cache, like uniqueness
>>> of identity within a PC, if you are constructing objects with a simple
>>> mapper like DBUtils you *have* a cache. Your objects are in memory;
>>> you're not hitting the DB every time you need them.
>>
>> That is not really level 1 cache.
>
> What do you consider to be a cache? A cache means that you've got your
> stuff in a storage area that's faster to access than the original
> location. Usually memory. If I get my stuff through JDBC, and access
> data afterwards off the ResultSet, that's a cache. If I convert that
> ResultSet to a collection of objects, and access data in that collection
> afterwards, that's a cache.
>
> Insofar as this level of caching is similar to a persistence context,
> which is referred to as Level 1 in JPA, I have no problems thinking of
> it as Level 1 equivalent.

I would define an ORM cache as a cache in the ORM code not a cache
in my code.

Otherwise any ORM would have a cache since the O will be in memory.

>>> As for JPA Level 2, well, that's a decision best approached carefully
>>> and not made available by default. I surely don't think you need to go
>>> with JPA just in case you might need Level 2 cache at some point.
>>
>> If it was just that: no. But there are other features that also could
>> become useful.
>
> Hopefully you know what you need early on, considering as how you did
> good requirements analysis. In which case you're using JPA because you
> already know you need it.

I don't think I have ever seen requirements that actually covered
all requirements for the actual lifetime of the application.

Arne

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Apache JDBC utils markspace <-@.> - 2012-04-30 14:55 -0700
  Re: Apache JDBC utils Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-04-30 20:56 -0300
    Re: Apache JDBC utils markspace <-@.> - 2012-04-30 17:50 -0700
  Re: Apache JDBC utils Lew <lewbloch@gmail.com> - 2012-04-30 18:03 -0700
    Re: Apache JDBC utils markspace <-@.> - 2012-04-30 19:27 -0700
      Re: Apache JDBC utils Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-05-01 10:29 -0300
        Re: Apache JDBC utils markspace <-@.> - 2012-05-01 08:57 -0700
          Re: Apache JDBC utils Lew <lewbloch@gmail.com> - 2012-05-02 11:16 -0700
            Re: Apache JDBC utils markspace <-@.> - 2012-05-03 07:51 -0700
    Re: Apache JDBC utils Arne Vajhøj <arne@vajhoej.dk> - 2012-05-01 19:22 -0400
  Re: Apache JDBC utils Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-05-01 10:32 -0700
    Re: Apache JDBC utils markspace <-@.> - 2012-05-01 11:22 -0700
      Re: Apache JDBC utils Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-05-01 15:26 -0700
        Re: Apache JDBC utils Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-05-01 19:44 -0300
  Re: Apache JDBC utils Arne Vajhøj <arne@vajhoej.dk> - 2012-05-01 19:26 -0400
    Re: Apache JDBC utils Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-05-01 21:14 -0300
      Re: Apache JDBC utils Leif Roar Moldskred <leifm@dimnakorr.com> - 2012-05-01 22:22 -0500
        Re: Apache JDBC utils Arne Vajhøj <arne@vajhoej.dk> - 2012-05-03 13:52 -0400
      Re: Apache JDBC utils Arne Vajhøj <arne@vajhoej.dk> - 2012-05-03 13:51 -0400
        Re: Apache JDBC utils Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-05-03 17:11 -0300
          Re: Apache JDBC utils Arne Vajhøj <arne@vajhoej.dk> - 2012-05-03 16:58 -0400
            Re: Apache JDBC utils Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-05-03 18:25 -0300
              Re: Apache JDBC utils Arne Vajhøj <arne@vajhoej.dk> - 2012-05-03 19:55 -0400
    Re: Apache JDBC utils Leif Roar Moldskred <leifm@dimnakorr.com> - 2012-05-01 22:08 -0500
      Re: Apache JDBC utils Arne Vajhøj <arne@vajhoej.dk> - 2012-05-03 13:55 -0400
        Re: Apache JDBC utils Leif Roar Moldskred <leifm@dimnakorr.com> - 2012-05-03 13:44 -0500
          Re: Apache JDBC utils Arne Vajhøj <arne@vajhoej.dk> - 2012-05-03 15:06 -0400
  Re: Apache JDBC utils "John B. Matthews" <nospam@nospam.invalid> - 2012-05-01 23:37 -0400
    Re: Apache JDBC utils Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-05-02 07:37 -0300
      Re: Apache JDBC utils "John B. Matthews" <nospam@nospam.invalid> - 2012-05-02 18:51 -0400
  Re: Apache JDBC utils Jan Burse <janburse@fastmail.fm> - 2012-05-02 12:22 +0200
    Re: Apache JDBC utils markspace <-@.> - 2012-05-02 08:29 -0700
      Re: Apache JDBC utils Jan Burse <janburse@fastmail.fm> - 2012-05-02 22:02 +0200
        Re: Apache JDBC utils Lew <lewbloch@gmail.com> - 2012-05-02 14:22 -0700
          Re: Apache JDBC utils Arved Sandstrom <asandstrom3minus1@eastlink.ca> - 2012-05-02 18:53 -0300
          Re: Apache JDBC utils Jan Burse <janburse@fastmail.fm> - 2012-05-03 00:03 +0200
            Re: Apache JDBC utils Jan Burse <janburse@fastmail.fm> - 2012-05-03 00:14 +0200
            Re: Apache JDBC utils Jan Burse <janburse@fastmail.fm> - 2012-05-03 00:27 +0200
              Re: Apache JDBC utils Arne Vajhøj <arne@vajhoej.dk> - 2012-05-03 14:03 -0400
            Re: Apache JDBC utils Arne Vajhøj <arne@vajhoej.dk> - 2012-05-02 18:58 -0400
            Re: Apache JDBC utils Lew <lewbloch@gmail.com> - 2012-05-02 16:18 -0700
          Re: Apache JDBC utils Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-05-02 15:25 -0700
            Re: Apache JDBC utils Jan Burse <janburse@fastmail.fm> - 2012-05-03 00:59 +0200
              Re: Apache JDBC utils Arne Vajhøj <arne@vajhoej.dk> - 2012-05-03 14:05 -0400
            Re: Apache JDBC utils Lew <lewbloch@gmail.com> - 2012-05-02 16:24 -0700
              Re: Apache JDBC utils Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-05-02 16:35 -0700
              Re: Apache JDBC utils Jan Burse <janburse@fastmail.fm> - 2012-05-03 01:46 +0200
              Re: Apache JDBC utils Jan Burse <janburse@fastmail.fm> - 2012-05-03 01:49 +0200

csiph-web