Внедрение зависимостей EJB 3 - слишком много вариантов?

Мы начинаем новый проект, основанный на EJB 3.0. У меня есть" пружинный "фон (и мне он нравится), поэтому для меня слабая связь и тестируемость - это big должен иметь . Этот пост не должен быть о «ejb vs. spring». Было бы идеально, если у вас уже есть реальный опыт работы с этим проектом.

вот пример кода, демонстрирующий проблему:

клиент -> ejb -> соавтор 1 -> Сотрудник .. -> Сотрудник n

<!-- language: java -->
@Stateless
public class SampleService {

    // or @Inject via CDI
    // or @Autowired via Spring
    @EJB // or just use a stateless session bean via EJB 3.0
    private Bank bank;

    // same for this component
    @EJB
    private Calculator calc;

    // both collaborators must be settable from outside, to make everything testable (and mockable)

    /**
     * sample "business service" called from client
     */
    public void debit(BigDecimal amount){
        calc.calculate(amount.subtract(new BigDecimal(100)));
        bank.debit(amount);
    }

}

// or via @Component (Spring), or CDI?
@Stateless // or Stateless Session bean with optional @Service/@Singleton annotation?
public class Calculator {
    public void calculate(BigDecimal subtract) {
        // calculate stuff....
    }
}

// or via @Component (Spring), or CDI?
@Stateless // or Stateless Session bean with optional @Service/@Singleton annotation?
public class Bank {
    public void debit(BigDecimal amount) {
        // ...
    }
}

Я хочу знать, как лучше всего реализовать внедрение зависимостей для всех соавторов и их соавторов в ejb 3.0? сотрудниками в этом смысле могут быть очень маленькие специализированные классы.

мы обсуждали следующие варианты до сих пор и, как всегда, еще не сделали правильного вывода:)

  1. используйте только стандарт ejb со всем, что является апатридом сессионный компонент и все последствия (например, объединение в пул, обработка ресурсов и т. д.)

  2. использовать сеансные компоненты без сохранения состояния в качестве «бизнес-компонентов» (точек входа), а оттуда

а) пружинные проводные зависимости (через интеграцию «jboss snowdrop»)

б) Проводные зависимости CDI (через WELD для ejb 3.0 и jboss eap 5.1)

Мне не нужно знать, как я могу использовать bean-компоненты в модульном тесте. ответ, который мне нужен, - это лучший подход для подключения всех зависимостей внутри работающего сервера приложений (пружина против guice против CDI против EJB). мне нужно знать только график от внешнего EJB («точки входа в бизнес») вниз. поэтому все, что находится снаружи (сервлеты, интерфейс и т. д.), является не областью этого вопроса :)

пожалуйста, предположите, что EJB 3.0 и jboss eap 5.1 установлены для проекта :)

с нетерпением жду вашего ответы и, надеюсь, некоторые знания, основанные на проекте.

10
задан Arjan Tijms 10 August 2013 в 13:01
поделиться