以前在一个3,400人公司做产品,系统非常大,倒是有EJB,可是他们都说简单,我也没机会搞,后来跳到别的公司了,系统小,更没机会搞EJB了,整的现在写了3年代码了,EJB还是不懂,真是郁闷。你们用EJB机会多吗?

解决方案 »

  1.   

    不是吹的吧 这么多人都没怎么用过? 是不是都是系统太小啊 一台服务器够了 确实用不到EJB 了
      

  2.   

    EJB 3 比较好用,也很好,我觉得楼主可以到www.amazon.com上搜索一下EJB的书 下载下来好好研究一下
    推荐这一本,超级精炼。
    http://www.amazon.com/EJB-Developer-Guide-developers-architects/dp/1847195601/ref=sr_1_3?ie=UTF8&s=books&qid=1268014990&sr=8-3
      

  3.   

    我们经常用的,根据我实际开发过程中的理解。
    EJB分为三种:EntityBean(实体),SessionBean(会话),MessageDrivenBean(消息驱动)。
    EntityBean(实体):其实就是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上就是对一条数据记录的绑定。比如对记录的新建,更新,删除等操作,EJB容器都会自动将EntityBean的状态和数据库同步。
    SessionBean(会话):用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。 
    MessageDrivenBean(消息驱动):它是基于JMS消息,只能接收客户端发送的JMS消息然后处理。我们平常用的最多的可能就是SessionBean(会话)。
    它一般是由一个继承javax.ejb.EJBObject接口的远程对象接口;
    一个继承SessionBean的实体类,主要是去实现远程对象接口的方法(业务逻辑);
    一个继承javax.ejb.EJBHome的远程访问接口,主要是通过远程访问接口,得到一个远程对象接口。通常客户端常用的访问代码如下
             // EJB服务端地址
             String url = "t3://localhost:7001";
            // EJB服务端处理的上下文工厂类
            String type = "weblogic.jndi.WLInitialContextFactory";
            // EJB服务端的配置设定
            Properties pro = new Properties();
            pro.put(Context.PROVIDER_URL,url);
            pro.put(Context.INITIAL_CONTEXT_FACTORY,type);
            Context context = new InitialContext(pro);
            // 通过远程访问的JNDI名,得到一个EJB的远程访问接口
            Object obj = context.lookup("MaintainLogin");
            MaintainLoginHome home = (MaintainLoginHome)
                        PortableRemoteObject.narrow(obj,
                        MaintainLoginHome.class);
            // 通过EJB的远程访问接口,得到一个远程对象
            MaintainLogin remote = home.create();
            // 实现远程业务逻辑处理
            List list = remote.findByName("accp");
      

  4.   

    楼上的用的还是在EJB2时代吧。EJB3时代已经有了质的变化建议学习一下
      

  5.   

    andyye886 真热情,感谢感谢
      

  6.   

    Spring  和EJB做的是同样的工作,不过EJB 是标准,而spring是山栽版的。因为EJB2做的实在是太烂了,而spring做的很好,尤其是ICO 和AOP这两个概念发挥到了极致的地步,所以Spring 的风头日盛,EJB2就淡化了。不过 EJB3认识到了这一点,作的非常好。使用起来很方便,一个原因就是他是标准,市面上的J2EE容器都支持他,所以使用起来按照 Configuration by Exception的原则,基本上不用怎么配置。而spring则需要配置。
    Hiberenate 实现了 传统EJB的 Entity Bean的功能,它的出现也是因为EJB2做的太滥的缘故,但是EJB3的出现,解决了这个问题。首先,EJB3 现在的Entity Bean 已经独立出来为JPA,而这个JPA的设计者 就是当初Hiberenate的设计者 GavenKing 。从这一点来说 这两者是一样的,但是JPA中可以使用那个Annotation 这个使用起来超级简单,可以说一看就懂。
      

  7.   

    我04年的时候用EJB2.x做系统,还是相当的痛苦的,做了半年。
    主要是测试麻烦一些,所以影响效率,灵活性也差一些。其他的还好吧,但这两个问题也很要命。
      

  8.   

    在 EJB 3 中开发非常简单,简单到就是一个普通的业务逻辑类,再加几个 Annotation说 EJB 复杂的地方,不是在于他的技术性,而是在于他所能做的工作。EJB 适合组件级别的开发,适合分布式系统的开发。而 Spring 是做不到这一点的。EJB 在 EJB 3 中已经将 Entity Bean 去掉了,由 JPA 取代。目前 EJB 3 中还有 Session Bean 和 Message-Drivern Bean,后者一般用于 JMS 当中,一般泛指的 EJB 是指前者,即 Session Bean。有兴趣的话,可以去看一下这本书,这本书是我目前看过最好的一本关于 EJB 3 的书。
    这本书中关于 Session Bean 和 MDB 的章节只有两章,这足以说明在 EJB 3 中这两个 Bean 的技术是非常简单的。而这本书中的重头戏是 JPA,JPA 是 EJB 3 中新增的东西,全书花六个章节的篇幅进行了介绍。之前有人提到 Hibernate 的 Entity Bean,其实 Hibernate 的 Entity Bean 只是 JPA 的众多实现之一,JPA 是一个技术规范,JCP 组织规定了接口,由具体的 Provider 去实现。常用的 JPA Provider 有 Hibernate, Eclipse 的 EclipseLink,Apache 的 OpenJPA
      

  9.   

    楼上有点误解了Hibernate 没有Entity Bean吧, EJB2.X 里面有Entity Bean 但是在3里面就被取消了,不提倡使用。JPA成了重头戏。JPA是一个技术规范,尤其他的persistence 供应商实现。
      

  10.   

    EJB 暂时可以不学  但是 JPA绝对有用
      

  11.   


    应该称为 Hibernate entity manager,呵呵。
      

  12.   

    To 13 楼 andyye886 
    你用的是ejb2的。ejb3都出来很久了。只是现在还是有很多公司用的是ejb2.
    ejb3只需要几个Annotation。
      

  13.   

    Spring 可以直接集成JPA 至于JPA使用什么实现,可以在 Perisistence.xml里面配置JPA中管理Entity的工具为EntityManager  如果在容器中使用的可以可以直接使用 
    @PersistenceContext EntityManger em;直接注入就可以了   使用起来很方便的
      

  14.   

    EJB 很多设计方法都是很经典的,关键是理解其原理,其实在现在基本都没有使用它了。
      

  15.   

    EJB3 学习一点点。
      只有大型的项目才会用吧!