Тестирование сессионных компонентов с сохранением состояния с помощью Arquillian (arq-jbossas-remote) - PullRequest
2 голосов
/ 19 июня 2011

У меня есть несколько @Stateful SessionBeans с такими комментариями:

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

Теперь я хочу протестировать их с Arquillian (1.0.0.Alpha5), но получаю множество различных ошибок, сообщения могут отличаться, если аннотации @Stateful или @Stateless, если добавлено @Named или если @Remote (и implements интерфейс) отсутствует.

Шаги для воспроизведения:

  • Создание нового проекта 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. Финал
  • Выполнить тест (должен пройти): mvn test -Parq-jbossas-remote

Боб, протестированный здесь, является 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?

1 Ответ

4 голосов
/ 23 июня 2011

Снова и снова работая над этим вопросом, я разобрался с решением.Даже я ненавижу отвечать на свой вопрос. Надеюсь, это поможет кому-то в будущем.

Аннотация для сессионного компонента @Stateful (вверху вопроса) верна и остается прежней.В тестовом примере Arquillian бин был изначально внедрен с

@Inject MemberRegistration memberRegistration;

. Это работает с @Model бинами, но не с @Stateful сессионными бинами и интерфейсом @Remote.Кажется, что этот вид бобов должен быть введен с

@EJB private AdminFacade adminBean;

См. В чем разница между @Inject и @ EJB

...