You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by JimOR <ji...@clearviewcatv.net> on 2008/11/19 01:29:38 UTC

EntityManager Propagation Problem under 3.1

Apologies in advance for cross-posting, but my post to OpenJPA (
http://n2.nabble.com/EntityManager-Propagation-with-Extended-PersistenceContext-td1495977.html
http://n2.nabble.com/EntityManager-Propagation-with-Extended-PersistenceContext-td1495977.html
)  hasn't gotten any hits.

To repeat from that post, I have:
A) Parent entity with LAZY OneToMany List<Child>, cascade:
PERSIST,MERGE,REFRESH
B) Child entity with EAGER ManyToOne Parent, cascade: PERSIST,MERGE,REFRESH

C)Abstract CRUD class with injected Extended PersistenceContext, and
requisite CRUD methods
D) Parent Stateful bean that extends CRUD
E) Child Stateful bean that extends CRUD

Classes are enhanced in place via ant prior to junit test run.

Under OpenEJB3.0 (OpenJPA 1.0.1), Any/All managed entities show as managed
by either bean, but under OpenEJB 3.1 (with deployed OpenJPA 1.1.0 AND
'latest binary' 1.2.0), only the bean responsible for the load/persist/merge
of an entity shows the entity as managed.

The following snippet works fine under 3.0, but throws an exception under
3.1:

Parent p = parentBean.insert(new Parent("Foo"));
Child c = childBean.insert(new Child("Bar", p));

WARN
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(Ln
516) - Unexpected exception from beforeCompletion; transaction will roll
back
<openjpa-1.1.0-r422266:659716 nonfatal user error>
org.apache.openjpa.persistence.ArgumentException: The given instance
"entity.Parent-6264" is not managed by this context.
FailedObject: entity.Parent-6264


Please help

Thanks,

Jim



-- 
View this message in context: http://www.nabble.com/EntityManager-Propagation-Problem-under-3.1-tp20571571p20571571.html
Sent from the OpenEJB User mailing list archive at Nabble.com.


Re: EntityManager Propagation Problem under 3.1

Posted by David Blevins <da...@visi.com>.
Hi Jim,

I finally got to the bottom of the issue.  There definitely was a bug,  
but it was in OpenEJB 3.0.  We must have inadvertently fixed it when  
we did the stateful container rework between 3.0 and 3.1.

It took me a while to notice this because of all the parent/child  
names in the sample, but it turns out your stateful session beans are  
syblings as they are created like so:


   ParentLocal parent = context.lookup("ParentBeanLocal");
   ChildLocal child = context.lookup("ChildBeanLocal");

In order for the "ChildBean" stateful session bean to really be a  
child it must be created by the ParentBean.  Meaning ParentBean must  
be the one to lookup the ChildBean or have it injected via @EJB.   
Here's a relevant JPA spec quote:

     5.6.2.1 Inheritance of Extended Persistence Context

     If a stateful session bean instantiates a stateful session
     bean which also has such an extended persistence context, the
     extended persistence context of the first stateful session
     bean is inherited by the second stateful session bean and
     bound to it, and this rule recursively applies --
     independently of whether transactions are active or not at
     the point of the creation of the stateful session beans.

     If the persistence context has been inherited by any stateful
     session beans, the container does not close the persistence
     context until all such stateful session beans have been
     removed or otherwise destroyed.

If you add an "@EJB ChildLocal child" ref inside ParentBean and update  
your test code to not lookup the ChildBean and instead get it from the  
ParentBean, than all the tests pass as expected.

Not sure what kind of leak we had in the 3.0 release that allowed non- 
child beans to mess with the persistence context of another stateful  
bean -- sort of a double bug as it also means two unrelated stateful  
beans wouldn't be allowed to have their own private extended  
persistence contexts -- but I'm certainly glad it's gone.

Note that if you rely critically on this "bug" we could add it in as a  
feature.  I use bug in quotes because tracking the persistence context  
by the thread as if it were in a transaction and regardless if  
stateful inheritance could be a useful technique.  One might think of  
it as a new kind of persistence context management that has yet to  
make the spec.

-David


On Jan 27, 2009, at 8:01 PM, David Blevins wrote:

