Java 使用Arquillian(arq jbossas remote)测试有状态会话bean

Java 使用Arquillian(arq jbossas remote)测试有状态会话bean,java,jakarta-ee,ejb,jboss-arquillian,Java,Jakarta Ee,Ejb,Jboss Arquillian,我有几个@Stateful会话bean,注释如下: @Stateful @Remote(AdminFacade.class) public class TAdminFacadeBean implements TgAdminFacade,Serializable { ... } 现在我想用Arquillian(1.0.0.Alpha5)对它们进行测试,但是得到了很多不同的错误,如果注释是@Stateful或@Stateless,如果添加了@Named,或者没有@Remote(并且实现了接口

我有几个
@Stateful
会话bean,注释如下:

@Stateful
@Remote(AdminFacade.class)
public class TAdminFacadeBean implements TgAdminFacade,Serializable
{
   ...
}
现在我想用Arquillian(1.0.0.Alpha5)对它们进行测试,但是得到了很多不同的错误,如果注释是
@Stateful
@Stateless
,如果添加了
@Named
,或者没有@Remote(并且
实现了
接口),消息会有所不同

复制步骤:

  • 使用创建新的maven项目 原型: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
  • 执行测试(应通过):
    mvn测试-Parq jbossas remote
这里测试的bean是
MemberRegistration

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

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

javax.transaction.NotSupportedException: BaseTransaction.checkTransactionState
- ARJUNA-16051 thread is already associated with a transaction!

如何使用Arquillian测试我的
@Stateful
bean

我反复研究这个问题,找到了解决办法。即使我讨厌回答我自己的问题,我希望这能在将来帮助别人

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

@Inject MemberRegistration memberRegistration;
@EJB private AdminFacade adminBean;
这适用于
@Model
bean,但不适用于
@Stateful
会话bean和
@Remote
接口。看来这种豆子一定要注射

@Inject MemberRegistration memberRegistration;
@EJB private AdminFacade adminBean;