0

FacesValidatorを含むWebプロジェクトがあります。このバリデーターは、EJBサービスにアクセスして、レコードが存在するかどうかを確認する必要があります。残念ながら、バリデーターはマネージドBeanではないため、エンタープライズBeanを挿入できません。そのため、InitialContextを介してエンタープライズBeanにアクセスしようとしています。http://docs.oracle.com/javaee/6/tutorial/doc/gipjf.htmlとは異なる組み合わせを試しましたが、失敗しました。

動作するのはこのフォーマットです:

java:global/myProject-ear-1.0.0/myProject/MyService!com.czetsuya.myProject.service.membership.MyService,

私の質問はそれを単純化できるかということです。長すぎるようです。

ありがとう、
czetsuya

4

1 に答える 1

4

サーバーログを見てください。少しまともな EJB コンテナー (少なくとも、Glassfish 3 と JBoss 6/7 はそうです) は、EJB の展開ステップ中に、EJB の使用可能なすべての JNDI 名をログに記録します。バリデーターが WAR に適切に配置され、EJB に@Localインターフェースがある場合、最短の JNDI 名はjava:app、あなたのケースではjava:app/myProject/MyService.

まったく別の代替手段は、代わりにバリデーターを JSF または CDI マネージド Bean にすることです。これにより、@EJBアノテーションのみを使用できるようになります。

@ManagedBean // Or @Named.
@ApplicationScoped // Provided that the instance doesn't have any state.
public class MyValidator implements Validator {

    @EJB
    private MyService myService;

    // ...
}

binding代わりにvalidatorId次のように参照します。

<f:validator binding="#{myValidator}" />

@EJBJSF 2.2 以降では、@FacesValidator(and )に注入できるはずであることに注意してください@FacesConverter

以下も参照してください。

于 2012-11-25T12:09:30.030 に答える