我们正在启动一个基于EJB 3.0的新项目.我有一个“春天”的背景(和爱它),所以对我来说松散耦合和可测性是一个很大的必要.这个帖子不应该是关于“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中为所有协作者及其合作者实施依赖注入的最佳方式是什么?在这个意义上的协作者可以非常非常小的专业课.
到目前为止,我们已经讨论了以下选项,因为总是没有一个正确的结论:)
>只使用ejb标准与所有beeing无状态会话bean和所有后果(如池,资源处理等)
>使用无状态会话bean作为“业务组件”(入口点)和从那里
a)弹簧有线依赖(通过“jboss snowdrop”整合)
b)CDI有线依赖(通过WELD for ejb 3.0和jboss eap 5.1)
我不需要知道如何在单元测试中使用bean.我以后的答案是什么是最好的方法来连接运行的appserver内的所有依赖项(spring vs. guice vs. CDI vs. EJB).我只需要从外部EJB(“业务入口点”)向下知道图形.所以外面的一切(servlets,frontend等)不是这个问题的范围:)
请假定EJB 3.0和jboss eap 5.1为项目设置:)
期待您的答案,并希望有一些基于项目的知识.