2013-04-19 3 views
0

Я смотрю один образец EJB из учебника Java EE 6. В этом примере я хочу знать, могу ли я просто использовать @Singleton вместо @Stateless?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); 
     } 
    } 

Выглядит как метод Утилиты.

Я мог бы использовать статические методы на этом ConverterBean, если бы я не использовал EJB.

И еще один вопрос. Я знаю, что это простой пример, но если я использую этот код из сервлета, как в примере, зачем использовать EJB только для этого?

+0

Для второго вопроса, пожалуйста, уточните это? Я не вижу вашего среднего –

ответ

1

Да, я бы сказал, что это плохой вариант использования для EJBs. Эти методы должны быть определенно в каком-то классе утилиты, объявленном как статические методы. И для Singleton, не используйте, если вам это не нужно (конечно, вы можете сделать этот класс Singleton, но что бы вы получили?). Держите ваш код как можно более простым.

+0

спасибо. Это то, что я сделал. –

0

Если вы используете @Singleton вместо @Stateless, вы снизите производительность приложения. Потому что есть два способа доступа к компонентам @Singleton, управлению контейнерами и bean-управляемым. По умолчанию используется контейнер, и по умолчанию Lock является LockType.WRITE. Таким образом, только один клиент может одновременно получить доступ к компоненту, другие будут заблокированы.

+0

спасибо. Я ожидал чего-то подобного, если бы использовал @ Синглтон. Я был заинтересован, чтобы узнать, смогу ли я заменить апатию без синтаксиса, так что ответ «да», и было плохое использование EJB, что я хотел услышать. –

0

Я действительно не вижу причины использования EJB, если мне нужен только класс утилит. Я думаю, вы могли бы использовать его в качестве простого финального класса утилит и использовать в нем статические методы. Вы должны использовать EJB, если вам действительно нужно использовать транзакции контейнера, использование JPA, некоторые удаленные службы или что-то в этом роде.

Смежные вопросы