Мы начинаем новый проект на основе EJB 3.0. У меня есть фон "spring" (и люблю его), поэтому для меня важна свободная связь и тестируемость. Этот пост не должен быть о "ejb vs. spring". Было бы прекрасно, если бы у вас уже был настоящий опыт проекта с этим.
вот пример кода для демонстрации проблемы:
client → 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? Коллабораторы в этом смысле могут быть очень маленькими выделенными классами.
мы обсуждали следующие варианты до сих пор и, как всегда, еще не имеем правильного вывода:)
-
используйте только стандарт ejb со всем, что связано с сеансом без состояния bean и всеми последствиями (например, пулом, обработкой ресурсов и т.д.).
-
использовать сессию без состояния beans как "бизнес-компоненты" (точки входа) и оттуда
a) spring проводные зависимости (через интеграцию "jboss snowdrop" )
b) Связанные с CDI зависимости (через WELD для ejb 3.0 и jboss eap 5.1)
Мне не нужно знать, как я могу использовать beans в unit test. ответом, которым я являюсь, является наилучшим подходом для подключения всех зависимостей внутри запущенного сервера приложений (spring против guice против CDI против EJB). Мне нужно только знать график из внешнего EJB ( "точка входа в бизнес" ) вниз. так что все снаружи (сервлеты, интерфейс и т.д.) не является предметом этого вопроса:)
пожалуйста, предположим, что для проекта установлены EJB 3.0 и jboss eap 5.1:)
с нетерпением жду ваших ответов и, надеюсь, некоторые знания, основанные на проектах.