On Tue, Aug 4, 2009 at 11:10 AM, Jean-Baptiste BRIAUD -- Novlog <
[email protected]> wrote:

>
> I can tell OpenJPA rocks, what I did had been tested impossible to do with
> other frameworks.


Can we quote you on that?  :-)  Thanks so much for vote of confidence.  Much
appreciated.

Kevin


>
>
> Thanks a lot.
>
>
> On Aug 4, 2009, at 15:25 , Michael Dick wrote:
>
>  Hi Jean-Baptiste,
>>
>> The stack shows that you're using OpenJPA's automatic enhancement
>> mechanism
>> (subclassing). Have you tried using build time enhancement [1]?
>>
>> [1] http://openjpa.apache.org/entity-enhancement.html
>>
>> -mike
>>
>> On Tue, Aug 4, 2009 at 7:58 AM, Jean-Baptiste BRIAUD -- Novlog <
>> [email protected]> wrote:
>>
>>  One more precision : it is not failling if I call getField() but
>>> apparently
>>> only if field is a collection and if I call .size() method.
>>> Could that be a bug somewhere in enhancement or proxy of collection ?
>>>
>>> To illustrate : an exemple where A has a collection of B :
>>>
>>>
>>> // Here, A had been detached and entity manager had been closed
>>> // Note that B had not explicitly detached.
>>>
>>> // The collection of A came from a query "SELECT a FROM A a" but with a
>>> fetch plan to restrict B and other values not to be retreived.
>>>
>>> for(A a : collection of A) {
>>> B bs = a.getB(); // is not null but can't be evaluated in the debugger
>>> due
>>> to a NPE even if the console do not show any stack
>>> if (bs != null) {
>>>      // SO we're going here because bs is not null. Don't know what's
>>> inside as it can't be evaluated in the debugger.
>>>      bs.size(); // NPE is here in the console and also in the debugger.
>>> }
>>> }
>>>
>>> Here is the stack :
>>>
>>>      NullPointerException : The exception has no message in it
>>> java.lang.NullPointerException
>>>      at
>>> org.apache.openjpa.enhance.p$q$A$pcsubclass.pcReplaceField(Unknown
>>> Source)
>>>      at
>>>
>>> org.apache.openjpa.kernel.StateManagerImpl.replaceField(StateManagerImpl.java:3025)
>>>      at
>>>
>>> org.apache.openjpa.kernel.StateManagerImpl.storeStringField(StateManagerImpl.java:2498)
>>>      at
>>>
>>> org.apache.openjpa.kernel.StateManagerImpl.storeString(StateManagerImpl.java:2489)
>>>      at
>>>
>>> org.apache.openjpa.jdbc.meta.strats.StringFieldStrategy.load(StringFieldStrategy.java:155)
>>>      at
>>> org.apache.openjpa.jdbc.meta.FieldMapping.load(FieldMapping.java:813)
>>>      at
>>>
>>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1056)
>>>      at
>>>
>>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1008)
>>>      at
>>>
>>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:678)
>>>      at
>>>
>>> org.apache.openjpa.kernel.DelegatingStoreManager.load(DelegatingStoreManager.java:116)
>>>      at
>>> org.apache.openjpa.kernel.ROPStoreManager.load(ROPStoreManager.java:78)
>>>      at
>>>
>>> org.apache.openjpa.kernel.StateManagerImpl.loadFields(StateManagerImpl.java:2921)
>>>      at
>>>
>>> org.apache.openjpa.kernel.StateManagerImpl.loadField(StateManagerImpl.java:2999)
>>>      at
>>>
>>> org.apache.openjpa.kernel.StateManagerImpl.fetchObjectField(StateManagerImpl.java:2242)
>>>      at
>>>
>>> org.apache.openjpa.kernel.StateManagerImpl.fetchField(StateManagerImpl.java:778)
>>>      at
>>>
>>> org.apache.openjpa.kernel.StateManagerImpl.fetch(StateManagerImpl.java:740)
>>>      at
>>>
>>> org.apache.openjpa.enhance.RedefinitionHelper$1.invoke(RedefinitionHelper.java:230)
>>>      at $Proxy21.size(Unknown Source)
>>>
>>>
>>>
>>> On Aug 4, 2009, at 14:41 , Jean-Baptiste BRIAUD -- Novlog wrote:
>>>
>>> it is still failling !
>>>
>>>> After detaching and even closing the entity manager, accessing a not
>>>> retreived field using fetch plan cause a NPE in pcReplaceField ...
>>>>
>>>> I'm completly blocked and in the dark ... I even don't see where
>>>> investigating more now ...
>>>>
>>>> Any idea ?
>>>>
>>>>
>>>>
>>>> On Aug 4, 2009, at 11:51 , Jean-Baptiste BRIAUD -- Novlog wrote:
>>>>
>>>>
>>>>  On Aug 4, 2009, at 03:06 , Michael Dick wrote:
>>>>>
>>>>>
>>>>>  Hi,
>>>>>>
>>>>>> Have you tried detaching your entities? When an entity is detached
>>>>>> OpenJPA
>>>>>> won't go to the database to load a field. So we'll return null for
>>>>>> anything
>>>>>> that isn't in your fetch group (exception : if you load the field
>>>>>> prior
>>>>>> to
>>>>>> detaching then it will be available).
>>>>>>
>>>>>>  This is a good point and it had worked, but I'm puzzled : I thought
>>>>> closing the entityManager will detach managed entities ... and
>>>>> apparently it
>>>>> is not the case.
>>>>> If I want to detach entity, I have to detach it explicitly, I didn't
>>>>> spot
>>>>> that.
>>>>>
>>>>>
>>>>>> You can detach by calling EntityManager.clear() or
>>>>>> OpenJPAEntityManager.detach(Object o). Either way it'll be a lot
>>>>>> easier
>>>>>> than
>>>>>> creating your own proxy class.
>>>>>>
>>>>>>  Sure, it is a *lot* more easier :-)
>>>>> I'm using detachAll to detach a full collection at once.
>>>>> I'm not sure about the behavior of clear(), should clear all managed
>>>>> entity ?
>>>>>
>>>>> By the way, this detach behavior will be ammended in version 2.x, I
>>>>> might
>>>>> try this version, but I feel it could be risky ... On the other hand,
>>>>> my
>>>>> project's time frame fit well with this version 2.
>>>>> Any feedback on 2.0 relliability ?
>>>>>
>>>>>
>>>>>  Hope this helps,
>>>>>>
>>>>>>  It solve the problem, big big thanks !
>>>>>
>>>>>  -mike
>>>>>>
>>>>>>
>>>>>> Jean-Baptiste BRIAUD -- Novlog wrote:
>>>>>>
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> My question is "is there simpler things to do ?"
>>>>>>> Please, review that idea and don't hesitate to comment ...
>>>>>>>
>>>>>>> Step 1 : I want partial object, not hashtables. It could be a Person
>>>>>>> with only some attributes having values.
>>>>>>> this concern not only @Basic attribute but also any relational
>>>>>>> attributes like @ManyToOne, ...
>>>>>>> => I used fetch plan and it works fine.
>>>>>>>
>>>>>>> Step 2 : I'm using an Apache lib via a third party framework that
>>>>>>> explore all accessors (beanutils).
>>>>>>> Unfortunatly, unretreived attributes came with a proxy.
>>>>>>> As a consequence, all unreitreived attributes are now retreived
>>>>>>> wasting all the benefit of having used fetch plan ...
>>>>>>>
>>>>>>> Step 3 : I first try to get rid of that proxies but without success,
>>>>>>> so I though I could just have my own proxy that could subclass the
>>>>>>> OpenJPA default proxy
>>>>>>> and just ensure in my subclass that when I need no proxy, the default
>>>>>>> behavior is bypassed.
>>>>>>>
>>>>>>> What do you think about that idea ?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>  --
>>>>>> View this message in context:
>>>>>>
>>>>>> http://n2.nabble.com/Custom-proxy-%3A-idea-review-needed-tp3376839p3381672.html
>>>>>> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>

Reply via email to