You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

Intro

The JPA module allows to define transactional beans or methods. It's similar to the annotation you might know from the Spring framework. It's a simple alternative to EJBs (e.g. if you don't have an EJB container).

Dependencies

The page CODI Modules provides an overview about CODI modules and how to add them to your project.

For using the features described in this page, you have to add:

  • CODI-Core
  • CODI-JPA module
  • JPA implementation of your choice

Hint

For using @PersistenceContext you can use e.g. the resources-plugin of OpenWebBeans

Using one (default) Entity Manager

Producer for a default entity manager
public class DataBaseProducer
{
    @Produces
    @PersistenceContext(unitName="default")
    @Default
    private EntityManager entityManager;

    public void dispose(@Disposes @Default EntityManager entityManager)
    {
        if(entityManager.isOpen())
        {
            entityManager.close();
        }
    }
}
Using @Transactional
public class CustomService1
{
    @Inject
    protected EntityManager entityManager;

    @Transactional
    public void update(CustomEntity1 entity)
    {
        this.entityManager.merge(entity);
    }
}

Using multiple Entity Managers

Producer for entity managers
public class DataBaseProducer
{
    @Produces
    @PersistenceContext(unitName="default")
    @Default
    private EntityManager entityManager;

    @Produces
    @PersistenceContext(unitName="UserDB")
    @Users
    private EntityManager usersEntityManager;

    public void disposeDefaultDB(@Disposes @Default EntityManager entityManager)
    {
        if(entityManager.isOpen())
        {
            entityManager.close();
        }
    }

    public void disposeUserDB(@Disposes @Users EntityManager entityManager)
    {
        if(entityManager.isOpen())
        {
            entityManager.close();
        }
    }
}
Using @Transactional and an entity manager with a qualifier
public class CustomService2
{
    @Inject
    @Users
    protected EntityManager entityManager;

    @Transactional(Users.class)
    public void update(CustomEntity2 entity)
    {
        this.entityManager.merge(entity);
    }
}
  • No labels