使用Arquillian测试有状态会话Bean(arq-jbossas-remote)

时间:2011-06-19 14:32:26

标签: java java-ee ejb jboss-arquillian

我有几个@Stateful SessionBeans注释如下:

@Stateful
@Remote(AdminFacade.class)
public class TAdminFacadeBean implements TgAdminFacade,Serializable
{
   ...
}

现在我想用Arquillian(1.0.0.Alpha5)测试它们,但是得到很多不同的错误,如果注释是@Stateful@Stateless,如果{{1},则消息会有所不同添加或者如果没有@Remote(和@Named接口)。

重现的步骤:

  • 使用。创建新的maven项目 archetype org.jboss.weld.archetypes:jboss-javaee6-webapp:1.0.1.CR2
  • 您可能需要设置jboss.home(请参阅 README.TXT)
  • 修改pom.xml并设置profiles.profile [id = default] .build.plugins.plugin [artifactId = maven-surefire-plugin] .configuration.skip 假的
  • 启动JBoss-6.0.0.Final
  • 执行测试(应该通过):implements

此处测试的bean ist mvn test -Parq-jbossas-remote

MemberRegistration

如果您现在将@Model public class MemberRegistration { ... } 更改为@Model,JBoss将使用堆栈跟踪进行循环,并显示@Stateful此错误:

@Named @Stateful

java.lang.IllegalArgumentException: ArquillianServletRunner not found. Could not determine ContextRoot from ProtocolMetadata, please contact DeployableContainer developer.

@Named @Stateless

如何用Arquillian测试我的javax.transaction.NotSupportedException: BaseTransaction.checkTransactionState - ARJUNA-16051 thread is already associated with a transaction! 豆?

1 个答案:

答案 0 :(得分:4)

我一遍又一遍地解决这个问题,我找到了解决方案。即使我讨厌回答我自己的问题,我希望这可以在将来帮助某人。

@Stateful会话bean的注释(在问题的顶部)是正确的并且保持不变。在Arquillian测试案例中,bean最初注入了

@Inject MemberRegistration memberRegistration;

这适用于@Model bean,但不适用于@Stateful会话bean和@Remote接口。似乎必须注入这种豆类

@EJB private AdminFacade adminBean;

请参阅What is the difference between @Inject and @EJB