Hi Mark, yes, that is simple when you have a working @PersistenceContext(unitName="...") annotation. In none-EE-environments you don't have that and generic producer-methods are more complicated since you have to inject your unit-name.
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 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 <[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, 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 > [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 > __________________________________________________ Do You Yahoo!? Sie sind Spam leid? Yahoo! Mail verfügt über einen herausragenden Schutz gegen Massenmails. http://mail.yahoo.com
