love fish大鵬一曰同風起,扶搖直上九萬里

          常用鏈接

          統(tǒng)計

          積分與排名

          friends

          link

          最新評論

          EJB 3.0開發(fā)指南之組合主鍵

          在前面的所有的實體Bean的例子中,我們所用的主鍵都是Id,而且都是由容器自動生成的。

            如:

          @Id(generate = GeneratorType.AUTO)
          public int getId()
          {
           return id;
          }

            事實上,主鍵可以是任意的java基本類型、或者是基本類型的包裝類,如Integer、String類型、或者是帶字段或?qū)傩缘闹麈I類。注意,如果這樣使用主鍵,你需要將主鍵的注釋中的生成規(guī)則改為NONE。就是由程序生成主鍵值。

            主鍵類必須實現(xiàn)hashCode和equals方法。

            這個例子前面舉例過,就是一個存儲學生信息的實體bean,在那個例子中,使用Name類作為屬性,并且以Id作為主鍵,在這個例子中,我們將使用name作為主鍵,注意name的類型一個java類。和前面的例子一樣,我們還是使用Client測試。

            Name.java:主鍵。

            Student.java:實體Bean類。

            StudentDAO.java:會話Bean的業(yè)務(wù)接口

            StudentDAOBean.java:會話Bean的實現(xiàn)類

            Client.java:測試EJB的客戶端類。

            jndi.properties:jndi屬性文件,提供訪問jdni的基本配置屬性。

            Build.xml:ant 配置文件,用以編譯、發(fā)布、測試、清除EJB。

            下面針對每個文件的內(nèi)容做一個介紹。

            Name.java

          package com.kuaff.ejb3.composite;

          import java.io.Serializable;
          import javax.ejb.AccessType;
          import javax.ejb.DependentObject;

          @DependentObject(access = AccessType.PROPERTY)

          public class Name implements java.io.Serializable
          {
           private String first;
           private String last;

           public Name()
           {
           }

           public Name(String first, String last)
           {
            this.first = first;
            this.last = last;
           }

           public String getFirst()
           {
            return first;
           }

           public void setFirst(String first)
           {
            this.first = first;
           }

           public String getLast()
           {
            return last;
           }

           public void setLast(String last)
           {
            this.last = last;
           }

           public int hashCode()
           {
            return (first+last).hashCode();
           }

           public boolean equals(Object object)
           {
            if (this == object) return true;
            if (object == null) return false;
            if (! (object instanceof Name)) return false;
            Name name = (Name)object;
            if ((name.first.equals(first)) && (name.last.equals(last)))
             return true;
            else
             return false;
           }

          }

            Student.java

          package com.kuaff.ejb3.composite;

          import javax.ejb.Dependent;
          import javax.ejb.DependentAttribute;
          import javax.ejb.Column;
          import javax.ejb.Entity;
          import javax.ejb.GeneratorType;
          import javax.ejb.Id;
          import javax.ejb.Table;

          @Entity @Table(name = "STUDENT") public class Student implements java.io.Serializable
          {
           private Name name;
           private String grade;
           private String email;

           public void setName(Name name)
           {
            this.name = name;
           }

           @Id(generate = GeneratorType.NONE)
           @Dependent(
            { @DependentAttribute(name = "first", column ={ @Column(name = "FIRST") }),
             @DependentAttribute(name = "last", column ={ @Column(name = "LAST") }) })
             public Name getName()
             {
              return name;
             }

           public void setGrade(String grade)
           {
            this.grade = grade;
           }

           @Column(name = "GRADE")
           public String getGrade()
           {
            return grade;
           }

           public void setEmail(String email)
           {
            this.email = email;
           }

           @Column(name = "EMAIL")

           public String getEmail()
           {
            return email;

            StudentDAO.java

          package com.kuaff.ejb3.composite;

          import javax.ejb.Remote;
          import java.util.List;

          @Remote

          public interface StudentDAO

          {

          void create(String first, String last, String grade, String email);



          Student find(Name name);

          List findByFirstName(String name);

          List findByLastName(String name);

          List findByEmail(String email);



          void merge(Student s);

          }

            StudentDAOBean.java

          package com.kuaff.ejb3.composite;

          import java.util.List;
          import javax.ejb.EntityManager;
          import javax.ejb.Inject;
          import javax.ejb.Stateless;

          @Stateless

          public class StudentDAOBean implements StudentDAO
          {
           @Inject
           private EntityManager manager;

           public void create(String first, String last, String grade, String email)
           {
            Student student = new Student();
            student.setName(new Name(first,last));
            student.setGrade(grade);
            student.setEmail(email);
            manager.create(student);
           }

           public Student find(Name name)
           {
            return manager.find(Student.class, name);
           }

           public List findByFirstName(String name)
           {
            return manager.createQuery("from Student s where s.name.last = :name").setParameter("name", name).listResults();

           }

           public List findByLastName(String name)
           {
            return manager.createQuery("from Student s where s.name.first = :name").setParameter("name", name).listResults();
           }

           public List findByEmail(String email)
           {
            return manager.createQuery("from Student s where s.email = :email").setParameter("email", email).listResults();
           }

           public void merge(Student s)
           {
            manager.merge(s);
           }

          }

            Client.java

          package com.kuaff.ejb3.composite;

          import javax.naming.InitialContext;
          import javax.naming.NamingException;
          import java.util.List;

          public class Client
          {
           public static void main(String[] args) throws NamingException
           {
            InitialContext ctx = new InitialContext();
            StudentDAO dao = (StudentDAO) ctx.lookup(StudentDAO.class.getName());
            dao.create("晁","岳攀","8","smallnest@kuaff.com");
            dao.create("朱","立煥","6","zhuzhu@kuaff.com");
            Name name = new Name("朱","立煥");

            //List list = dao.findByEmail("zhuzhu@kuaff.com");

            Student s = dao.find(name);
            System.out.printf("%s %s的email:%s%n",s.getName().getFirst(),s.getName().getLast(),s.getEmail());
            /*
             for(Object o:list)
             {
              Student s = (Student)o;
              System.out.printf("%s %s的email:%s%n",s.getName().getFirst(),s.getName().getLast(),s.getEmail());
             }
            */
           }
          }

            這個客戶端用來測試。

            請運行{$JBOSS_HOME}/bin目錄下的run.bat: run –c all,啟動JBOSS。

          http://localhost:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss%3Aservice%3DHypersonic%2Cdatabase%3DlocalDB,然后調(diào)用startDatabaseManager()方法,打開HSQL管理工具管理數(shù)據(jù)庫。

            在Eclipse的Ant視圖中執(zhí)行ejbjar target。或者在命令行下,進入到此工程目錄下,執(zhí)行ant ejbjar,將編譯打包發(fā)布此EJB。

            在Eclipse的Ant視圖中執(zhí)行run target。或者在命令行下,進入到此工程目錄下,執(zhí)行ant run,測試這個EJB。

          posted on 2006-07-04 09:28 liaojiyong 閱讀(367) 評論(0)  編輯  收藏 所屬分類: EJB

          主站蜘蛛池模板: 滕州市| 保亭| 万年县| 耿马| 璧山县| 清水县| 莱西市| 芮城县| 北辰区| 安康市| 东乡县| 枣强县| 资兴市| 万盛区| 安泽县| 康定县| 隆尧县| 南汇区| 醴陵市| 剑川县| 阿图什市| 阿巴嘎旗| 西林县| 平舆县| 新宁县| 浮梁县| 南陵县| 依兰县| 和林格尔县| 昭平县| 黑龙江省| 张家口市| 霍山县| 屏边| 甘谷县| 河南省| 江油市| 金华市| 开江县| 锦州市| 舒城县|