【问题标题】:POJO vs EJB vs EJB 3 [duplicate]POJO vs EJB vs EJB 3 [重复]
【发布时间】:2010-11-12 21:13:37
【问题描述】:

有没有人举例说明 Java 类可能看起来像 POJO、EJB 和 EJB 3 吗?我正在尝试了解这些 Java 技术,但遇到了麻烦。我希望如果我能看到这三个的实现会是什么样子会有所帮助。

【问题讨论】:

    标签: java ejb pojo


    【解决方案1】:

    通过:http://swik.net/POJO+ejb3

    EJB3 实体是普通的 POJO。实际上,它们代表了与 Hibernate 持久实体完全相同的概念。它们的映射是通过 JDK 5.0 注释定义的(用于覆盖的 XML 描述符语法在 EJB3 规范中定义)。注释可以分为两类,逻辑映射注释(允许您描述对象模型、类关联等)和物理映射注释(描述物理模式、表、列、索引等)。我们将在以下代码示例中混合使用这两个类别的注释。 EJB3 注释在 javax.persistence.* 包中。大多数兼容 JDK 5 的 IDE(如 Eclipse、IntelliJ IDEA 和 Netbeans)可以为您自动完成注释接口和属性(即使没有特定的“EJB3”模块,因为 EJB3 注释是普通的 JDK 5 注释)。

    例如:http://www.laliluna.de/ejb-3-tutorial-jboss.html

    @Entity
    @Table(name="book")
    @SequenceGenerator(name = "book_sequence", sequenceName = "book_id_seq")
    public class Book implements Serializable {
    

    Entity 定义这是一个实体 bean。第二个定义表名。最后一个定义了一个序列生成器。

    【讨论】:

    • swik.net 链接似乎已死吉姆
    • @b0x0rz 这个swik.net/POJO+ejb3 不工作,显示服务器关闭。使用替代工作链接更新此内容。
    【解决方案2】:

    POJO

    public class Person {
    
        private String name;
        private int age;
    
        public Person() {
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        // setter & getter for age omitted
    
        public String toString() {
            return "Person " + name;
        }
    
    }
    

    这也可以用作EJB3。

    关于 EJB2,请忘记它的存在,不要在上面投入任何时间,除非您绝对必须这样做(例如处理遗留代码)。

    【讨论】:

      【解决方案3】:

      POJO 代表 Plain-Old-Java-Object - 只是一个普通的 Java 类,而不是需要以特定方式更改类以使其与框架配合使用的旧技术。

      class MyService {
      
          public String sayHello() { return "hello world"; }
      
      }
      

      因此,POJO 可以在任何可以使用普通类的地方使用。但是,如果您想用它们构建企业应用程序,您仍然需要一些框架 - Spring 是可以直接与 POJO 一起使用的框架的一个很好的例子。

      EJB2 不再相关,因此您可以忽略它 - 除非您需要维护一些遗留代码。为了满足您的好奇心,与上面相同的示例需要多个类和 xml 描述符才能使其运行 - 很容易看出它为什么会过时。

      EJB3 是用于开发企业应用程序的最新标准,它取代了 EJB2,它基于获取 POJO 并对其进行注释以便它们可以在企业应用程序中使用的概念。

      @Stateless
      class MyService {
          public String sayHello() { return "hello world"; }
      }
      

      如您所见,它与 POJO 非常相似。事实上,大多数为 EJB3 编写的应用程序都可以轻松转换为使用 Spring,通常其他方式也可以。

      【讨论】:

        【解决方案4】:

        即使是上面提到的这个类(@Stateless class MyService)也和 POJO 类似,但它不是传统定义的 POJO,因为它依赖于 javax.ejb 包。我希望这种依赖关系就像一个软引用(数据库概念)而不是必需的。这篇文章提到了一些关于这个的想法:How to Fix Java POJO Annotations

        【讨论】:

          猜你喜欢
          • 2013-01-05
          • 2015-05-18
          • 2011-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多