[jboss-jira] [JBoss JIRA] (AS7-2968) @PreUpdate entity callback not running in caller's context when Container Managed Transactions are used
jaikiran pai (Commented) (JIRA)
jira-events at lists.jboss.org
Sun Dec 11 10:40:09 EST 2011
[ https://issues.jboss.org/browse/AS7-2968?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12649828#comment-12649828 ]
jaikiran pai commented on AS7-2968:
-----------------------------------
Scott, I haven't looked completely into the details of this. But after a quick glance, I think the instance associating interceptor (StatefulComponentInstanceInterceptor) should be ordered prior to the transaction interceptor. Could you try changing the following order in InterceptorOrder class:
{code}
public static final int ASSOCIATING_INTERCEPTOR = 0x700;
{code}
to
{code}
public static final int ASSOCIATING_INTERCEPTOR = 0x440;
{code}
i.e. move it before the tx interceptors.
I haven't looked too much into the other details yet, but I'll take a look tomorrow. Let me know if this works.
> @PreUpdate entity callback not running in caller's context when Container Managed Transactions are used
> -------------------------------------------------------------------------------------------------------
>
> Key: AS7-2968
> URL: https://issues.jboss.org/browse/AS7-2968
> Project: Application Server 7
> Issue Type: Bug
> Components: EJB, JPA / Hibernate
> Affects Versions: 7.1.0.Beta1
> Reporter: jw
> Assignee: jaikiran pai
> Fix For: 7.1.0.CR1
>
>
> If an Entity Bean has a @PreUpdate listener, the listener is not called in the context of the caller (session bean) in case of Container Managed Transactions.
> As a result, an jndi lookup in the callback for 'java:comp/EJBContext' returns always null. The @PreUpdate callback should run in the context of the caller.
> {noformat}
> @Entity
> @EntityListeners({ MyListener.class })
> public class MyEntity {
> ...
> }
> {noformat}
> {noformat}
> public class MyListener {
>
> @PreUpdate
> @PrePersist
> public void onEntityCallback(Object entity) {
> EJBContext ctx;
>
> ctx = createInitialContext().lookup("java:comp/EJBContext");
> System.out.println(ctx.getCallerPrincipal().getName());
> }
> }
> {noformat}
> {noformat}
> @Stateless
> public class MyServiceBean implements MyServiceRemote {
> @Override
> public void updateEntity(MyEntity entity) {
> entityManager.merge(entity);
> }
> }
> {noformat}
> This listener works fine on @PrePersist (Container- and Bean Managed Transactions) but fails on @PreUpdate with a NullPointerException if container managed transactions are used.
> Workaround: use User Transactions instead of Container Managed Transactions
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list