geronimo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Aaron Mulder" <ammul...@alumni.princeton.edu>
Subject Re: container-transaction attributes per method
Date Mon, 07 Aug 2006 14:44:08 GMT
On 8/7/06, Unger, Milan <Milan.Unger@siemens.com> wrote:
> Hi Michael,
>
> I possibly find the reason of my problem so just to inform others: what I have done wrong
was that I'm calling local methods of the same class (session bean) so there is no chance
for container to apply transaction attributes. The correct call will be using EntityContext:
> (ProductFacadeLocal)context.getEJBLocalObject ()).methodWithTransAttribute();

Thanks for reporting back -- that definitely sounds like the source of
the problem.

Aaron

> Regarding your problem: AFAIK, this is common behavior of EJB containers - if you get
collection of entities or uses CMR with  collection multiplicity you cannot access that collection
outside of transaction - IMO due to ACID requirements of transactions, but I'm not sure about
reason. If used in transaction the all entities that are affected are potentially locked 
untill you don't finish it - which could lead to deadlocks if this is timely operation.
>
> Usual method to solve this are data value objects, retrieving only keys of entities instead
of collection of entities using select methods and using transactions only when accessing
single entity (with regards to efficiency of this) or when ACID transaction is needed for
storing of methods, playing with trans-attribute is also part of this.
>
> Regards, Milan.
>
> -----Original Message-----
> From: Ueberbach, Michael [mailto:michael.ueberbach@dbh.de]
> Sent: po 7. 8. 2006 12:58
> To: user@geronimo.apache.org
> Subject: AW: container-transaction attributes  per method
>
> Hi Milan,
>
> your'e right. The formulation of the first part of my answer is definitly wrong. In fact
I wanted to point to the situation I mentioned in the second part
> (but as I see now this is not the same problem as yours).
> I tried to use the "Supports" attribute for a method inside a session bean that only
had the task to retrieve data by reading some entities (CMP). In general this method should
be called outside from any existing transaction and so there should'nt be opened a new one.
While the entity has relations to other entities (CMR) the container threw the exception you
mentioned ("CMR field Set must be used in same transaction ... " ).
> So to get it working I had to change the attribute to "Required" although for my purpose
I didn't need a transaction and therefore didn't want some.
> I found this behaviour somewhat astonishing and I do not know whether it's according
to the specs.
> Do you know a reason for it?
>
> regards
> Michael
>
>
> -----Urspr√ľngliche Nachricht-----
> Von: Unger, Milan [mailto:Milan.Unger@siemens.com]
> Gesendet: Montag, 7. August 2006 11:27
> An: user@geronimo.apache.org
> Betreff: RE: container-transaction attributes per method
>
>
> Hi Michael,
>
> IMO,  the Required means that container will initiate transaction (below I attached extract
of section 17.6.2.7 from EJB 2.1 Spec where this is explicitely stated). There is other attribute
"Mandatory" that works in the way you assumed. Starting user transaction from EJB business
is prohibited by EJB Spec.
>
> The problem with cmr field is more less clear, but what I want is to call time consuming
operation from MDB which traverse through entity beans -- no transaction associated to avoid
table locking -- while I need separate ACID transactions for every  entity to store changes
made on it. Both operations should be on same the same session bean (the best solution).
>
> I played a bit with transaction attributes and if I change transaction context of the
all methods to Required (Style 1) and select particular methods with NotSupported attribute,
than it works with one strange behaviour
>
> calling method with NotSupported attribute suppress transaction - ok,
> calling method with Required attribute from method with NotSupported will have no associated
transaction, but method called from this one will it have associated - in this case it is
also not provided by client.
>
> Little bit tricky to get appropriate behaviour.
>
> Regards, Milan.
>
>
>
>
>  17.6.2.7 Transaction Attribute Summary
>           The following table provides a summary of the transaction context that the
container passes to the busi-
>           ness method and resource managers used by the business method, as a function
of the transaction
>           attribute and the client's transaction context. T1 is a transaction passed
with the client request, while T2
>           is a transaction initiated by the container.
>
>       Transaction Attribute Summary
>                                                                    Transaction associated
   Transaction associated
>             Transaction attribute       Client's transaction       with business method
     with resource managers
>                                                   none                      none    
                  none
>                 NotSupported
>                                                    T1                       none    
                  none
>                                                   none                       T2     
                   T2
>                 Required
>                                                    T1                        T1     
                   T1
>                                                   none                      none    
                  none
>                 Supports
>                                                    T1                        T1     
                   T1
>                                                   none                       T2     
                   T2
>                 RequiresNew
>                                                    T1                        T2     
                   T2
>                                                   none                      error   
                  N/A
>                 Mandatory
>                                                    T1                        T1     
                   T1
>                                                   none                      none    
                  none
>                 Never
>                                                    T1                       error   
                  N/A
>
>
> -----Original Message-----
> From: Ueberbach, Michael [mailto:michael.ueberbach@dbh.de]
> Sent: po 7. 8. 2006 9:30
> To: user@geronimo.apache.org
> Subject: AW: container-transaction attributes  per method
>
> Hello Milan,
>
> as far as I can see there seem's to be an misunderstandig of the transaction attribute
"Required". Setting this attribute means that there has to be an open transaction already,
otherwhile the container will throw this exception. If "Required" ist set the caller of the
method is responsible for the existence of the "required" transaction.
> As I experienced there is a special point when using cmr: If you want to call a method
that looks for an entity with relations to other entities, you are forced to set the "Required"
attribute, even if you only want to read the data without changing them.
>
> regards
> Michael
>
> -----Urspr√ľngliche Nachricht-----
> Von: Unger, Milan [mailto:Milan.Unger@siemens.com]
> Gesendet: Samstag, 5. August 2006 12:36
> An: user@geronimo.apache.org
> Betreff: container-transaction attributes per method
>
>
> Hallo,
>
> I have problem to define transaction attributes per session bean methods in geronimo
1.1.
>
> I set the transaction attributes (Style 1) for all methods to "Supports" and then set
Style 2 attributes for some methods to "Required" (see below). Anyway, when calling that methods,
there is no transaction associated with the method call, so I get "CMR field Set must be used
in same transaction ... " exception -- the called CMP entity bean has "Required" transaction
attributes.
>
> Do you know a reason what is wrong?
>
> Regards, Milan.
>
>
> <container-transaction>
>             <method>
>                 <ejb-name>ProductFacadeBean</ejb-name>
>                 <method-name>storeProduct</method-name>
>             </method>
>             <trans-attribute>Required</trans-attribute>
>         </container-transaction>
>         <container-transaction>
>             <method>
>                 <ejb-name>ProductFacadeBean</ejb-name>
>                 <method-name>storeLink</method-name>
>             </method>
>             <trans-attribute>Required</trans-attribute>
>         </container-transaction>
>         <container-transaction>
>             <method>
>                 <ejb-name>ProductFacadeBean</ejb-name>
>                 <method-name>storeLinkWithProduct</method-name>
>             </method>
>             <trans-attribute>Required</trans-attribute>
>         </container-transaction>
>         <container-transaction>
>             <method>
>                 <ejb-name>ProductFacadeBean</ejb-name>
>                 <method-name>*</method-name>
>             </method>
>             <trans-attribute>Supports</trans-attribute>
>         </container-transaction>
>
>
>
>

Mime
View raw message