2

私は@Statefulこのように注釈が付けられたいくつかのSessionBeanを持っています:

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

今度はArquillian(1.0.0.Alpha5)でテストしたいのですが、さまざまなエラーが発生します。アノテーションが@Statefulまたは@Stateless@Named追加されているか、@ 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は次のMemberRegistrationとおりです。

@Model
public class MemberRegistration
{
   ...
}

ここでに変更@Modelすると@Stateful、JBossはstacktracesでループし、次の@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!

@StatefulArquillianでBean をテストするにはどうすればよいですか?

4

1 に答える 1

4

この問題で何度も何度も作業して、私は解決策を見つけました。自分の質問に答えるのは嫌いですが、これが将来誰かに役立つことを願っています。

セッションBean(質問の上部)の注釈@Statefulは正しく、同じままです。Arquillianのテストケースでは、Beanは元々注入されていました

@Inject MemberRegistration memberRegistration;

これはBeanで機能しますが、セッションBeanとインターフェースでは機能@Modelしません。この種の豆は注入されなければならないようです@Stateful@Remote

@EJB private AdminFacade adminBean;

@Injectと@EJBの違いは何ですかを参照してください

于 2011-06-23T09:08:43.720 に答える