[cdi-dev] [JBoss JIRA] (CDI-523) CDI spec tries to dispose a container-managed entity manager.

Martin Andersson (JIRA) issues at jboss.org
Sat Oct 22 12:15:01 EDT 2016


    [ https://issues.jboss.org/browse/CDI-523?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13310630#comment-13310630 ] 

Martin Andersson commented on CDI-523:
--------------------------------------

There is one provided on the second link in the post. This example look up an application-managed entity manager (with disposer):
 
{code:java}
@RequestScoped
public class EntityManagerProducer
{
    @PersistenceUnit
    EntityManagerFactory factory;

    @Produces
    @RequestScoped
    public EntityManager newEntityManager() {
        return factory.createEntityManager();
    }

    public void closeEntityManager(@Disposes EntityManager em) {
        em.close();
    }
}

public class EntityManagerConsumer
{
    @Inject
    EntityManager em;
   
     // ...
}
{code}


> CDI spec tries to dispose a container-managed entity manager.
> -------------------------------------------------------------
>
>                 Key: CDI-523
>                 URL: https://issues.jboss.org/browse/CDI-523
>             Project: CDI Specification Issues
>          Issue Type: Bug
>    Affects Versions: 1.2.Final, 1.1.Final
>            Reporter: Martin Andersson
>            Assignee: John Ament
>             Fix For: 2.0 .Final
>
>
> Section "3.5.2. Declaring a disposer method" has this example:
> {code:java}
> public class Resources {
>     @PersistenceContext
>     @Produces @UserDatabase
>     private EntityManager em;
>     
>     public void close(@Disposes @UserDatabase EntityManager em) {
>         em.close();
>     }
> }
> {code}
> The disposer method above call {{EntityManager.close()}} on a container-managed entity manager which result in an {{IllegalStateException}} being thrown *and* the entity manager remains open. This behavior is expected as the JPA specification forbids application code to close a container-managed entity manager. JPA 2.1, section "7.9.1 Container Responsibilities" says:
> {quote}
> The container must throw the IllegalStateException if the application calls EntityManager.close on a container-managed entity manager.
> {quote}
> This has been proved [here|https://github.com/MartinanderssonDotcom/java-ee-concepts/blob/master/src/test/java/com/martinandersson/javaee/cdi/producers/entitymanager/unsafe/OracleTest.java] and a theoretical walkthough surrounding entity managers combined with CDI scopes is available [here|https://github.com/MartinanderssonDotcom/java-ee-concepts/blob/master/src/test/java/com/martinandersson/javaee/cdi/producers/entitymanager/package-info.java].



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the cdi-dev mailing list