openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Dick <michael.d.d...@gmail.com>
Subject Re: OpenJPA Date Proxy serialization problem when using entities with GWT
Date Wed, 23 Mar 2011 13:22:31 GMT
I haven't had a chance to look at your example application, but I think we
need to make some changes to the way we handle proxies.

Currently there's no way to prevent proxies from being inserted. It's not
intuitive when they will be inserted, and they can be tough to remove. What
I'd propose is to make it work something like this :

if openjpa.ProxyManager.TrackChanges == False :
    # No proxies are inserted. Ever.

else :

    if openjpa.DetachState.DetachedStateField == "true":
        # proxies are inserted when the entity is flushed (or committed)
        # proxies are not removed when the entity is detached
        # proxies are not removed when the entity is serialized

   elif openjpa.DetachState.DetachedStateField == "transient" :
        # proxies are inserted when the entity is flushed (or committed)
        # proxies are not removed when the entity is detached
        # proxies are removed when the entity is serialized

    elif openjpa.DetachState.DetachedStateField == "false" :
        # proxies are inserted when the entity is flushed (or committed)
        # proxies are removed when the entity is detached
        # proxies are removed when the entity is serialized

>From what I've seen none of these are accurate for trunk, and the related
code path is a bit tangled (or I just haven't groked it).

For your specific use case, would you want the proxies to ever be inserted?

-mike


On Sat, Mar 19, 2011 at 7:27 AM, Prashant Bhat <prashant.mr@gmail.com>wrote:

> Hi,
>
> I've created a sample project to explore this issue. Please see the
> attached sample project.
>
> To run this test, execute this maven command: mvn compile openjpa:enhance
> gwt:compile test
>
> The GWT compiler takes long time to compile. Once it is complete, this will
> start a jetty server and opens URL http://localhost:8080/ in the default
> browser. Now click on the 'Save Sales Orders' which fails with the following
> exception.
>
> com.google.gwt.user.client.rpc.SerializationException: Type
> 'org.apache.openjpa.util.java$util$Date$proxy'
>
> I really appreciate your help in solving this or any suggestion to use
> alternate approach, Thanks.
>
> Regards,
> Prashant
>
> On Thu, Mar 10, 2011 at 11:26 PM, Michael Dick <michael.d.dick@gmail.com>wrote:
>
>> Hi Prashant,
>>
>> I've been looking into the Date proxies recently. What I've found is that
>> the proxies are removed if you serialize the entity or use detachCopy()
>> (in
>> this case the original entity retains the proxies and the new copy does
>> not
>> have them). I'm looking into a better solution for this use case, but the
>> detachment code is pretty tangled, and it might take a little while to
>> work
>> out a safe option.
>>
>> I'm not sure why using a DTO didn't work for you. How did you copy the
>> date
>> field from your entity?
>>
>> -mike
>>
>> On Wed, Mar 9, 2011 at 9:13 PM, Prashant Bhat <prashant.mr@gmail.com>
>> wrote:
>>
>> > Hi All,
>> >
>> > We're developing an application using OpenJpa 2.1, Spring-3.0.5 and
>> > GWT-2.2.0. This integration works for all other types in the entity, but
>> > fails for fields of type Date with the following exception:
>> > --
>> > com.google.gwt.user.client.rpc.SerializationException: Type
>> > 'org.apache.openjpa.util.java$util$Date$proxy' was not included in the
>> set
>> > of types which can be serialized by this SerializationPolicy or its
>> Class
>> > object could not be loaded. For security purposes, this type will not be
>> > serialized.: instance = Sat Dec 31 00:00:00 SGT 2011
>> > --
>> > I tried using DTO instead of using an entity directly, but when date
>> > property is copied from Entity object to DTO, the same proxy will be
>> set.
>> > So
>> > it doesn't work either.
>> >
>> > When searched, I found lot of references to detaching the entity to
>> remove
>> > all proxies needed by Jpa. It works, but this needs to be explicitly
>> > called,
>> > while the same works without calling this, in our Swing app which gets
>> the
>> > serialized objects through Spring Remoting. And also, as there're a lot
>> of
>> > DAOs already written, this is going to be major change.
>> >
>> > So, is there a openjpa configuration setting to use, so that all proxies
>> > are
>> > removed on em.close() ? I really appreciate any help to solve this.
>> >
>> > Thanks,
>> > Prashant
>> >
>>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message