myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Arne Limburg <arne.limb...@openknowledge.de>
Subject AW: [Ext-CDI] @Transactional
Date Mon, 15 Feb 2010 10:15:03 GMT
Hi,

I've prototyped some code that injects conversation-scoped EntityManagers reading the unitName
from the qualifier annotation and added @Transactional support for this EntityManagers. This
code needs some thinking though, e.g. how to handle the default-case (no unitName specified)...

If you want to take a look at it, I have created a Wiki page and added my code as attachment:
http://wiki.apache.org/myfaces/Extensions/CDI/DevDoc/Drafts/Transactional

This code could be a starting point to implement Orchestra-like conversations (starting with
CDI-Conversations)...

Regards,
Arne

--
 
Arne Limburg - Enterprise Developer
OpenKnowledge 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
arne.limburg@openknowledge.de
http://www.openknowledge.de

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

-----Ursprüngliche Nachricht-----
Von: Mark Struberg [mailto:struberg@yahoo.de] 
Gesendet: Samstag, 13. Februar 2010 20:27
An: MyFaces Development
Betreff: AW: [Ext-CDI] @Transactional

> I am afraid supporting multiple persistence-units in that
> scenario is very difficult...

Nope, it's really easy. I simply use Qualifiers to distinguish between them. 

@Qualifier 
public @instance Core {}

@Qualifier 
public @instance Other {}

