3

私のビジネスメソッドには多くのEJBがあります。これらのメソッドは、@ RolesAllowedアノテーションを使用して、ユーザーがこのメソッドを実行できるかどうかを確認します。

したがって、これらのEJBメソッドを呼び出すEJBスケジューラがあります。EJBスケジューラは匿名ユーザーで実行されるため、承認は失敗します。

他の役割でスケジューラを実行するにはどうすればよいですか?提案をテストするために、@ RunAs( "SYSTEM")アノテーションを使用して実行しますが、これが正しいかどうかはわかりません。

私のスケジューラークラス

@RunAs("SYSTEM")
public class InboxScheduler {
    protected void inboxFileScan(Timer t) {
        receiptFilesService.receiptFiles();
    }
}

私のEJBクラス

@RolesAllowed("SYSTEM")
public void receiptFiles() {
    // do anything
}
4

1 に答える 1

2

はい、それは正しい使い方です。

EJB 3.2仕様のセクション12.3.4.1には、Beanのすべてのメソッド(タイムアウトコールバックメソッドを含む)には、run-asで定義されたIDが含まれると記載されています。

仕様から: 実行IDは、エンタープライズBean全体に適用されます。つまり、エンタープライズBeanのビジネス、ホーム、およびコンポーネントのインターフェース、インターフェースなしのビュー、および/またはWebサービスエンドポイントのすべてのメソッドに適用されます。メッセージ駆動型Beanのメッセージリスナーメソッドへ。エンタープライズBeanのタイムアウトコールバックメソッド。そして、それらが順番に呼び出す可能性のあるBeanのすべての内部メソッド。

于 2011-03-07T02:10:05.343 に答える