----- İletilen Mesaj -----
Kimden: Gurkan Erdogdu <[email protected]>
Kime: Arne Limburg <[email protected]>
Gönderildiği Tarih: 23 Ağustos 2011 14:00 Salı
Konu: Yan: AW: Transactional events and the TransactionService


>>>because of the missing implementation of the TransactionService, this 
>>>problem will occur in EE-environments, 


Yes, currently only OpenEJB plugin supports it. If you want another, has to 
implement how Geronimo does.

https://svn.apache.org/repos/asf/geronimo/server/trunk/plugins/openejb/geronimo-openejb/src/main/java/org/apache/geronimo/openejb/cdi/GeronimoTransactionService.java

For  common TransactionService implementation, my choice is number 2

Gurkan



________________________________
Kimden: Arne Limburg <[email protected]>
Kime: "[email protected]" <[email protected]>; Gurkan 
Erdogdu <[email protected]>
Gönderildiği Tarih: 23 Ağustos 2011 10:32 Salı
Konu: AW: Transactional events and the TransactionService

Hi Gurkan,

aktually I think OWB is violating Section 10.4.4 of the spec. In the 
environment I am talking about, a JTA transaction is active, but the events are 
fired directly as if it were not. The reason is simply, that OWB does not 
recognize the active transaction, because of the missing TransactionService. 
Also the environment I am talking about is non EE, because of the missing 
implementation of the TransactionService, this problem will occur in 
EE-environments,
 too. What I am saying is, that currently OWB will not use transactional 
events, even when running in JBoss or Glassfish (I'll confirm this...).

I discussed another (less invasive) option to solve this off this list with 
Mark and Jens Schumann:
Our problem is: How can OWB recognize that there is an active JTA transaction?
1. My solution (which is in alignment with the JTA standard) would be to use 
the standardized location of the TransactionSynchronizationRegistry in JNDI.
2. The solution proposed by Mark and Jens is to write a general 
TransactionService that does a JNDI-lookup to get the TransactionManager. Since 
the JNDI-location of the TransactionManager is not standardized by the JTA 
spec, we would make this location configurable via openwebbeans.properties. 
With this solution the work to integrate a new application server would be just 
to specify the JNDI-location of the
 TransactionManager.

Regards,
Arne

-----Ursprüngliche Nachricht-----
Von: Gurkan Erdogdu [mailto:[email protected]] 
Gesendet: Dienstag, 23. August 2011 09:04
An: [email protected]
Betreff: Yan: Transactional events and the TransactionService

Hello Arne,

I do not see any reason to implement a new TransactionService implementation 
for your non-JavaEE environment (if there is a chance to get Transaction and TM 
from your environment) and use it.

Spec talks about JTA transactions. See Spec Section 10.4.4, Transactional 
observer methods

Your idea is related to introduce a new spec requirement :) This is another 
story.....


Gurkan



________________________________
Kimden: Arne Limburg
 <[email protected]>
Kime: "[email protected]" <[email protected]> Gönderildiği 
Tarih: 22 Ağustos 2011 12:08 Pazartesi
Konu: Transactional events and the TransactionService

Hi,

I am working in a non-java-ee-environment where I need transactional CDI events.
The org.apache.webbeans.spi.TransactionService is needed to support 
transactional events in OWB. I recognized, that the only implementation of this 
service in the OWB code base is the OpenEJBTransactionService.
Imho it is desirable to implement a more general approach that works out of the 
box in ee-environments (without OpenEJB) and can be
 configured in non-ee-environments.
Unfortunately this is not as easy as it sounds, since our TransactionService 
needs access to the javax.transaction.Transaction and the 
javax.transaction.TransactionManager and there currently is no standardized way 
to access this in Java EE (i.e. no standardized JNDI name).
However there is a standardized way to access a 
javax.transaction.TransactionSynchronizationRegistry via JNDI, which is 
recommended by the JTA spec and would suffice our needs.
Now I wonder how this could be integrated into OWB smoothly:
Currently the TransactionalEventNotifier uses the TransactionService to obtain 
a javax.transaction.Transaction and do the synchronization with it. To achieve 
a more general approach here it should access a 
javax.transaction.TransactionSynchronizationRegistry here instead. But where to 
get such registry from?

1.      The TransactionalEventNotifer directly searches the
 TransactionSynchronizationRegistry via JNDI. Easiest solution that is at the 
same time the least flexible solution: If someone would like to provide the 
TransactionSynchronizationRegistry via another way, this simply would not be 
possible. So to me this seems to be a bad solution

2.      Add getTransactionSynchronizationRegistry() to our TransactionService 
interface. Two drawbacks here: First this has to be done with a minor version 
update (no big problem, we could do this with OWB 1.2). Second problem: We are 
still not able to implement a generic approach since such generic 
TransactionService would also have to implement getTransactionManager() and 
getTransaction() which cannot be accessed in a generic approach.

3.      We add a complete new SPI, something like 
TransactionSynchronizationService, which specifies the method 
registerTransactionSynchronization and deprecate that method in the 
TransactionService.
 We then could implement an implementation for that service that looks up the 
TransactionSynchronizationRegistry from JNDI. Drawback: It feels somewhat 
strange to me to separate this concerns.

4.      We add the TransactionSynchronizationService from 2. and specify it as 
a superinterface of the TransactionService. We then would not have to deprecate 
that method in the TransactionService and could add a generic implementation of 
the TransactionSynchronizationService that does not implement the 
TransactionService. Drawback: We currently have to inheritance in the SPIs and 
would have to add some code to handle this.
Any more ideas on this?

Imho we should go with either 3. or 4. What do you think?

Regards,
Arne

--
Arne Limburg - Enterprise Architekt
open knowledge GmbH, Oldenburg
Bismarckstraße 13, 26122 Oldenburg
Mobil: +49 (0) 151 108 22 942
Tel: +49 (0) 441 - 4082-0
Fax: +49 (0) 441 -
 4082-111
[email protected]
http://www.openknowledge.de 

Registergericht: Amtsgericht Oldenburg, HRB 4670
Geschäftsführer: Lars Röwekamp, Jens Schumann

Reply via email to