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 Sat, 13 Feb 2010 19:06:13 GMT
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 
Mime
View raw message