Details
-
Bug
-
Status: Closed
-
Blocker
-
Resolution: Fixed
-
1.5.0, 1.5.1
-
None
-
None
-
Windows 7 x64; jdk1.7.0_09 32 bit; apache-tomee-1.5.1-20121026.064316-51-webprofile.zip
Description
1. Create class EntityManagerProducer:
@SessionScoped
@Stateful
public class EntityManagerProducer implements Serializable {
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager em;
@Produces
public EntityManager getEntityManager()
}
2. Create injection client:
@Named
@SessionScoped
@Stateful
public class A implements Serializable {
@Inject
private EntityManager em;
public String getDelegateClassName()
{ return em.getDelegate().getClass().getCanonicalName(); }}
3. Create JSF page and try to call getDelegateClassName():
<h:body>
EntityManager is open: #
</h:body>
4. Try to deploy the application to tomee - observe error message:
Caused by: org.apache.openejb.OpenEJBRuntimeException: org.apache.webbeans.exception.WebBeansConfigurationException: Passivation capable beans must satisfy passivation capable dependencies. Bean : A, Name:a, WebBeans Type:ENTERPRISE, API Types:[java.lang.Object,beans.A], Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default,javax.inject.Named] does not satisfy. Details about the Injection-point: Field Injection Point, field name : em, Bean Owner : [A, Name:a, WebBeans Type:ENTERPRISE, API Types:[java.lang.Object,beans.A], Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default,javax.inject.Named]]
at org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:323)
at org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:150)
... 48 more
Caused by: org.apache.webbeans.exception.WebBeansConfigurationException: Passivation capable beans must satisfy passivation capable dependencies. Bean : A, Name:a, WebBeans Type:ENTERPRISE, API Types:[java.lang.Object,beans.A], Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default,javax.inject.Named] does not satisfy. Details about the Injection-point: Field Injection Point, field name : em, Bean Owner : [A, Name:a, WebBeans Type:ENTERPRISE, API Types:[java.lang.Object,beans.A], Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default,javax.inject.Named]]
at org.apache.webbeans.component.AbstractOwbBean.validatePassivationDependencies(AbstractOwbBean.java:695)
at org.apache.webbeans.component.AbstractInjectionTargetBean.validatePassivationDependencies(AbstractInjectionTargetBean.java:595)
at org.apache.openejb.cdi.BeansDeployer.checkPassivationScope(BeansDeployer.java:414)
at org.apache.openejb.cdi.BeansDeployer.validate(BeansDeployer.java:260)
at org.apache.openejb.cdi.BeansDeployer.validateInjectionPoints(BeansDeployer.java:222)
at org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:280)
... 49 more
---------------------------------
I think this is CDI specification violation - page 3 of CDI specification contains following example:
@SessionScoped @Model
public class Login implements Serializable {
@Inject Credentials credentials;
@Inject @Users EntityManager userDatabase;
...