`
raymond2006k
  • 浏览: 295070 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

对于EJB3的一些看法(在IBM秋季沙龙上的讨论)

阅读更多
    
     实际上EJB3规范我05年就略微了解了一些。
     9月3号,广州IBM组织了技术沙龙,专题介绍EJB3,JPA的技术特点。这几年由于对 Hibernate,Spring 应用经验增加,当时对EJB3 的一些疑惑和不感冒,现在更加明确了。
     沙龙上主要针对Hibernate 介绍了 EJB 3的 JPA, 针对Spring 介绍了 EJB 3 的容器特性,感觉IBM有贬低 Hibernate, Spring,力推EJB 3的气势,大概是为 WAS7的推广做准备吧,呵呵。
    
    一些明显的点就是 EJB 3为了轻量化,避免 EJB 1, EJB 2当年设计缺陷的后尘,采用了许多 Spring IOC的思想; 为了实体bean, 而又采用了 Hibernate 的许多思想,只是适当的引入了 annotation 等技术。似乎有些偷窃概念和技术,而又贬低前人的意味,这一点让人感觉很不好。
   
     另外一点,运用 annotation 进行映射,服务发布,注入等, 着实感觉不是一个好的方案,这就是我3年前的感觉。 虽然说不一定完全用 annotation 开发,但IBM将这个未经实践检验的开发模式作为一个开发推荐规范介绍给我们客户,, 有点类似当年极力推 EJB 2的感觉。 annotation 是JDK1.5开始的一个语言级的好特性,但不能滥用。特别是在 ORM 映射,将bean发布为服务等,直接在method上写 annotation,就是一种 hard coding,通俗说就是写死的做法,如:将实体的表名写死,将属性对应的库表column写死,将发布的web service 的地址写死等, 失去了 ORM 映射配置的灵活性.
  
    @Entity
  @Table(name = "STUDENT")  
  public class Student implements Serializable  {
     .....
    }
    



  
    @ManyToOne
  @JoinColumn(name = "student_id")  
  public Student getStudent() {
      return student;
  }
   

   
    实践才是最好的选择器,就像Hibernate ,Spring 成为事实上的企业级开发标准一样。 所以我们对 IBM,Oracle 的新品宣传,新规范介绍, 还要多留个心眼,有自己的思考,不能死板的照单全收。
分享到:
评论
29 楼 thinkapig 2008-09-25  
我长期从事电信级系统的研发维护,知道配置文件的大量存在是维护工作的一个大障碍;annotation确实是JPA的一个比较好的选择;hibernate在2个项目中实践过,无论是测试、开发都 比较麻烦;后来我写了一个pojo方式的数据库访问框架,总算摆脱这个烦恼;每个技术人员接触的领域都不一样,所以看问题的角度也不一样;EJB在电信领域的地位还是很高的;SSH不能很好解决事务分段提交的问题;
28 楼 zhou7707 2008-09-25  
标题党
不懂不要乱说,无知并不有趣
27 楼 liqiuxi 2008-09-25  
据我所知,ejb的jpa的设计者和hibernate是同一个人,sun挖过去的
26 楼 firemoth 2008-09-25  


算了吧,hibernate的配置以前不是也有xdoclet,现在的hibernate也全面支持annotation,连spring也全面支持annotation,这是个趋势,不光ejb3什么事

前面一位兄弟说的很对,分久必合合久必分,牛人们每年总要搞些噱头才能骗钱,熟悉业务,做好商业逻辑的封装重用,做好领域对象的设计,熟悉领域驱动开发才是重点,管它们用那种orm,过分重视框架感觉本末倒置

25 楼 tibetjungle 2008-09-25  
ejb3比ejb2的确是一个巨大的进步,很喜欢ejb3的pojo编程风格,个人认为注释的运用可以提高生产效率。

另外,如果不做分布式、集群,还是用spring的好。jpa实现的不过是hibernate的一个子集。
24 楼 hantsy 2008-09-25  
项目大了,还是觉得annotations的方式比较方便,维护大量xml配置也是件头痛的事。
jpa,ejb3 都可以使用xml配置,但是已经没有必要了,annotation是直接写在代码上的,配置量会大大减少。
23 楼 wang19841229 2008-09-25  
个人感觉现在SSH中配置文件大量使用XML,有的时候是项目中的XML文件太多了,难以管理所有个人感觉注释也是一个不错的发展方向。
22 楼 herenhuang 2008-09-24  
其实在code中注释还是比在xml中好的,xml有些泛滥了。
21 楼 mreay 2008-09-24  
raymond2006k 写道
    
     annotation 是JDK1.5开始的一个语言级的好特性,但不能滥用。特别是在 ORM 映射,将bean发布为服务等,直接在method上写 annotation,就是一种 hard coding,通俗说就是写死的做法,如:将实体的表名写死,将属性对应的库表column写死,将发布的web service 的地址写死等, 失去了 ORM 映射配置的灵活性.

你大可以使用xml文件来覆盖annotation,EJB3是xml优先。所以一般annotation中代表的只是默认的配置,适用于一般情况下。如果有需要使用xml来写些特别的地方。个人认为灵活性更高。
20 楼 raymond2006k 2008-09-24  
slaser 写道
SteveGY 写道
我怀疑所谓的“灵活性”是否真的有存在的必要。在ORM的方法中,运行时可变的数据表名字和column真的有大量的使用吗?是否有人很容易使用Hibernate组成复杂的自定义查询方法了?我好想记得,前几天还有人推荐team规范“禁止使用HQL”的。
在实际项目中,如果数据库设计都已经发生变化,改动java源码难道不是必要的吗?或者说修改xml会比较容易?再或者说一个表增加了3个column,java源码也是不需要改变的?到底要怎样理解hard coding?把一种基于java源程序的hard coding转移到基于xml配置文件中,就算是去除了hard coding?hard coding和“灵活性”都不是绝对的。
EJB3在使用annotation,这是一种设计选择,他们既然这样选择,还是衡量过灵活性和易用性的,除去hibernate不讲,看看最近spring的某些言论,支持EJB3已经是基本一致的看法了,想想当年spring是怎么起家的,反EJB算一面旗帜,也算一点点讽刺吧。
我一直在team规范中使用iBATIS,iBATIS for java and for .net,2种语言类型的项目都用,个人认为hibernate在跨数据库支持上还可以,其他的都不怎么样。

我一直觉得表结构不一定适合用对象表示,我认为xml描述的表结构比java实体类更为优美,所以我觉得,hibernate可不可以不要写java实体类了,直接一个hbm文件全部搞定,反正那个实体类不过承载数据而已,可以用动态对象代替。



Ofbiz 就是这样的框架,一个 GenericValue 代替所有的 VO,还比较好用。
19 楼 grandboy 2008-09-24  
slaser 写道
保持代码纯洁性比较好,annotation没有必要。写xml不比写annotation花时间多,而且xml比annotation更容易理解,也更灵活。如果一定要降低开发难度,我觉得还是引入jruby一类动态语言,java不应该变的复杂。


这点可能公说公有理,婆说婆有理了。xml比annotation更容易理解,可能有相当多的人都不认同。annotation至少在compile时还能检查一下是不是拼错了,或者语法错误。当然就是修改就要重新编译了。xml里的有些错误真是太难找了。

要选择适合自己项目的技术就行了。
18 楼 likeblood 2008-09-24  
ejb3的规范就是king领导的
ioc也不是spring的思想

都是大同
17 楼 slaser 2008-09-24  
SteveGY 写道
我怀疑所谓的“灵活性”是否真的有存在的必要。在ORM的方法中,运行时可变的数据表名字和column真的有大量的使用吗?是否有人很容易使用Hibernate组成复杂的自定义查询方法了?我好想记得,前几天还有人推荐team规范“禁止使用HQL”的。
在实际项目中,如果数据库设计都已经发生变化,改动java源码难道不是必要的吗?或者说修改xml会比较容易?再或者说一个表增加了3个column,java源码也是不需要改变的?到底要怎样理解hard coding?把一种基于java源程序的hard coding转移到基于xml配置文件中,就算是去除了hard coding?hard coding和“灵活性”都不是绝对的。
EJB3在使用annotation,这是一种设计选择,他们既然这样选择,还是衡量过灵活性和易用性的,除去hibernate不讲,看看最近spring的某些言论,支持EJB3已经是基本一致的看法了,想想当年spring是怎么起家的,反EJB算一面旗帜,也算一点点讽刺吧。
我一直在team规范中使用iBATIS,iBATIS for java and for .net,2种语言类型的项目都用,个人认为hibernate在跨数据库支持上还可以,其他的都不怎么样。

我一直觉得表结构不一定适合用对象表示,我认为xml描述的表结构比java实体类更为优美,所以我觉得,hibernate可不可以不要写java实体类了,直接一个hbm文件全部搞定,反正那个实体类不过承载数据而已,可以用动态对象代替。
16 楼 slaser 2008-09-24  
保持代码纯洁性比较好,annotation没有必要。写xml不比写annotation花时间多,而且xml比annotation更容易理解,也更灵活。如果一定要降低开发难度,我觉得还是引入jruby一类动态语言,java不应该变的复杂。
15 楼 davexin 2008-09-24  
ejb3有他的用途的,如果你们的应用不用使用ejb3也能方便解决得问题的话,你就没有必要使用ejb3,ibm当然是推自己的东西了。不过如果你有分布式和集群应用的话,ejb3就是很好的解决方案。我们现在就使用ejb3做的,感觉还是可以的,开发也挺方便。
14 楼 raymond2006k 2008-09-24  
SteveGY 写道
我怀疑所谓的“灵活性”是否真的有存在的必要。在ORM的方法中,运行时可变的数据表名字和column真的有大量的使用吗?是否有人很容易使用Hibernate组成复杂的自定义查询方法了?我好想记得,前几天还有人推荐team规范“禁止使用HQL”的。
在实际项目中,如果数据库设计都已经发生变化,改动java源码难道不是必要的吗?或者说修改xml会比较容易?再或者说一个表增加了3个column,java源码也是不需要改变的?到底要怎样理解hard coding?把一种基于java源程序的hard coding转移到基于xml配置文件中,就算是去除了hard coding?hard coding和“灵活性”都不是绝对的。
EJB3在使用annotation,这是一种设计选择,他们既然这样选择,还是衡量过灵活性和易用性的,除去hibernate不讲,看看最近spring的某些言论,支持EJB3已经是基本一致的看法了,想想当年spring是怎么起家的,反EJB算一面旗帜,也算一点点讽刺吧。
我一直在team规范中使用iBATIS,iBATIS for java and for .net,2种语言类型的项目都用,个人认为hibernate在跨数据库支持上还可以,其他的都不怎么样。



老兄的观点谈的很仔细啊,多谢了, 论坛就是需要这样热烈的讨论。呵呵。

XML配置的灵活性我想不用怀疑,经过大量开发实践,特别是大型项目的朋友我想都是对此深有体会的。
只是现在EJB3将annotation等作为最佳实践推荐给客户,到是值得怀疑的,虽然 EJB3还未规范用起来,但帖子是个人根据几年开发经验谈谈此类问题的感受。

推荐使用 Hibernate 时不用 HQL,用命名SQL的也是我啦,呵呵,此点似乎与官方规范,推荐用法都有悖,所有很多网友反对我。呵呵。

遇到新产品,新规范,一般人都是照单全收。我想有一些怀疑,探索精神还是需要滴,呵呵。
感谢你的热情讨论,希望以后多交流。
13 楼 HenryYu 2008-09-24  
JPA只是EJB3一部分,Spring和hibernate是企业开发事实标准,这估计也只是你的自己的事实标准。我们一般讨论ejb与spring,都是基于EJB容器与Spring的Bean容器层面上的比较。谁优谁劣没有绝对,比较的目的是更好地根据项目的特点进行合理的选择。
12 楼 hity 2008-09-24  
大型分布式应用EJB绝对是首选
11 楼 天一 2008-09-24  
不知道楼主有没有在项目中用过。
10 楼 xiaopang106 2008-09-24  
我在用EJB3的过程中发现使用他还是很方便的,不像spring+hibernt那么麻烦,需要一大堆的配置,实体bean里面 我就用了@Entity,@Table,@Id三个注解,接口和sessionBean用@remote或者@local, @Stateless,不过没有在实际的项目中练过,纯粹是练手的。

相关推荐

    IBM EJB实验说明

    3. **配置部署描述符**:虽然EJB 3.0允许省略大部分XML配置,但在某些情况下,可能仍需要编辑`ejb-jar.xml`来定制部署行为。 4. **测试和调试**:利用RAD内置的调试器对EJB进行单元测试和集成测试,确保其功能正确...

    实战角度比较EJB2和EJB3的架构异同

    EJB2和EJB3是EJB技术的两个主要版本,它们在架构上存在显著差异,尤其是在编程模型的简化、依赖注入(DI)和对象创建方式等方面。 EJB2的编程模型相对复杂,一个EJB通常需要两个接口(业务接口和远程接口)以及一个...

    ejb3 带源码

    EJB3是EJB规范的一个重要版本,它在EJB2的基础上进行了重大改进,极大地简化了开发流程,降低了对开发者的要求。"ejb3 带源码"的资源,如"Mastering EJB3"和"Beginning EJB3 Application Development"等,提供了深入...

    EJB 3实战 带书签

    虽然EJB 3是Java EE标准的一部分,但开发者需要了解如何确保应用可以在不同的Java EE容器和应用服务器上运行。这涉及到容器相关的配置、兼容性和最佳实践的讨论。互操作性部分则关注于EJB与不同技术(如Web Services...

    EJB3 PPT教程

    在EJB3中,SessionBean变得更加轻量级,不再需要XML配置,而是通过注解实现。你可以学习如何定义SessionBean接口、实现类,并使用`@Stateless`或`@Stateful`注解来指定其状态行为。 **二、EntityBean** EntityBean...

    EJB3基础教程

    EJB3应用通常部署在Java EE应用服务器上,如Glassfish、WildFly或WebLogic等。开发者需要创建一个包含所有必需bean和元数据的ejb-jar文件,并将其打包进war或ear文件中。 ### 10. 持续集成与测试 EJB3支持单元测试...

    EJB3的三本好书第3本 Mastering EJB3 4ed

    EJB3的三本好书之三,也很不错的一本ejb3的书籍,是英文版,附带源代码,这本书的好处是与Mastering EJB 3ed有一定的继承性,可以对比来看. 3本书的地址 1. Beginning EJB3 Application Development From Novice to ...

    ejb3进阶案例

    总结,ejb3进阶案例涵盖了ejb3的核心组件,通过实践可以在理解ejb3特性的基础上,提升在JBoss 5上的应用开发和部署能力。通过深入学习和实践这些案例,开发者能够更好地掌握ejb3的精髓,从而构建出高效、稳定的企业...

    EJB3应用实例

    通过这个"JBOSS7+EJB3"实例,我们可以深入了解EJB3如何在实际环境中运行,以及如何在JBOSS7这样的应用服务器上部署和管理EJB服务。这不仅有助于提升开发者对EJB3的理解,也有助于在实际项目中更高效地利用EJB3来构建...

    EJB3入门例子

    1. **注解驱动(Annotation-based)**:在EJB3中,开发者可以使用注解来声明组件的角色、生命周期方法和持久化属性,如`@Entity`、`@Stateless`、`@Stateful`、`@SessionBean`等,大大减少了XML配置文件的使用。...

    \websphere部署EJB3.docx

    在本文档中,我们探讨了如何在IBM WebSphere应用服务器上部署EJB 3应用程序。WebSphere是IBM提供的一款强大的Java应用服务器,它支持Java EE(Enterprise JavaBeans)规范,包括EJB 3。以下是详细的步骤和知识点: ...

    ejb3-persistence

    EJB3的持久化标准很大程度上受到了Hibernate的影响,并且在某些情况下,EJB3的持久化可以与Hibernate共存或互换。Hibernate提供了更丰富的功能,如二级缓存、事件监听和自定义类型,对于需要更强大ORM功能的开发者来...

    EJB3开发Entity

    EJB3是EJB规范的一个重要版本,它在EJB2的基础上进行了许多简化和改进,使得开发更加高效且易于理解。本文将深入探讨EJB3中的Entity Bean,它是EJB3中的持久化组件,用于代表数据库中的实体。 1. **实体Bean的概念*...

    EJB3(入门经典简版)

    EJB3支持JSR 330标准的依赖注入,通过`@Inject`注解可以在bean之间注入依赖,简化了组件间的协作。 6. **容器管理事务(Container Managed Transactions, CMT)** EJB容器自动管理事务的开始、提交、回滚,开发者...

    struts2-ejb3配置

    在JBoss 6这样的应用服务器上整合Struts2和EJB3时,可能会遇到一些挑战。首先,Struts2在JBoss 6中可能出现部署问题,这主要是因为JBoss 6引入了新的Jar文件前缀“vfs”,而Struts2的Xwork组件对此不兼容。Xwork是...

    ejb3_structs

    【 ejb3_structs 】是一个关于企业级...这个项目对于学习EJB3和Struts的集成,以及理解企业级Java应用开发有很好的实践价值。通过深入研究源码,可以更好地掌握这两者之间的协作方式,从而提升在实际开发中的能力。

    EJB3 入门经典 源码

    EJB3是EJB规范的一个重要版本,它在EJB2的基础上进行了重大改进,引入了许多简化开发的新特性,使得EJB更加易用且高效。这个压缩包文件"**EJB3 入门经典 源码**"很可能是为了帮助初学者理解并学习EJB3的基本概念、...

    EJB3 实例练习(一)

    EJB3是EJB规范的一个重要版本,它在EJB2的基础上进行了许多简化和改进,使得开发更加高效且易于理解。在这个实例练习中,我们将探讨EJB3的基本概念、特性以及如何创建和运行一个简单的EJB3应用。 1. EJB3概述 EJB3...

    EJB3的三本好书第2本, EJB3 in Action 2007

    EJB3的三本好书第二本,最好的介绍ejb3的书,看过之后,其他的书都送人了,而且附带的源代码,几乎包括了所有的主流应用服务器的例子,glassfish, jboss, weblogic, oracleAS 3本书分别是: 1. Beginning EJB3 ...

    EJB3实战的源代码

    EJB3是EJB规范的一个重要版本,它在EJB2的基础上进行了重大改进,极大地简化了开发流程,降低了学习曲线,提升了开发效率。 在"EJB3实战的源代码"这个资源中,我们可以深入学习和理解EJB3的各种特性。EJB3引入了...

Global site tag (gtag.js) - Google Analytics