1.4. EJB メソッドパーミッション

アプリケーションアセンブラは <method-permission> 要素宣言を使用して、EJB のホームとリモートインターフェースのメソッドを呼び出すために可能なロールを設定できます。
<method-permission> 要素

図1.4 <method-permission> 要素

<method-permission> 要素には <role-name> 子要素が 1 つ以上含まれています。<role-name><method> 子要素で識別されるとおり EJB メソッドにアクセスできる論理ロールを定義します。<role-name> 要素の代わりに <unchecked> 要素を指定して、認証ユーザーなら誰でもメソッド子要素で識別されたメソッドにアクセスできることを宣言できます。さらに、誰も exclude-list 要素を持つメソッドにアクセスできないことも宣言できます。EJB に <method-permission> 要素を使用してロールでアクセスできると宣言されていないメソッドがある場合、EJB メソッドは使用から除外されるようデフォルト設定します。これはメソッドを exclude-list にデフォルト設定するのと同等です。
<method> 要素

図1.5 <method> 要素

メソッド要素宣言にはサポートされているスタイルが 3 つあります。
1 つ目は名前付きエンタープライズ Bean のホームとコンポーネントインターフェースメソッドすべてを参照するために使用します。
<method>
    <ejb-name>EJBNAME</ejb-name>
    <method-name>*</method-name>
</method>
2 つ目のスタイルは名前付きエンタープライズ Bean のホームまたはコンポーネントインターフェースの指定されたメソッドを参照するために使用されます。
<method>
    <ejb-name>EJBNAME</ejb-name>
    <method-name>METHOD</method-name>
                </method>
同じオーバーロードした名前を持つメソッドが複数ある場合は、このスタイルはオーバーロードしたメソッドすべてを参照します。
3 つ目のスタイルはオーバーロードした名前を持つメソッドのセット内で指定されたメソッドを参照するために使用されます。
<method>
    <ejb-name>EJBNAME</ejb-name>
    <method-name>METHOD</method-name>
    <method-params>
        <method-param>PARAMETER_1</method-param>
        <!-- ... -->
        <method-param>PARAMETER_N</method-param>
    </method-params>
</method>
メソッドは特定のエンタープライズ Bean のホームまたはリモートインターフェースで定義される必要があります。<method-param> 要素値は、対応するメソッドパラメータタイプの完全修飾名です。同じオーバーロードされたシグネチャを持つメソッドが複数ある場合は、パーミッションは一致するオーバーロードしたメソッドすべてに当てはまります。
オプションの <method-intf> 要素は、エンタープライズ Bean のホームとリモートインターフェースで定義された同じ名前とシグネチャを持つメソッドを区別するために使用できます。
例1.5「<method-permission> 要素の使用方法」 には <method-permission> 要素の使用方法の完全な例が示されています。

例1.5 <method-permission> 要素の使用方法

<ejb-jar>
    <assembly-descriptor>
        <method-permission>
            <description>The employee and temp-employee roles may access any
                method of the EmployeeService bean </description>
            <role-name>employee</role-name>
            <role-name>temp-employee</role-name>
            <method>
                <ejb-name>EmployeeService</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <method-permission>
            <description>The employee role may access the findByPrimaryKey,
                getEmployeeInfo, and the updateEmployeeInfo(String) method of
                the AardvarkPayroll bean </description>
            <role-name>employee</role-name>
            <method>
                <ejb-name>AardvarkPayroll</ejb-name>
                <method-name>findByPrimaryKey</method-name>
            </method>
            <method>
                <ejb-name>AardvarkPayroll</ejb-name>
                <method-name>getEmployeeInfo</method-name>
            </method>
            <method>
                <ejb-name>AardvarkPayroll</ejb-name>
                <method-name>updateEmployeeInfo</method-name>
                <method-params>
                    <method-param>java.lang.String</method-param>
                </method-params>
            </method>
        </method-permission>
        <method-permission>
            <description>The admin role may access any method of the
                EmployeeServiceAdmin bean </description>
            <role-name>admin</role-name>
            <method>
                <ejb-name>EmployeeServiceAdmin</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <method-permission>
            <description>Any authenticated user may access any method of the
                EmployeeServiceHelp bean</description>
            <unchecked/>
            <method>
                <ejb-name>EmployeeServiceHelp</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <exclude-list>
            <description>No fireTheCTO methods of the EmployeeFiring bean may be
                used in this deployment</description>
            <method>
                <ejb-name>EmployeeFiring</ejb-name>
                <method-name>fireTheCTO</method-name>
            </method>
        </exclude-list>
    </assembly-descriptor>
</ejb-jar>