----
@RequestScoped
public class EMProducer {
private @PersistenceContext(unitName="core") EntityManager emCore;
private @PersistenceContext(unitName="other") EntityManager emOther;


public @Produces @Core EntityManager getCoreEM() {return emCore;}
public @Produces @Other EntityManager getOtherEM() {return emOther;}


Injection happens with

private @Inject @Core EntityManager 


Got the idea?

LieGrue,
strub

--- Arne Limburg <arne.limburg@openknowledge.de> schrieb am Sa, 13.2.2010:

> Von: Arne Limburg <arne.limburg@openknowledge.de>
> Betreff: AW: [Ext-CDI] @Transactional
> An: "MyFaces Development" <dev@myfaces.apache.org>
> Datum: Samstag, 13. Februar 2010, 20:06
> Hi Mark,
> 
> thank you for your feedback. I was aware of the requirement
> of CDI-containers to inject JavaEE resources in a
> JavaEE-environment, but Gerhard and I are thinking about a
> generic non-JavaEE-solution for EntityManager-injection. And
> at least weld does no injection of JavaEE-resources in this
> case. How does OpenWebBeans?
> I am afraid supporting multiple persistence-units in that
> scenario is very difficult...
> 
> Nonetheless it would be nice to see your
> multiple-database-handling TransactionInterceptor in CODI.
> 
> Regards,
> Arne
> 
> --
>  
> Arne Limburg - Enterprise Developer
> OpenKnowledge 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
> arne.limburg@openknowledge.de
> http://www.openknowledge.de

> 
> Registergericht: Amtsgericht Oldenburg, HRB 4670
> Geschäftsführer: Lars Röwekamp, Jens Schumann
> 
> -----Ursprüngliche Nachricht-----
> Von: Mark Struberg [mailto:struberg@yahoo.de]
> 
> Gesendet: Samstag, 13. Februar 2010 15:39
> An: MyFaces Development
> Betreff: AW: [Ext-CDI] @Transactional
> 
> Hi!
> 
> The JSR-299 spec defines that we have to support injection
> of EE-Resources. 
> 
> This was more explicit in the old version of the spec, but
> unless the wording got shortened, I still think injection of
> @PersistenceUnit and @PersistenceContext must be supported
> by any JSR-299 container (at least in an EE environment).
> 
> For OpenWebBeans, you can simply use our
> openwebbeans-resource plugin. Please note that this is
> necessary because OWB is modular, and openwebbeans-impl (the
> core) will have no EE dependencies at all (not even JSF,
> JPA, etc!) This will get picked up automatically if it is
> available in the classpath, e.g. you can simply define the
> following maven dependency:
> 
>         <dependency>
>                
> <groupId>org.apache.openwebbeans</groupId>
>                
> <artifactId>openwebbeans-resource</artifactId>
>                
> <version>${owb.version}</version>
>         </dependency>
> 
> OWB supports 2 different scenarios. If you are not running
> in a JTA aware container like e.g. OpenEJB, you will
> automatically use a simple resource version of an SPI
> implementation which uses
> Persistence#createEntityManagerFactory(unitName) for
> injecting (Thus getting an extended EM). If you use e.g.
> OpenEJB, we are able to get the injectable resources
> directly from there (thus getting a transactional EM).
> 
> Once this is available, you can simply create a producer
> method for the EntityManager:
> https://svn.apache.org/repos/asf/openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/util/EntityManagerUtil.java

> 
> There is also an example on how to implement a
> TransactionalInterceptor: 
> https://svn.apache.org/repos/asf/openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/intercept/TransactionalInterceptor.java

> 
> In my company, I already implemented a
> TransactionalInteceptor which is capable of handling
> multiple databases at a time and also correctly handles
> nested transactions. I hope to migrate this over to CODI in
> the near future.
> 
> 
> LieGrue,
> strub
> 
> 
> --- Arne Limburg <arne.limburg@openknowledge.de>
> schrieb am Sa, 13.2.2010:
> 
> > Von: Arne Limburg <arne.limburg@openknowledge.de>
> > Betreff: AW: [Ext-CDI] @Transactional
> > An: "'MyFaces Development'" <dev@myfaces.apache.org>
> > Datum: Samstag, 13. Februar 2010, 14:42
> > 
> > 
> > 
> >  
> >  
> > 
> > 
> > 
> > 
> > 
> > 
> >  
> > 
> > 
> > 
> > Hi Gerhard, 
> > 
> >    
> > 
> > OK, I got what you did,
> > basically I did the same. You are right,
> > that was pretty straight-forward, but I had to
> hard-code
> > the persistence-unit
> > name. 
> > 
> >    
> > 
> > I have two ideas to inject the
> > persistence-unit name into the
> > producer-method for the EntityManager: 
> > 
> >    
> > 
> > First idea: A
> > @PersistenceUnitName qualifier-annotation to
> > inject the name into the producer-method. Client code
> would
> > have somethink like 
> > 
> > public class Configuration
> > { 
> > 
> >    
> > 
> >   @Produces
> > @PersistenceUnitName 
> > 
> >   String
> > getPersistenceUnitName() { 
> > 
> > … 
> > 
> > Not really nice, but the
> > simplest solution to generify it. 
> > 
> >    
> > 
> > Second idea: 
> > 
> > The @PersistenceContext
> > qualifier has a @Nonbind attribute
> > persistenceUnitName which we can extract in the
> producer
> > method. But then we
> > get in scoping issues. Especially when having
> multiple
> > persistence-units within
> > one deployment. The second problem is: How can the
> > @Transactional annotation
> > know the persistence-unit-name. 
> > 
> >    
> > 
> > Any other ideas? 
> > 
> >    
> > 
> > Regards, 
> > 
> > Arne 
> > 
> >    
> > 
> > -- 
> > 
> >   
> > 
> > Arne Limburg - Enterprise
> > Developer 
> > 
> > OpenKnowledge 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 
> > 
> > arne.limburg@openknowledge.de
> > 
> > 
> > http://www.openknowledge.de

> > 
> > 
> >    
> > 
> > Registergericht: Amtsgericht
> > Oldenburg, HRB 4670 
> > 
> > Geschäftsführer: Lars
> > Röwekamp, Jens Schumann 
> > 
> >    
> > 
> > 
> > 
> > Von: Gerhard Petracek
> > [mailto:gerhard.petracek@gmail.com]
> 
> > 
> > Gesendet: Samstag, 13. Februar 2010 14:32
> > 
> > An: MyFaces Development
> > 
> > Betreff: Re: [Ext-CDI] @Transactional 
> > 
> > 
> > 
> >    
> > 
> > hi arne, 
> > 
> > 
> > 
> >    
> > 
> > 
> > 
> > 
> > 
> > i used the EntityManager to get
> > an EntityTransaction. 
> > 
> > 
> > 
> > 
> > 
> > you have to use cdi to create and
> > inject it. 
> > 
> > 
> > 
> > 
> > 
> > (i used some producer methods.) 
> > 
> > 
> > 
> > 
> > 
> > i created @PersistenceUnit which
> > is a cdi qualifier and 
> > 
> > 
> > 
> > 
> > 
> > @Transactional which is a cdi
> > interceptor binding. 
> > 
> > 
> > 
> > 
> > 
> >    
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > basically it works and it isn't
> > hard to use. 
> > 
> > 
> > 
> > 
> > 
> > however, we have to think about an
> > approach to provide as
> > much as possible in a generic way. 
> > 
> > 
> > 
> > 
> > 
> >    
> > 
> > 
> > 
> > 
> > 
> > regards, 
> > 
> > 
> > 
> > 
> > 
> > gerhard 
> > 
> > 
> > 
> > 
> > 
> >    
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > http://www.irian.at

> > 
> > 
> > 
> > Your JSF powerhouse -
> > 
> > JSF Consulting, Development and
> > 
> > Courses in English and German
> > 
> > 
> > 
> > Professional Support for Apache MyFaces
> > 
> > 
> > 
> >  
> > 
> > 
> > 
> > 2010/2/13 Arne Limburg <arne.limburg@openknowledge.de>
> > 
> > 
> > 
> > 
> > 
> > 
> > Hi
> > Gerhard, 
> > 
> >   
> > 
> > Did
> > you mean „i used
> > UserTransaction”? If not, how do you receive your
> > EntityTransaction? 
> > 
> >   
> > 
> > I am
> > working on a solution to
> > get request-scoped EntityManagers injected within a
> > servlet-container that does
> > not even support the web-profile (which are the
> current
> > jetty and the current
> > tomcat). I am not able to get an EntityManager
> injected via
> > @PersistenceContext
> > in that environment. So it would be nice if there were
> some
> > CDI-Extension to
> > achieve this. The implementation would be pretty
> > straight-forward except the
> > configuration of the persistence-unit name and the
> handling
> > of different
> > persistence-units within one CDI-deployment
> > unit. 
> > 
> >   
> > 
> > Using
> > JTA-Transactions vs.
> > resource-local EntityTransactions is another issue
> > here. 
> > 
> > 
> > 
> >   
> > 
> > Regards, 
> > 
> > Arne 
> > 
> >   
> > 
> > -- 
> > 
> >   
> > 
> > Arne
> > Limburg - Enterprise
> > Developer 
> > 
> > OpenKnowledge 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 
> > 
> > arne.limburg@openknowledge.de
> > 
> > 
> > http://www.openknowledge.de 
> > 
> >   
> > 
> > Registergericht:
> > Amtsgericht Oldenburg,
> > HRB 4670 
> > 
> > Geschäftsführer:
> > Lars Röwekamp, Jens
> > Schumann 
> > 
> >   
> > 
> > 
> > 
> > 
> > 
> > Von: Gerhard
> > Petracek [mailto:gerhard.petracek@gmail.com]
> > 
> > 
> > Gesendet: Freitag, 12. Februar 2010 19:59
> > 
> > An: MyFaces Development
> > 
> > Betreff: Re: [Ext-CDI] @Transactional 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> >   
> > 
> > hi
> > arne, 
> > 
> > 
> > 
> >   
> > 
> > 
> > 
> > 
> > 
> > yes
> > - i used EntityTransaction in the prototype and it
> works
> > pretty well in a
> > servlet container (that was the base idea). 
> > 
> > 
> > 
> > 
> > 
> >   
> > 
> > 
> > 
> > 
> > 
> > regards, 
> > 
> > 
> > 
> > 
> > 
> > gerhard
> > 
> > 
> > 
> > http://www.irian.at

> > 
> > 
> > 
> > Your JSF powerhouse -
> > 
> > JSF Consulting, Development and
> > 
> > Courses in English and German
> > 
> > 
> > 
> > Professional Support for Apache MyFaces 
> > 
> > 
> > 
> > 2010/2/12
> > Arne Limburg <arne.limburg@openknowledge.de>
> > 
> > 
> > 
> > 
> > 
> > 
> > Hi
> > folks, 
> > 
> >   
> > 
> > I saw the discussion of adding an
> > @Transactional-Annotation to your
> > CDI extensions. I think Gerhard wrote it. I wonder if
> it
> > deals with JTA
> > transactions (which indeed would be pretty
> > straight-forward) or with
> > EntityTransactions of an resource-local EntityManager.
> I am
> > working on the
> > latter one and just would want to know if someone else
> is
> > working on such
> > stuff. I think it would be great, when we could
> archive
> > injection of
> > resource-local EntityManagers with transaction-support
> to
> > deploy it on a tomcat
> > or jetty. What do you think? 
> > 
> >   
> > 
> > Regards, 
> > 
> > Arne 
> > 
> >   
> > 
> > -- 
> > 
> >   
> > 
> > Arne Limburg - Enterprise
> > Developer 
> > 
> > OpenKnowledge 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 
> > 
> > arne.limburg@openknowledge.de
> > 
> > 
> > http://www.openknowledge.de

> > 
> > 
> >   
> > 
> > Registergericht:
> > Amtsgericht Oldenburg, HRB 4670 
> > 
> > Geschäftsführer:
> > Lars Röwekamp, Jens Schumann 
> > 
> >   
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> >   
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> >    
> > 
> > 
> > 
> > 
> > 
> >  
> > 
> > 
> >
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Sie sind Spam leid? Yahoo! Mail verfügt über einen
> herausragenden Schutz gegen Massenmails. 
> http://mail.yahoo.com 
> 

__________________________________________________
Do You Yahoo!?
Sie sind Spam leid? Yahoo! Mail verfügt über einen herausragenden Schutz gegen Massenmails.

http://mail.yahoo.com 
Mime
View raw message