Hi! I think we need to further define the behavior of our injected EntityManagers and the @Transactional annotation:
1. May there be more than one EntityManager (with different persistence-units) within one scope? 2. May EntityManagers be shared between scopes? If yes, where are the boundaries of our EntityManagers (when are they opened and closed)? If no, does that mean, that EntityManagers that are injected in @Dependent beans are always different from the ones that are injected into beans with other scopes or do we want to have special behavior for @Depenent scope? 3. Does the @Transactional annotation work only for the scope of the annotated bean, within the complete Thread or for a particular persistence-unit? The second would mean, that a @Transactional annotation may start and commit more than one transaction. The first would mean that too, if we answer question 1 with "yes". The third would mean, that we need the unitName attribute at the @Transactional annotation, which is ugly imho. 4. Do we want to support nested transactions (a consequence of supporting @TransactionAttribute). If yes, we should define the behavior for the extended EntityManager case. This is not such trivial, because JPA does not support nested transactions. Should we open a new EntityManager instead? 5. Should we support the @PersistenceContext annotation of JPA? If yes, how can we avoid that we collide with the injection of a JavaEE server? 6. How should the default-behavior look like, when no persistence unit-name is specified? Should we implement the behavior of JavaEE (scanning various config-files...)? Your opinions? Regards, Arne -- Arne Limburg - Enterprise Developer OpenKnowledge GmbH, Oldenburg Bismarckstraße 13, 26122 Oldenburg Mobil: +49 (0) 170 - 2733627 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: Donnerstag, 4. März 2010 20:47 An: MyFaces Development Betreff: Re: [Ext-CDI] @Transactional Hi! Uploading the source is al always a good idea, so we can further discuss this really complicated topic. Is this meant to work for extended EntityManagers or for transactional JTA managed ones? Another question: does this require the EntityManager to have a certain scope? For the extended EM variant of course, for JTA managed we will most certainly use @Dependent, right? LieGrue, strub --- Gerhard Petracek <[email protected]> schrieb am Do, 4.3.2010: > Von: Gerhard Petracek <[email protected]> > Betreff: Re: [Ext-CDI] @Transactional > An: "MyFaces Development" <[email protected]> > Datum: Donnerstag, 4. März, 2010 20:39 Uhr > hi arne, > i created a jira issue for it > [1].could you please upload your > implementation.+ a short description about the > possible usages as well as restrictions (if > present). > > > thx & regards,gerhard > [1] https://issues.apache.org/jira/browse/EXTCDI-4 > > http://www.irian.at > > > > Your JSF powerhouse - > JSF Consulting, Development and > Courses in English and German > > Professional Support for Apache MyFaces > > > > 2010/2/20 Arne Limburg <[email protected]> > > > > > > > > > > > > > > > > > Hi, > > > > I’ve updated my > code at > > http://wiki.apache.org/myfaces/Extensions/CDI/DevDoc/Drafts/Transactional > > > > It is not really > tested and lacks some fallback-scenarios (i.e. > null-handling, etc.), but it is a starting point to inject > scoped > EntityManagers for every CDI-scope. > > > > 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: Montag, 15. Februar 2010 13:44 > > An: MyFaces > Development > > Betreff: Re: [Ext-CDI] > @Transactional > > > > > > hi arne, > > > > > > > > > > thx for providing the source code. > > > > > > i'll have a look at it after the > jsfdays. > > > > > > > > > > > > one of the goals is to provide an > alternative conversation > scope for cdi which allows to use the conversation concepts > provided by > orchestra. > > > > > > so we have to ensure that it works > with every custom cdi > scope. > > > > > > (cdi conversations would be the > default scope) > > > > > > > > > > > > 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/15 Arne Limburg <[email protected]> > > 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 > > [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 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 <[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 > > > > > > > > > > > > > > > > > > > __________________________________________________ Do You Yahoo!? Sie sind Spam leid? Yahoo! Mail verfügt über einen herausragenden Schutz gegen Massenmails. http://mail.yahoo.com
