On Oct 14, 2009, at 8:15 AM, Jean-Louis MONTEIRO wrote:


Your right!
In the SingletonContainer, we get a new instance (calling callbacks) before
entering in the real invocation mechanisms dealing with security,
transactions, ....

Sure we can and we must fix it.
After digging a bit, i finally decided to fill a JIRA cause we need to
validate the behavior for @Stateless, @Stateful, ... beans.

Our @Stateless and @Stateful PostConstruct/PreDestroy code doesn't allow @TransactionAttribute usage as required by the spec. This was the requirement for @Singleton as well when we implemented them. The ability for @Singleton beans to use @TransactionAttribute in its PostConstruct/PreDestroy callbacks wasn't added till later. We just haven't implemented it yet.

I'll update the JIRA from Bug to Improvement.

There are actually a few EJB 3.1 jiras we should have on file. Will take a stab at adding them next week.

-David

Quintin Beukes-2 wrote:

For what it's worth, I found why this is happening.

When @PostConstruct is executed, it's done so not as a business method
invocation, but rather jumps straight into the InterceptorStack.
If I were to execute this same method from outside the bean, it will
first go through SingletonContainer.invoke, which sets up the
transaction.

Maybe one should configure the transaction prior to executing the
POST_CONSTRUCT interceptors? Since the spec technically only requires
a transaction when the REQUIRED attribute is specified, though
uncomfortable, maybe one could do it only in this case?

Quintin Beukes


Quintin Beukes-2 wrote:

I was busy creating a new mail, so I didn't reply to this (didn't
notice it until I sent the other). It's subject is prefixed with the
JIRA id.

Quintin Beukes



On Wed, Oct 14, 2009 at 4:46 PM, Monteiro Jean-Louis
<[email protected]> wrote:
Any feedback is welcome.
Jean-Louis

-----Message d'origine-----
De : Jean-Louis MONTEIRO (JIRA) [mailto:[email protected]]
Envoyé : mercredi 14 octobre 2009 16:45
À : Monteiro Jean-Louis
Objet : [jira] Created: (OPENEJB-1086) Transaction policies not applied
for lifecycle callback interceptor methods for @Singleton

Transaction policies not applied for lifecycle callback interceptor
methods for @Singleton
------------------------------------------------------------------------------------------

                Key: OPENEJB-1086
                URL: https://issues.apache.org/jira/browse/OPENEJB-1086
            Project: OpenEJB
         Issue Type: Bug
   Affects Versions: 3.1.2
           Reporter: Jean-Louis MONTEIRO


OpenEJB does not seem to apply transaction policies with @Singleton
beans.
My feeling (after checking in the spec) is that we must deal with
transaction policies for PostConstruct/PreDestroy lifecycle callback
interceptor methods. Actually, it's not the case for @Singleton nor
@Stateless whereas we do it for @Stateful.

4.3.14 Transaction Context of Session Bean Methods
{quote}
The implementation of a method defined in a session bean's business
interface or component interface or no-interface view, a web service
method, timeout callback method, or singleton PostConstruct/ PreDestroy
lifecycle callback interceptor method, is invoked in the scope of a
transaction determined by the transaction attribute specified in the
bean's metadata annotations or deployment descriptor.
...
For example, it would be wrong to perform database operations within a stateful session bean's PostConstruct or PreDestroy lifecycle callback interceptor methods and to assume that the operations are part of the
client's transaction. The  PostConstruct and  PreDestroy methods for
stateful and stateless session beans are not controlled by a transaction
attribute because handling rollbacks in these methods would greatly
complicate the session instance's state diagram.
{quote}

4.3.4 Session Bean Lifecycle Callback Interceptor Methods
{quote}
The PostConstruct lifecycle callback interceptor methods for stateless
and stateful session execute in an unspecified transaction context.
{quote}

13.6 is also a good pointer.

So, from my understanding, we should manage transaction policies in
lifecycle methods for @Singleton but not necessary for @MDB @Stateless
and Stateful (an unspecified transaction context).
IMHO, we should add some consistency because the behavior for @Stateless
and @Stateful is different (BTW, i didn't check for MDB).




--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.




Ce message et les pièces jointes sont confidentiels et réservés à l'usage
exclusif de ses destinataires. Il peut également être protégé par le
secret professionnel. Si vous recevez ce message par erreur, merci d'en
avertir immédiatement l'expéditeur et de le détruire. L'intégrité du
message ne pouvant être assurée sur Internet, la responsabilité du groupe Atos Origin ne pourra être recherchée quant au contenu de ce message.
Bien que les meilleurs efforts soient faits pour maintenir cette
transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout
dommage résultant d'un virus transmis.

This e-mail and the documents attached are confidential and intended
solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Atos Origin group
liability cannot be triggered for the message content. Although the
sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be
liable for any damages resulting from any virus transmitted.




--
View this message in context: 
http://www.nabble.com/TR%3A--jira--Created%3A-%28OPENEJB-1086%29-Transaction-policies-not-applied-for-lifecycle-callback-interceptor-methods-for-%40Singleton-tp25892526p25893100.html
Sent from the OpenEJB Dev mailing list archive at Nabble.com.



Reply via email to