0

ConfigParameterファイルから構成値を読み取る SLSB がありますejb-jar.xml

このクラスにはプライベート フィールドのみがあり、各フィールドには対応する getter メソッドがあります。私のアプリケーションにはConfigParameter、構成値を読み取るために のインスタンスを使用する他の多くの EJB があります。

状態はアプリケーション全体で共有されるためConfigParameter、を作成することをお勧めします。@Singleton

ただし、 ではまたはにしかejb-jar.xml設定できません。ファイルは次のようになります。session-typeStatefulStateless

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
  <enterprise-beans>    
    <session>
      <ejb-name>ConfigParameter</ejb-name>
      <ejb-class>myapp.util.ConfigParameter</ejb-class>      
      <session-type>Stateless</session-type> <!-- make this a Singleton -->
      <env-entry>
        <env-entry-name>adminRoleName</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>admin</env-entry-value>
      </env-entry>
    </session>
  </enterprise-beans>
</ejb-jar>

私の質問は次のとおりです。

  1. この Bean をシングルトンにするのは良い考えですか?
  2. はいの場合、どうすればこれを達成できますか?
  3. session-type理解のために:シングルトンに設定できないのはなぜですか?
4

2 に答える 2

3

EJB 3.0 を使用しています。シングルトン EJB は EJB 3.1 で導入されました。ejb-jar.xml で定義する場合は、適切なバージョンを定義する必要があります ( version属性と XSD の場所が3.1に変更されていることに注意してください) 。

<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" 
    version="3.1">

または@Singleton、EJB クラス自体でアノテーションを使用するだけです。

はい、アプリケーション全体の構成 Bean をシングルトンとしてマークするのが適切であると断言できます。

于 2011-11-14T08:49:00.370 に答える
0

Singleton EJB良い選択肢ですが、検討のために別のアイデアを提案したいと思います。必要な値の数とそれらが使用される場所に応じて、これがより良いアプローチである場合とそうでない場合があります。

シングルトン EJB は、アノテーションConfigParameterを介して JNDI から値を取得する単なる POJO であるため、代わりにモジュールまたはアプリケーション スコープの環境エントリ ( 、 )@Resourceを使用できる場合があります。これにより、この追加の EJB クラスが不要になる可能性があります。代わりに、値を必要とする各 EJB 内でアノテーションを使用できます。これを行うには、値を必要とする EJB/Web コンポーネント内で、または:のいずれかをプレフィックスとして付けた名前を使用するだけです。java:modulejava:app@Resource@Resourcejava:modulejava:app@Resource(name="java:app...")

于 2011-11-19T16:44:10.340 に答える