Might well be, but imo it's also much easier to debug if having a producer method ;)
Plus: producer fields for 'EE Resources' have a slightly different behaviour than the same if produced with a producer method. See "3.5 Resources". This is imo pretty sick, but that's the way it is... LieGrue, strub --- On Tue, 8/2/11, Gerhard Petracek <[email protected]> wrote: > From: Gerhard Petracek <[email protected]> > Subject: Re: CODI: Wiki "JPA Usage" > To: "MyFaces Discussion" <[email protected]> > Date: Tuesday, August 2, 2011, 11:32 AM > thx mark for creating the spec. > issue. > it's quite interesting that it worked with owb as well as > with weld :) > -> in this case the jboss-tools plugin was correct. > > @gernot: > i've updated the wiki. > > however, since it used to work with owb the issue might be > something else. > > regards, > gerhard > > http://www.irian.at > > Your JSF powerhouse - > JSF Consulting, Development and > Courses in English and German > > Professional Support for Apache MyFaces > > > > 2011/8/2 Mark Struberg <[email protected]> > > > Yes you are right. 3.3.7 actually only talks about > 'producer methods' > > > > > 3.3.7. Disposer method resolution > > > A disposer method is bound to a producer method > if: > > > • the producer method > is declared by the same bean class as the > > > disposer method, and > > > • the producer method > is assignable to the disposed parameter, > > > according to the rules of typesafe resolution > defined in Section 5.2, > > > “Typesafe resolution” (using Section 5.2.3, > “Assignability of raw and > > > parameterized types”). > > > > I've created https://issues.jboss.org/browse/CDI-145 in the spec > issue > > tracker. > > > > Gerhard, I also think that it works in OWB, but it's > not really spec > > conform and might have rough edges ;) So we > should also move our example to > > using producer methods. > > > > Thanks for the report, Gernot! > > > > txs and LieGrue, > > strub > > > > --- On Tue, 8/2/11, Gernot <[email protected]> > wrote: > > > > > From: Gernot <[email protected]> > > > Subject: Re: CODI: Wiki "JPA Usage" > > > To: "MyFaces Discussion" <[email protected]> > > > Date: Tuesday, August 2, 2011, 10:01 AM > > > Thanks for answering! > > > > > > I did some investigations: > > > (1) It's the JBosstools which reports the error > (not core > > > Eclipse WTP). > > > (2) I deinstalled JBosstools - in Eclipse now > everything is > > > OK - I > > > deployed it on Tomcat 7 (OWB 1.1, Hibernate 3.6) > - and got > > > following > > > error: > > > SCHWERWIEGEND: > > > > javax.enterprise.inject.UnsatisfiedResolutionException: > > > Producer > > > method component of the disposal method : > disposeis not > > > found in > > > class: mytest.cdi.PersistenceProducer > > > Qualifiers: [@javax.enterprise.inject.Default()] > > > at > > > > > > org.apache.webbeans.util.InjectionExceptionUtils.throwUnsatisfiedResolutionException(InjectionExceptionUtils.java:71) > > > at > > > > > > org.apache.webbeans.config.DefinitionUtil.createDisposalMethods(DefinitionUtil.java:896) > > > at > > > > > > org.apache.webbeans.config.DefinitionUtil.defineDisposalMethods(DefinitionUtil.java:874) > > > at > > > > > > org.apache.webbeans.component.creation.AbstractInjectedTargetBeanCreator.defineDisposalMethods(AbstractInjectedTargetBeanCreator.java:60) > > > at > > > > > > org.apache.webbeans.util.WebBeansUtil.defineManagedBean(WebBeansUtil.java:2692) > > > at > > > > > > org.apache.webbeans.config.BeansDeployer.defineManagedBean(BeansDeployer.java:857) > > > at > > > > > > org.apache.webbeans.config.BeansDeployer.deploySingleAnnotatedType(BeansDeployer.java:538) > > > at > > > > > > org.apache.webbeans.config.BeansDeployer.deployFromClassPath(BeansDeployer.java:483) > > > at > > > > org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:164) > > > at > > > > > > org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLifeCycle.java:124) > > > at > > > > > > org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(WebContainerLifecycle.java:77) > > > at > > > > > > org.apache.webbeans.servlet.WebBeansConfigurationListener.contextInitialized(WebBeansConfigurationListener.java:81) > > > at > > > > > > org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723) > > > at > > > > > > org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) > > > at > > > > > > org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) > > > at > > > > java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) > > > at > > > > java.util.concurrent.FutureTask.run(FutureTask.java:138) > > > at > > > > > > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > > > at > > > > > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > > > at > > > java.lang.Thread.run(Thread.java:662) > > > 02.08.2011 11:52:45 > > > > org.apache.webbeans.servlet.WebBeansConfigurationListener > > > contextInitialized > > > > > > (3) I also did a look into CDI spec: > > > Disposer Methods are only specified in the > producer methods > > > section > > > (chapter 3.3). And at 3.3.7 disposer methods are > only bound > > > to > > > producer methods (and not to producer fields) > > > In chapter 3.4 "producer fields" there are no > references to > > > disposer methods. > > > ==> in my opinion the spec isn't clear?! > > > > > > Why do I get the above stack trace? > > > If I change my code to use a producer method (not > field) > > > everything works: > > > @RequestScoped > > > public class PersistenceProducer > > > { > > > > @PersistenceContext(unitName = > > > "default") > > > @Default > > > private EntityManager > > > entityManager; > > > > > > @Produces > > > public EntityManager > getEntityManager() > > > { > > > return > > > entityManager; > > > } > > > > > > public void > dispose(@Disposes @Default > > > EntityManager entityManager) > > > { > > > if > > > (entityManager.isOpen()) > > > { > > > > > > entityManager.close(); > > > } > > > } > > > } > > > > > > thx, gernot > > > > > > 2011/8/1 Gerhard Petracek <[email protected]>: > > > > hi gernot, > > > > > > > > i would say: don't rely on the > eclipse-plugin. at > > > least some months ago it > > > > showed a lot of wrong findings in a demo > which works > > > pretty fine (with owb > > > > as well as weld). > > > > you can find a working example e.g. at [1] > > > > > > > > regards, > > > > gerhard > > > > > > > > [1] > > > > > > http://code.google.com/a/apache-extras.org/p/myfaces-codi-examples/source/browse/community/ > > > > > > > > http://www.irian.at > > > > > > > > Your JSF powerhouse - > > > > JSF Consulting, Development and > > > > Courses in English and German > > > > > > > > Professional Support for Apache MyFaces > > > > > > > > > > > > > > > > 2011/8/1 Gernot <[email protected]> > > > > > > > >> I tried "Using one (default) Entity > Manager" > > > >> (https://cwiki.apache.org/confluence/display/EXTCDI/JPA+Usage): > > > >> public class DataBaseProducer > > > >> { > > > >> @Produces > > > >> > @PersistenceContext(unitName="default") > > > >> @Default > > > >> private EntityManager > entityManager; > > > >> > > > >> public void > dispose(@Disposes @Default > > > EntityManager entityManager) > > > >> { > > > >> > if(entityManager.isOpen()) > > > >> { > > > >> > entityManager.close(); > > > >> } > > > >> } > > > >> } > > > >> > > > >> This does not work - I get following > error at > > > "@Disposes" in eclipse: > > > >> "There is no producer method declared by > the > > > (same) bean class that is > > > >> assignable to the disposed parameter of > a disposer > > > method [JSR-299 > > > >> §3.3.7]" > > > >> > > > >> Whats wrong? > > > >> > > > >> thx, gernot > > > >> > > > > > > > > > >

