2 Replies Latest reply on Feb 27, 2007 11:30 AM by Eric Yip

    Need help with propagation of seam managed persistence conte

    Eric Yip Newbie

      Hi

      I'm a newbie to seam and ejb3 and need some help regarding Persistence Context (PC) propagation.

      I have the code snippets below using @EJB and @PersistenceContext(type=EXTENDED) that properly propagate the PC to my EJB DAO.
      However, when I changed @EJB to seam @In injection for my DAO and EntityManager it seems like the PC is no longer propagated.

      Can someone tell what I'm doing wrong? Please let me know if you need more detail.

      Any suggestion is appreciated.

      ========= REMOTE Stateful Bean using @EJB and PC properly propagated ===========

      @Stateful
      @Name("userService")

      public class UserEJBService implements UserService {
      @EJB
      private UserDAO _userDAO;

      @PersistenceContext(type=EXTENDED)
      private EntityManager _em;

      public User test(Long userId) {
      User user =_em.find(User.class, userId);
      boolean contain = _userDAO.contains(user); // PC properly progagated and "contain" == true
      return user;
      }
      }

      ========= REMOTE Stateful Bean using @In and PC NOT propagated ===========

      @Stateful
      @Name("userService")

      public class UserEJBService implements UserService {
      @In(value="userDAO", create=true)
      private UserDAO _userDAO;

      @In(value="entityManager")
      private EntityManager _em;

      public User test(Long userId) {
      User user =_em.find(User.class, userId);
      boolean contain = _userDAO.contains(user); // PC NOT progagated and "contain" == false
      return user;
      }
      }

      ========= LOCAL Stateless DAO Bean ===========

      @JndiName("jboss-seam-booking/UserDAOBean/local")
      @Stateless
      @TransactionAttribute(TransactionAttributeType.REQUIRED)
      @Name("userDAO")

      public class UserDAOBean extends GenericEJBDAO<User, Long>
      implements UserDAO {

      public boolean contains(User user) {
      return getEntityManager().contains(user);
      }
      }

      ========= components.xml ===========

      <?xml version="1.0" encoding="UTF-8"?>
      <components xmlns="http://jboss.com/products/seam/components"
      xmlns:core="http://jboss.com/products/seam/core"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation=
      "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-1.1.xsd
      http://jboss.com/products/seam/components http://jboss.com/products/seam/components-1.1.xsd">

      <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/remote" debug="true"/>

      <core:pages no-conversation-view-id="/main.xhtml"/>

      <core:manager conversation-timeout="120000"
      concurrent-request-timeout="500"
      conversation-id-parameter="cid"
      conversation-is-long-running-parameter="clr"/>

      <core:ejb installed="@embeddedEjb@"/>

      <core:managed-persistence-context name="entityManager"
      auto-create="true"
      persistence-unit-jndi-name="java:/SFEntityManagerFactory"/>