2

私のアプリケーションでは、SLSBとして実装された「ワーカー」のプールがあります。

glassfish-ejb-jar.xmlプールの初期化に関連するいくつかのプロパティで、次のように定義しました。

<glassfish-ejb-jar>
    <enterprise-beans>
        <ejb>
            <ejb-name>Worker</ejb-name>
            <jndi-name>Worker</jndi-name>
            <bean-pool>

                <steady-pool-size>10</steady-pool-size>
                <resize-quantity>2</resize-quantity>
                <max-pool-size>30</max-pool-size>
                <pool-idle-timeout-in-seconds>300</pool-idle-timeout-in-seconds>
            </bean-pool>
        </ejb>
    </enterprise-beans>
</glassfish-ejb-jar>

実際には、プールが開始され、適切なディメンションが設定されます。

唯一のポイントは、初期化は起動時ではなく、しばらくすると発生するということです。これは実際に、クライアントがプールを使用しようとしているのに、プールが初期化されていないことに気付くという問題を引き起こします。

起動時にプールの初期化をトリガーする方法はありますか、それとも完全にコンテナーに任されていますか?

4

2 に答える 2

2

Q:起動時にプールの初期化をトリガーする方法はありますか、それとも完全にコンテナーに任されていますか?

はい。使用しているJavaEEのバージョンによって異なります。

Java EE 5(EJB 3.0)以前-起動サーブレット、つまり構成でパラメーターload-on-startupが1にweb.xml設定されるサーブレットを使用します。そのサーブレットのinitメソッドでは、ワーカーBeanをインスタンス化し、起動時にすべてが発生します。サーブレット構成の例:

<servlet>
    <servlet-name>MyStartupServlet></servlet-name>
    <servlet-class>your.package.MyStartupServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

Java EE 6(EJB 3.1) -@StartupシングルトンBeanでアノテーションを使用します。ドキュメントから:

シングルトンセッションBean実装クラスにjavax.ejb.Startupアノテーションが付けられていない限り、EJBコンテナはシングルトンセッションBeanインスタンスを初期化するタイミングを決定する役割を果たします。この場合、熱心な初期化と呼ばれることもあり、EJBコンテナはアプリケーションの起動時にシングルトンセッションBeanを初期化する必要があります

于 2012-11-21T15:27:14.243 に答える
0

問題が解決したと思うなら。プールの初期化を強制する方法が見つからなかったとしても、プールメンバーが必要になるとすぐに、プール全体が読み込まれることに気付きました。

これは間違いなく「怠惰」に聞こえます。実際にアプリケーションのフローに問題が発生しなくても、プールされたBeanは非常に重いため、パフォーマンスの問題を明確に表しています。

于 2012-11-07T15:50:09.120 に答える