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 [email protected] http://www.openknowledge.de Registergericht: Amtsgericht Oldenburg, HRB 4670 Geschäftsführer: Lars Röwekamp, Jens Schumann -----Ursprüngliche Nachricht----- Von: Mark Struberg [mailto:[email protected]] 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 <[email protected]> schrieb am Sa, 13.2.2010: > Von: Arne Limburg <[email protected]> > Betreff: AW: [Ext-CDI] @Transactional > An: "'MyFaces Development'" <[email protected]> > 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 > > [email protected] > > > http://www.openknowledge.de > > > > > Registergericht: Amtsgericht > Oldenburg, HRB 4670 > > Geschäftsführer: Lars > Röwekamp, Jens Schumann > > > > > > Von: Gerhard Petracek > [mailto:[email protected]] > > 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 create...@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 <[email protected]> > > > > > > > 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 > > [email protected] > > > http://www.openknowledge.de > > > > Registergericht: > Amtsgericht Oldenburg, > HRB 4670 > > Geschäftsführer: > Lars Röwekamp, Jens > Schumann > > > > > > > > Von: Gerhard > Petracek [mailto:[email protected]] > > > 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 <[email protected]> > > > > > > > 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 > > [email protected] > > > 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