> Hi Jim,
>
> Wanted to give you an update.  I've been looking into this one and  
> so far haven't been able to find the source of the issue.  In  
> addition to your sample I've been adding more tests in this area --  
> the java ee tck has plenty but it's nice to have some of our own.
>
> Seems the basic functionality of extended persistence contexts is  
> working:
>
> http://svn.apache.org/repos/asf/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/EntityManagerPropogationTest.java
>
> I'm going to keep working with your sample, but if you wanted to  
> help expand that test case that could be very useful.  You did some  
> good work in the sample app.
>
> -David
>
>
> On Dec 10, 2008, at 9:33 AM, David Blevins wrote:
>
>>
>> On Nov 21, 2008, at 3:04 PM, JimOR wrote:
>>
>>> David,
>>>
>>> Looks like OpenEJB3.1 is the culprit.  EJB3.0 with JPA 1.0.1, 1.1,  
>>> 1.2 and
>>> 1.3-SNAPSHOT work as expected, but 3.1 with any of the JPA jars  
>>> fails.
>>>
>>> This sample  http://www.nabble.com/file/p20631026/sample.zip  
>>> sample.zip
>>> should give you a head start recreating the scenario.  I had to  
>>> remove the
>>> OpenJPA jars to fit within the file upload size limit, drop them  
>>> into
>>> sample/lib and you should be good to go.
>>>
>>> The sample/test folder contains the junit xml results of the test  
>>> case under
>>> the various classpaths.
>>
>> FYI, filled a JIRA for this:
>>
>> https://issues.apache.org/jira/browse/OPENEJB-970
>> (notifications:  https://issues.apache.org/jira/secure/ViewIssue.jspa?id=12410384&watch=true)
>>
>> Thanks for putting that sample together!
>>
>> -David
>>
>>
>
>


Re: EntityManager Propagation Problem under 3.1

Posted by David Blevins <da...@visi.com>.
Hi Jim,

Wanted to give you an update.  I've been looking into this one and so  
far haven't been able to find the source of the issue.  In addition to  
your sample I've been adding more tests in this area -- the java ee  
tck has plenty but it's nice to have some of our own.

Seems the basic functionality of extended persistence contexts is  
working:

http://svn.apache.org/repos/asf/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/EntityManagerPropogationTest.java

I'm going to keep working with your sample, but if you wanted to help  
expand that test case that could be very useful.  You did some good  
work in the sample app.

-David


On Dec 10, 2008, at 9:33 AM, David Blevins wrote:

>
> On Nov 21, 2008, at 3:04 PM, JimOR wrote:
>
>> David,
>>
>> Looks like OpenEJB3.1 is the culprit.  EJB3.0 with JPA 1.0.1, 1.1,  
>> 1.2 and
>> 1.3-SNAPSHOT work as expected, but 3.1 with any of the JPA jars  
>> fails.
>>
>> This sample  http://www.nabble.com/file/p20631026/sample.zip  
>> sample.zip
>> should give you a head start recreating the scenario.  I had to  
>> remove the
>> OpenJPA jars to fit within the file upload size limit, drop them into
>> sample/lib and you should be good to go.
>>
>> The sample/test folder contains the junit xml results of the test  
>> case under
>> the various classpaths.
>
> FYI, filled a JIRA for this:
>
> https://issues.apache.org/jira/browse/OPENEJB-970
> (notifications:  https://issues.apache.org/jira/secure/ViewIssue.jspa?id=12410384&watch=true)
>
> Thanks for putting that sample together!
>
> -David
>
>


Re: EntityManager Propagation Problem under 3.1

Posted by David Blevins <da...@visi.com>.
On Nov 21, 2008, at 3:04 PM, JimOR wrote:

> David,
>
> Looks like OpenEJB3.1 is the culprit.  EJB3.0 with JPA 1.0.1, 1.1,  
> 1.2 and
> 1.3-SNAPSHOT work as expected, but 3.1 with any of the JPA jars fails.
>
> This sample  http://www.nabble.com/file/p20631026/sample.zip  
> sample.zip
> should give you a head start recreating the scenario.  I had to  
> remove the
> OpenJPA jars to fit within the file upload size limit, drop them into
> sample/lib and you should be good to go.
>
> The sample/test folder contains the junit xml results of the test  
> case under
> the various classpaths.

FYI, filled a JIRA for this:

  https://issues.apache.org/jira/browse/OPENEJB-970
  (notifications:  https://issues.apache.org/jira/secure/ViewIssue.jspa?id=12410384&watch=true)

Thanks for putting that sample together!

-David


Re: EntityManager Propagation Problem under 3.1

Posted by JimOR <ji...@clearviewcatv.net>.

David Blevins wrote:
> 
> Hi Jim,
> 
> I'm not sure what would cause this issue.  We should try isolating  
> things so we can figure out where to look.  First thing would be either:
> 
>    a. swap out the OpenJPA version in your OpenEJB 3.1 install with  
> OpenJPA 1.0.1, or
>    b. take your working OpenEJB 3.0 install and upgrade your OpenJPA  
> version from OpenJPA 1.0.1 to OpenJPA 1.1.0 or OpenJPA 1.2.0
> 
> I'd go with b.  If that recreates the issue than you can rule out  
> OpenEJB and update your post on the OpenJPA list saying you know it  
> isn't an OpenEJB issue.  If it doesn't recreate the issue than we know  
> it's something on our end and we can dig deeper.
> 
> -David
> 
> 
> 
> 

David,

Looks like OpenEJB3.1 is the culprit.  EJB3.0 with JPA 1.0.1, 1.1, 1.2 and
1.3-SNAPSHOT work as expected, but 3.1 with any of the JPA jars fails. 

This sample  http://www.nabble.com/file/p20631026/sample.zip sample.zip 
should give you a head start recreating the scenario.  I had to remove the
OpenJPA jars to fit within the file upload size limit, drop them into
sample/lib and you should be good to go. 

The sample/test folder contains the junit xml results of the test case under
the various classpaths.


Thanks for your help,

Jim

-- 
View this message in context: http://www.nabble.com/EntityManager-Propagation-Problem-under-3.1-tp20571571p20631026.html
Sent from the OpenEJB User mailing list archive at Nabble.com.


Re: EntityManager Propagation Problem under 3.1

Posted by David Blevins <da...@visi.com>.
On Nov 18, 2008, at 4:29 PM, JimOR wrote:

>
> Apologies in advance for cross-posting, but my post to OpenJPA (
> http://n2.nabble.com/EntityManager-Propagation-with-Extended-PersistenceContext-td1495977.html
> http://n2.nabble.com/EntityManager-Propagation-with-Extended-PersistenceContext-td1495977.html
> )  hasn't gotten any hits.
>
> To repeat from that post, I have:
> A) Parent entity with LAZY OneToMany List<Child>, cascade:
> PERSIST,MERGE,REFRESH
> B) Child entity with EAGER ManyToOne Parent, cascade:  
> PERSIST,MERGE,REFRESH
>
> C)Abstract CRUD class with injected Extended PersistenceContext, and
> requisite CRUD methods
> D) Parent Stateful bean that extends CRUD
> E) Child Stateful bean that extends CRUD
>
> Classes are enhanced in place via ant prior to junit test run.
>
> Under OpenEJB3.0 (OpenJPA 1.0.1), Any/All managed entities show as  
> managed
> by either bean, but under OpenEJB 3.1 (with deployed OpenJPA 1.1.0 AND
> 'latest binary' 1.2.0), only the bean responsible for the load/ 
> persist/merge
> of an entity shows the entity as managed.
>
> The following snippet works fine under 3.0, but throws an exception  
> under
> 3.1:
>
> Parent p = parentBean.insert(new Parent("Foo"));
> Child c = childBean.insert(new Child("Bar", p));
>
> WARN
> org 
> .apache 
> .geronimo.transaction.manager.TransactionImpl.beforeCompletion(Ln
> 516) - Unexpected exception from beforeCompletion; transaction will  
> roll
> back
> <openjpa-1.1.0-r422266:659716 nonfatal user error>
> org.apache.openjpa.persistence.ArgumentException: The given instance
> "entity.Parent-6264" is not managed by this context.
> FailedObject: entity.Parent-6264

Hi Jim,

I'm not sure what would cause this issue.  We should try isolating  
things so we can figure out where to look.  First thing would be either:

   a. swap out the OpenJPA version in your OpenEJB 3.1 install with  
OpenJPA 1.0.1, or
   b. take your working OpenEJB 3.0 install and upgrade your OpenJPA  
version from OpenJPA 1.0.1 to OpenJPA 1.1.0 or OpenJPA 1.2.0

I'd go with b.  If that recreates the issue than you can rule out  
OpenEJB and update your post on the OpenJPA list saying you know it  
isn't an OpenEJB issue.  If it doesn't recreate the issue than we know  
it's something on our end and we can dig deeper.

-David