加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 依赖注入EJB 3 – 太多的选择?

发布时间:2020-12-14 16:47:01 所属栏目:Java 来源:网络整理
导读:我们正在启动一个基于EJB 3.0的新项目.我有一个“春天”的背景(和爱它),所以对我来说松散耦合和可测性是一个很大的必要.这个帖子不应该是关于“ejb vs. spring”.如果您已经有了真正的项目经验,这将是完美的. 以下是一些演示问题的示例代码: 客户端 – ejb
我们正在启动一个基于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为项目设置:)

期待您的答案,并希望有一些基于项目的知识.

解决方法

在Java中一般都有“太多的选择”,所以在这方面也是如此.我不会将EJB描述为通用的依赖注入框架,而是将其用于其目的.如果这是你想要的代码,你应该为此添加一个框架.如果你知道和喜欢春天,去吧.我使用Guice与EJB( here是一本不错的菜谱),效果也很好,如果你需要另一个框架来弄清楚如何做到这一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读