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?