3 Replies Latest reply: May 28, 2012 12:28 PM by Bernard Labno RSS

    Ho do create an Arquillian test for converscation scope??

    Andi D Newbie

      Hi again,

       

      I have still troubles with arquillian tests.

      During testing my EntityHome and using the persist Method I get the Exception: “javax.enterprise.context.ContextNotActiveException: Conversation Context not active when method called on conversation Transient conversation“.

       

      My test looks like:

        @Test
        public void testAppInstituteHome() throws LoginException, PermissionException, SecurityException, IllegalStateException, RollbackException, HeuristicMixedException, HeuristicRollbackException, SystemException, NotSupportedException{
          AppInstitute ai = new AppInstitute("Test Institute", "Location", "Street", new Integer(6020), "URL", new Long(854139751));
          transaction.begin();    AppInstituteHome.setInstance(ai);
          AppInstituteHome.persist();
          transaction.commit();
        }
      

       

      The persist method in the AppInstituteHome is:

        @Transactional
        public String persist() throws LoginException, PermissionException
        {
          if (!isPermissionToPersist()) {
            throw createPermissionException(DroolsConstants.CREATE);
          }
      
          entityManager.persist(getInstance());
          entityManager.flush();
      
          // some additional code
      
          conversationManager.endConversation();
      
          return returnTarget(getListOutcome());
        }
      

       

      Where the Code from the ConversationManager is:

      @Named
      @Stateless
      public class ConversationManager implements Serializable
      {
        @Inject private Conversation conversation;
      
        public void beginConversation() {    if (!conversation.isTransient()) { conversation.end(); }
          conversation.begin();      
        }
      
        public void endConversation() {
          if (!conversation.isTransient())
          {
            log.info("endConversation - really ending one");
            conversation.end();
          }
        }
      
        public String currentConversationId() {
          return conversation.getId();
        }
      }
      

       

      The problem is (as I understand it), that I do not have a conversation in the test case. That's why I can not begin or end a conversation, and I get the "javax.enterprise.context.ContextNotActiveException: Conversation Context not active when method called on conversation Transient

      conversation".

       

      I found some related topics with the solution of using the following code snipped (see for example http://seamframework.org/Community/ConversationScopedInArquillianWithWeldEmbedded) but I have no class ContextLifecycle.

      Container.instance().services().get(ContextLifecycle.class).setupConversationContext();

       

      Do you know how I can create a conversation, which is necessary for my test?