0

我查看了 Java EE 6 教程中的一个 EJB 示例。在这个例子中,我想知道我是否可以只使用 @Singleton 而不是 @Stateless ?

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 上使用静态方法。

还有一个问题。我知道这是一个简单的示例,但是如果我使用示例中的 servlet 中的此代码,为什么只为此使用 EJB?

4

3 回答 3

1

是的,我会说这是一个糟糕的用例EJBs。这个方法肯定应该在一些声明为静态方法的实用程序类中。对于 Singleton,如果不需要,请不要使用它(当然,您可以制作此类 Singleton,但您会获得什么?)。使您的代码尽可能简单。

于 2013-04-19T14:01:07.540 回答
1

如果你只使用@Singleton 而不是@Stateless,你会降低应用程序的性能。因为,有两种方法可以访问@Singleton bean,容器管理和 bean 管理。默认是容器管理的,默认锁是 LockType.WRITE。因此只有一个客户端可以同时访问 bean,其他客户端将被阻止。

于 2013-04-19T14:50:21.770 回答
0

如果我只需要一类实用程序,我真的看不出使用 EJB 的原因。我认为您可以将它用作一个简单的最终类实用程序并在其中使用静态方法。如果您真的需要从容器事务、使用 JPA、一些远程服务或类似的东西中受益,您会使用 EJB。

于 2013-04-28T20:38:42.127 回答