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
>>
>