我有几个@Stateful
像这样注释的 SessionBean:
@Stateful
@Remote(AdminFacade.class)
public class TAdminFacadeBean implements TgAdminFacade,Serializable
{
...
}
现在我想用 Arquillian (1.0.0.Alpha5) 测试它们,但是得到很多不同的错误,如果注释是@Stateful
或@Stateless
,如果@Named
添加了 a 或者没有 @Remote (和implements
接口),消息会有所不同。
重现步骤:
- 使用原型 org.jboss.weld.archetypes:jboss-javaee6-webapp:1.0.1.CR2 创建新的 maven 项目
- 您可能需要设置 jboss.home(参见 readme.txt)
- 修改 pom.xml 并将 profiles.profile[id=default].build.plugins.plugin[artifactId=maven-surefire-plugin].configuration.skip 设置为 false
- 启动 JBoss-6.0.0.Final
- 执行测试(应该通过):
mvn test -Parq-jbossas-remote
这里测试的 bean ist MemberRegistration
:
@Model
public class MemberRegistration
{
...
}
如果您现在更改@Model
为@Stateful
,JBoss 将使用堆栈跟踪进行循环,并@Named @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!
如何@Stateful
使用 Arquillian 测试我的 Bean?