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
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;
看