0

Java EE 6 チュートリアルから 1 つの EJB サンプルを見ています。この例では、 @Stateless の代わりに @Singleton を使用できるかどうかを知りたいですか?

package converter.ejb;

import java.math.BigDecimal;
import javax.ejb.*;

    @Stateless
    public class ConverterBean {

        private BigDecimal yenRate = new BigDecimal("83.0602");
        private BigDecimal euroRate = new BigDecimal("0.0093016");

        public BigDecimal dollarToYen(BigDecimal dollars) {
            BigDecimal result = dollars.multiply(yenRate);
            return result.setScale(2, BigDecimal.ROUND_UP);
        }

        public BigDecimal yenToEuro(BigDecimal yen) {
            BigDecimal result = yen.multiply(euroRate);
            return result.setScale(2, BigDecimal.ROUND_UP);
        }
    }

Util メソッドのように見えます。

EJB を使用していなければ、この ConverterBean で静的メソッドを使用できたはずです。

そして別の質問です。単純なサンプルであることはわかっていますが、サンプルのようにサーブレットからこのコードを使用する場合、なぜこれだけに EJB を使用するのでしょうか?

4

3 に答える 3

1

@Stateless の代わりに @Singleton を使用すると、アプリのパフォーマンスが低下します。@Singleton Bean にアクセスするには、コンテナー管理と Bean 管理の 2 つの方法があるためです。デフォルトはコンテナ管理で、デフォルトのロックは LockType.WRITE です。したがって、同時に 1 つのクライアントのみが Bean にアクセスでき、他のクライアントはブロックされます。

于 2013-04-19T14:50:21.770 に答える
1

はい、これはEJBsまったく悪い使用例だと思います。このメソッドは、静的メソッドとして宣言された何らかのユーティリティ クラスに含まれている必要があります。また、Singleton については、必要がなければ使用しないでください (もちろん、このクラスを Singleton にすることもできますが、何を得ることができますか?)。コードはできるだけ単純にしてください。

于 2013-04-19T14:01:07.540 に答える