我看了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呢?
发布于 2013-04-19 22:01:08
是的,我会说这是EJBs的一个糟糕的用例。这些方法应该明确地在某个声明为静态方法的实用程序类中。对于单例,如果你不需要它,就不要使用它(当然,你可以让这个类成为单例,但是你能得到什么呢?)让你的代码尽可能的简单。
发布于 2013-04-19 22:50:22
因为,有两种方法可以访问@Singleton bean,容器管理和bean管理。默认为容器管理,默认锁为LockType.WRITE。因此同一时间只有一个客户端可以访问该bean,其他客户端将被阻止。
发布于 2013-04-29 04:38:42
如果我只需要一类实用程序,我真的看不出在中使用EJB的原因。我认为您可以将它用作一个简单的最终实用程序类,并在其中使用静态方法。如果您确实需要从容器事务、JPA的使用、一些远程服务或类似的东西中获益,则可以使用EJB。
https://stackoverflow.com/questions/16106356
复制相似问题