Skip to main content

[jsr338-experts] Re: Inheritance of Extended Persistence Context

  • From: Linda DeMichiel <linda.demichiel@...>
  • To: jsr338-experts@...
  • Cc: Scott Marlow <smarlow@...>, michael keith <michael.keith@...>
  • Subject: [jsr338-experts] Re: Inheritance of Extended Persistence Context
  • Date: Mon, 18 Jun 2012 14:36:24 -0700
  • Organization: Oracle Corporation



On 6/7/2012 6:07 AM, Scott Marlow wrote:
On 06/01/2012 03:53 PM, Linda DeMichiel wrote:


On 6/1/2012 12:01 PM, Scott Marlow wrote:
I understand that is one possible implementation and point of view. Is
there something that I missed in my reading of
the current 7.6.3.1 wording that requires that?


The extended persistence context is created when the SFSB is
instantiated (JPA spec 7.6.3).
The SFSB is created when it is injected (EJB spec 4.6).
Inheritance only applies when one SFSB instantiates another (JPA spec
7.6.3.1)

Does the XPC inheritance also apply to a SFSB doing a JNDI lookup of another 
local SFSB?

Yes

Is there a distinction on when
the SFSB does the JNDI lookup?

No

If the JNDI lookup occurs before the first SFSB PostConstruct, that is 
probably easier to
handle than (very late) during a business method invocation.


Since both bean instances are in the same EJB container instance, does
that also qualify for inheritance (from the
current wording).


no

I would of expected that portable applications, that want a separate
extended persistence context would instead
reference different persistence unit names:


That would definitely be the case as well.

@PersistenceContext(unitName="OrderEM")
public class MySessionBean implements M

@Stateful
public class DAO1 implements DAO {

@PersistenceContext(unitName="PU_ONE",type=PersistenceContextType.EXTENDED)

private EntityManager entityManager;
...
}

@Stateful
public class DAO2 implements DAO {

@PersistenceContext(unitName="PU_TWO",type=PersistenceContextType.EXTENDED)

private EntityManager entityManager;
...
}


On 06/01/2012 02:40 PM, michael keith wrote:
Right, once the persistence context is removed from the parent SFSB then
there is nothing to inherit :-)

On 01/06/2012 2:09 PM, Linda DeMichiel wrote:
There should be two distinct persistence contexts.

On 6/1/2012 10:15 AM, Scott Marlow wrote:

On 06/01/2012 12:47 PM, Linda DeMichiel wrote:


On 6/1/2012 9:25 AM, michael keith wrote:
Assuming the DAO interface is local and does not have a @Remote
on it,
and also assuming that there is just a forgotten
injection annotation of
@PersistenceContext(type=PersistenceContextType.EXTENDED) on the
EM in
TestService, then the PC
should be inherited by both SFSBs DAO1 and DAO2. If the session
beans
are local then you should not leave the EJB
container instance.
(Does that answer the question?)


Yes, agree.

Scott, was TestService intended to have a transaction-scoped or an
extended persistence context?

For the purpose of this question, lets remove the entity manager from
TestService. I should of removed that before.


@Stateful
@Remote(TestService.class)
public class TestSFSB implements TestService {

@EJB(beanName = "DAO1") private DAO dao1;
@EJB(beanName = "DAO2") private DAO dao2;

public String testfunc() {
dao1.myFunction();
dao2.myFunction();
return "fine";
}
}

@Stateful
public class DAO1 implements DAO {
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager entityManager;

public void myFunction() {
entityManager.find(PersonOrm.class, 123L);
System.out.println("DAO1:" + entityManager);
}
}

@Stateful
public class DAO2 implements DAO {
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager entityManager;

public void myFunction() {
entityManager.find(PersonOrm.class, 123L);
System.out.println("DAO2:" + entityManager);
}
}



On 01/06/2012 11:50 AM, Scott Marlow wrote:
In the interest of ensuring EE application portability, I'd like to
change or add additional wording to the JPA 2.1
"7.6.3.1 Inheritance of Extended Persistence Context" section.

In the following example, instances of beans TestSFSB, DAO1, DAO2
will be "executing in the same EJB container
instance" (PostConstruct for { TestSFSB, DAO1, DAO2} should execute
in the same EJB container instance). One question
that I have, is there a possibility for { TestSFSB DAO1, DAO2}
to not
execute in the same EJB container instance? Is
that EJB container implementation specific?

@Stateful
@Remote(TestService.class)
public class TestSFSB implements TestService {
private EntityManager entityManager;

@EJB(beanName = "DAO1") private DAO dao1;
@EJB(beanName = "DAO2") private DAO dao2;

public String testfunc() {
dao1.myFunction();
dao2.myFunction();
return "fine";
}
}

@Stateful
public class DAO1 implements DAO {
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager entityManager;

public void myFunction() {
entityManager.find(PersonOrm.class, 123L);
System.out.println("DAO1:" + entityManager);
}
}

@Stateful
public class DAO2 implements DAO {
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager entityManager;

public void myFunction() {
entityManager.find(PersonOrm.class, 123L);
System.out.println("DAO2:" + entityManager);
}
}


Text from the JPA 2.0 specification:

"
7.6.2.1 Inheritance of Extended Persistence Context

If a stateful session bean instantiates a stateful session bean
(executing in the same EJB container instance) 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.
"

Text from the JPA 2.1 specification:

"
7.6.3.1 Inheritance of Extended Persistence Context
If a stateful session bean instantiates a stateful session bean
(executing in the same EJB container instance) which
also has such an extended persistence context with the same
synchronization type, 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 stateful session beans differ in
declared synchronization type, the EJBException is
thrown by the container.
"

Depending on the answer to my first question, I'd like to add
clarifying text (to the JPA 2.1 7.6.3.1 section) that
makes it more obvious whether DAO1 + DAO2 (which could execute
in the
same EJB container) will inherit the same
extended persistence context. I'll try to make some suggestions
after
we have answered these questions as to whether
DAO1 + DAO2 will always execute in the same EJB container.

Scott








[jsr338-experts] Inheritance of Extended Persistence Context

Scott Marlow 06/01/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

michael keith 06/01/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Linda DeMichiel 06/01/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Scott Marlow 06/01/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Linda DeMichiel 06/01/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

michael keith 06/01/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Scott Marlow 06/01/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Scott Marlow 06/01/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Linda DeMichiel 06/01/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Scott Marlow 06/07/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Linda DeMichiel 06/18/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Emmanuel Bernard 06/04/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Scott Marlow 06/07/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Werner Keil 06/07/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Scott Marlow 06/11/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Linda DeMichiel 06/18/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Scott Marlow 06/20/2012

[jsr338-experts] Re: Inheritance of Extended Persistence Context

Scott Marlow 06/01/2012
 
 
Close
loading
Please Confirm
Close