惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
博客园 - Franky
IT之家
IT之家
V
Visual Studio Blog
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
宝玉的分享
宝玉的分享
博客园 - 叶小钗
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
罗磊的独立博客
小众软件
小众软件
Jina AI
Jina AI

博客园 - yysun

Active Record Pattern 和 ORM Unit Test : MVP vs PM - yysun Refactor CAB Smart Part Quick Start Project to "Presentation Model" test P&P OB CAB EntLib SQL/e WB Editor 2.5 is in beta - yysun 把图片存到 Flickr 与 Biztalk 搏斗 Manage Plug-ins 申请 WB Editor 2 注册码 SharpReader Plug-in AJAX WB Editor 2 的口号[yysun] 用 XSL 生成 HTML 日历[yysun] 用 XSL 重命名 XML tag name[yysun] XPathDocument 与 XmlDocument 结合使用[yysun] 再谈 JXPath 与 ObjectXPathNavigator[yysun] 用 WB Editor 连接 cnblogs.com 的全攻略[yysun]
看看 EJB 3.0 的 O/R Mapping
yysun · 2006-06-16 · via 博客园 - yysun

现在主要做 .NET,但是每过一段时间总是要回头看看 Java 世界。看到了新的 EJB 3.0 spec。联想到最近这里有不少 ORM 的讨论,就顺便推荐大家看看这个 Java Persistence API in 60 Minutes

Java 中的 Annotation 就是 .NET 中的 Attribute。虽然 Java 中有这个东东比 .NET 晚,但是通过 EJB 3.0,Java 世界把 Annotation 发挥得更加淋漓尽致,ORM, Dependency Injection, AOP ... 。这正是士别三日,当刮目相看。

长久以来,一直觉得 .NET 缺乏的是 Container 这个概念。 MTS 实在 Sucks。EJB 以前当然也 Sucks。人们甚至觉得 EJB 带来的问题比解决的问题多。这两个因素掩盖了 container 的重要性。加上 SOA 这个 Buzz word 又转移了一部分注意力。

现在的 EJB 3.0 借助 Annotation 实现了瘦身,完全回到了 POJOs 的路线上来。顿时感到一阵清风。

很希望看到 .NET 世界也出个类似的 Container 。NHibernate?
没有 Container 的情况下, ORM 也没有多少意义。

[Update] 谢谢下面很多好的评论。联想到了 Annotation (注记) 与 Attribute (属性) 的用法。

一是静态的 MetaData。告诉使用者我是什么,比如 [Serializable] 。二是动态的,在 Container 配合下,请它帮我做点什么。例如 [ServiceDependecy] 就是告诉 ObjectBuilder 这个 Container 用 Dependcy Injection 帮我初始化。@Remote 就是告诉 EJB Container,有人远程叫我得时候,你想办法把我送出去 ...。通过 Container 进行功能扩充后,我自己集中做我得事情,不必顾及其他方面的细节(AOP的精髓)。所以,这就可以用 POJO 来解决主要的业务,加个注记,扔给 EJB Contain,让它变成 Stateless Session Bean。加个注记,扔给 EntityManager,让它保存到什么地方去,Table, XML ...。 

Dependcy Injection 相对简单些,在 Container 的什么 Collection 中找到想要的东西。 Interception 和 Dynamic Proxy 则相对复杂些,一般需要 Emit 新的类出来。Deployment (发布) 因此有了新的含义。在发布的时候动态生成程序 Emit dynamic proxy during deployment 是个很有意思的方向。