ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paul Benedict <pbened...@apache.org>
Subject Re: Odd behavior with CGLIB (lazy loading problem)
Date Wed, 24 Jan 2007 02:01:46 GMT

I have a working example that I can email to you if you're interested. 
Can I email it? Here's a clearer explanation of what Niels and I are 

I have two classes: A which holds an instance of B. I have enhanced lazy 
loading turned on and I query for A with B being lazily loaded. The 
inner callback object which proxies B has a "loaded" boolean property (I 
mistakenly called this "initialized" in the previous email) which 
indicates whether the inner object has been truly loaded or needs to 
execute the query.

If B calls any internal methods in the constructor, which may be 
expected due to data initialization, then "loaded" is immediately marked 
as "true" and the query never executes.


Niels Beekman wrote:
> We had exactly the same issue, calling a method from within the
> constructor triggers "lazy" loading, which obviously isn't very lazy
> anymore.
> We ended up adding enhancer.setInterceptDuringConstruction(false) where
> an Enhancer-object is constructed (2 times in EnhancedLazyResultLoader).
> This could however cause problems when you are accessing uninitialized
> variables (not loaded from DB), but we're fine with that.
> HTH,
> Niels
> -----Original Message-----
> From: Paul Benedict [mailto:paulus.benedictus@gmail.com] On Behalf Of
> Paul Benedict
> Sent: dinsdag 23 januari 2007 5:05
> To: User Ibatis
> Subject: Odd behavior with CGLIB
> Can someone tell me if this is a bug in iBATIS:
> I turned on lazy loading of a class. In the constructor of the object, I
> called a protected method to initialize some properties. Example:
> public MyClassConstructor() {
>    setId(-1);
> }
> Because I called a method, iBATIS marked this class has "loaded" but it 
> was never really loaded. Only by replacing setId(-1) with this.id = -1; 
> was I able to prevent the "loaded" variable from being immediately set.
> I believe there is some sort of sequencing error here. The class should 
> not be considered initialized until after the constructor returns.
> Thoughts?
> Paul

View raw message