Donatas Ciuksys created TOMEE-508:
-------------------------------------

             Summary: EntityManager dependency considered not passivation 
capable (CDI spec violation)
                 Key: TOMEE-508
                 URL: https://issues.apache.org/jira/browse/TOMEE-508
             Project: TomEE
          Issue Type: Bug
    Affects Versions: 1.5.0
         Environment: Windows 7 x64; jdk1.7.0_09 32 bit; 
apache-tomee-1.5.1-20121026.064316-51-webprofile.zip
            Reporter: Donatas Ciuksys
            Priority: Blocker


1. Create class EntityManagerProducer:

@SessionScoped
@Stateful
public class EntityManagerProducer implements Serializable {
    
    @PersistenceContext(type=PersistenceContextType.EXTENDED)
    private EntityManager em;
    
    @Produces
    public EntityManager getEntityManager() {
        return em;
    }
}

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: #{a.delegateClassName}
    </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;
...

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to