【问题标题】:Frameworks and specification for JPA, CDI and JSFJPA、CDI 和 JSF 的框架和规范
【发布时间】:2015-08-04 20:56:29
【问题描述】:

我已阅读并了解 JPA、JSF、CDI 只是规范。如:

  • JPA - [休眠,Toplink],JSR-000338
  • CDI - [Spring - Google Guice,PicoContainer],JSR299
  • JSF - [Primefaces、IceFaces、RichFaces]、JSR-000314

那么,如果它们只是论文中的规范,为什么包会说“javax.persistence...”、“javax.faces.”?

我认为甲骨文说:这是本文的规则在哪里。如果你想实现它,你必须使用我的包名(“javax.persistence...”,“javax.faces.”),作为付费,你可以添加更多的功能,你可以把自己的包用于扩展功能?

另外,如果我研究规范(jpa、cdi、jsf),我可以使用任何框架吗?甚至,在没有​​它们的情况下构建我的软件?

请解释一下。

最好的问候。

【问题讨论】:

    标签: spring hibernate jsf jpa cdi


    【解决方案1】:

    首先,Spring 和 Guice(也不是 PicoContainer,AFAIK)都不是 CDI 实现。 JBoss Weld 是一个 CDI 实现。

    第二。该规范不仅仅是一张纸。它也是一组接口和类,每个实现都必须正确实现或扩展,甚至包含不依赖于实现的核心功能(例如,参见Persistence)。这些接口和类是 javax 包中的。它们是规范本身的一部分,实现可能不会修改它们。

    标准的想法确实是,通过依赖规范中描述的规则,您应该能够使用任何实现规范的框架。但请注意,有时某些部分未指定,并且即使没有错误,实现也可以做一些不同的事情。

    理论上,只要您的软件用户选择其想要的实现,就可以在没有实现的情况下实现您的软件。但这是非常不现实的:您将必须测试您的软件,从而为您的测试选择一个实现。而且,如果您计划支持规范的多个实现,则必须对所有这些实现进行测试,甚至可能需要进行调整。

    【讨论】:

    • 此外,PrimeFaces、ICEfaces 和 RichFaces 不是 JSF 实现。另见stackoverflow.com/q/2167509
    • 因此,Hibernate 和 Toplink 都不是来自 JPA 的实现?
    • Hibernate 和 EclipseLink 是 JPA 实现。
    猜你喜欢
    • 2014-06-05
    • 2015-01-11
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多