posts - 4,  comments - 9,  trackbacks - 0
          在EJB3.0中,實體Bean可以實現繼承關系。 比如有個Person的實體bean,它有姓名和性別兩個屬性。
            
            上帝和女媧造人的時候,造出兩種人:Man和Woman。Man和Woman都是實體Bean,而且他們都繼承Person。
            
            單一表策略就是副實體和子實體的數據都存放在一張表中,同時指定一列用來區別這些實體。
            
            如:
            
            @Entity
            @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING)
            @DiscriminatorColumn(name = "P_TYPE", nullable = true)
            @ Inheritance的注釋聲明如下:
            @ @Target({TYPE}) @Retention(RUNTIME)
            
            public @interface Inheritance {
            InheritanceType strategy() default SINGLE_TABLE;
            DiscriminatorType discriminatorType() default STRING;
            String discriminatorValue() default "";
            }
            
            這個注釋用來指定繼承使用的策略,以及為了區別這些實體所用的列的類型與值。
            
            @DiscriminatorColumn注釋用在單一表策略和聯合表策略上。用來指定區別各實體所需的列。
            @Target({TYPE}) @Retention(RUNTIME)
            
            public @interface DiscriminatorColumn {
            String name() default "";
            boolean nullable() default false;
            String columnDefinition() default "";
            int length() default 10;
            }
            
            這個例子主要有以下幾個文件,這個例子主要實現了Person和Man、Woman之間的繼承關系,
          下面兩章介紹的例子和這個例子相同。Man和Woman繼承Person實體Bean。前面的例子一樣,
          我們還是使用Client測試。
            
            Person.java:實體Bean。
            
            Man.java:實體Bean所依賴的類。
            
            Woman.java:實體Bean所依賴的類。
            
            PersonTest.java:會話Bean的業務接口
            
            PersonTestBean.java:會話Bean的實現類
            
            Client.java:測試EJB的客戶端類。
            
            jndi.properties:jndi屬性文件,提供訪問jdni的基本配置屬性。
            
            Build.xml:ant 配置文件,用以編譯、發布、測試、清除EJB。
            
            下面針對每個文件的內容做一個介紹。
            
            Person.java
            
            package com.kuaff.ejb3.singleinheritance;
            
            import javax.ejb.DiscriminatorColumn;
            import javax.ejb.DiscriminatorType;
            import javax.ejb.Entity;
            import javax.ejb.GeneratorType;
            import javax.ejb.Id;
            import javax.ejb.Inheritance;
            import javax.ejb.InheritanceType;
            
            @Entity
            @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING)
            @DiscriminatorColumn(name = "P_TYPE", nullable = true)
            public class Person implements java.io.Serializable
            {
            private int id;
            private String name;
            private String gender;
            
            @Id(generate = GeneratorType.AUTO)
            
            public int getId()
            {
            return id;
            }
            
            public void setId(int id)
            {
            this.id = id;
            }
            
            public String getName()
            {
            return name;
            }
            
            public void setName(String name)
            {
            this.name = name;
            }
            
            public void setGender(String gender)
            {
            this.gender = gender;
            }
            
            public String getGender()
            {
            return gender;
            }
            
            }
            
            指定使用P_TYPE列用來區別各實體Bean。
            
            Man.java
            
            package com.kuaff.ejb3.singleinheritance;
            
            import javax.ejb.DiscriminatorType;
            import javax.ejb.Entity;
            import javax.ejb.Inheritance;
            import javax.ejb.InheritanceType;
            
            @Entity
            @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING, discriminatorValue = "Man")
            
            public class Man extends Person
            {
            private boolean isGood;
            public void setGood(boolean isGood)
            {
            this.isGood = isGood;
            }
            
            public boolean isGood()
            {
            return isGood;
            }
            }
            
            這個實體Bean增加了一個是否是好男人的屬性。
            
            Woman.java
            
            package com.kuaff.ejb3.singleinheritance;
            
            import javax.ejb.DiscriminatorType;
            import javax.ejb.Entity;
            import javax.ejb.Inheritance;
            import javax.ejb.InheritanceType;
            
            @Entity
            @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING, discriminatorValue = "Woman")
            
            public class Woman extends Person
            {
            private boolean isbeautiful;
            
            public void setIsbeautiful(boolean isbeautiful)
            {
            this.isbeautiful = isbeautiful;
            }
            
            public boolean isIsbeautiful()
            {
            return isbeautiful;
            }
            
            }
            
            EntityTest.java
            
            package com.kuaff.ejb3.singleinheritance;
            
            import javax.ejb.Remote;
            import java.util.List;
            
            @Remote
            
            public interface PersonDAO
            {
            public int createMan(String name,String gender,boolean b);
            public int createWoman(String name,String gender,boolean b);
            public Person find(int i);
            public List findByName(String name);
            public List findByInfo(String gender);
            }
            
            PersonTestBean.java
            
            package com.kuaff.ejb3.singleinheritance;
            
            import javax.ejb.EntityManager;
            import javax.ejb.Inject;
            import javax.ejb.Stateless;
            import java.util.List;
            
            @Stateless
            
            public class PersonDAOBean implements PersonDAO
            {
            @Inject
            private EntityManager manager;
            
            public int createMan(String name,String gender,boolean b)
            {
            Man man = new Man();
            man.setName(name);
            man.setGender(gender);
            man.setGood(b);
            manager.create(man);
            return man.getId();
            }
            
            public int createWoman(String name, String gender,boolean b)
            {
            Woman woman = new Woman();
            woman.setName(name);
            woman.setGender(gender);
            woman.setIsbeautiful(b);
            manager.create(woman);
            return woman.getId();
            }
            
            public Person find(int i)
            {
            return manager.find(Person.class,i);
            }
            
            public List findByName(String name)
            {
            return manager.createQuery("from Person p where p.name =:name").setParameter("name", name).listResults();
            }
            
            public List findByInfo(String gender)
            {
            return manager.createQuery("from Person p where p.gender =:gender").setParameter("gender", gender).listResults();
            }
            
            }
            
            在這個會話Bean中提供了創建Man、Woman實體Bean的方法,并提供了查找方法。
            
            Client.java
            
            package com.kuaff.ejb3.singleinheritance;
            
            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();
            PersonDAO dao = (PersonDAO) ctx.lookup(PersonDAO.class.getName());
            int i = dao.createMan("晁岳攀","男",true);
            dao.createWoman("朱立煥","女",true);
            Person p = dao.find(i);
            System.out.printf("%s的性別:%s%n",p.getName(),p.getGender());
            List list = dao.findByName("朱立煥");
            
            for (Object o:list)
            {
            Woman w = (Woman)o;
            System.out.printf("%s漂亮嗎?結論:%b%n",w.getName(),w.isIsbeautiful());
            }
            }
            
            }
            
            這個客戶端用來測試。
            
            請運行{$JBOSS_HOME}/bin目錄下的run.bat: run –c all,啟動JBOSS。
            
            http://localhost:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss%3Aservice%3DHypersonic%2Cdatabase%3DlocalDB,
          然后調用startDatabaseManager()方法,打開HSQL管理工具管理數據庫。
            
            在Eclipse的Ant視圖中執行ejbjar target。或者在命令行下,進入到此工程目錄下,執行ant
          posted on 2006-12-07 00:24 凌宇 閱讀(312) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(3)

          隨筆檔案(3)

          文章檔案(14)

          相冊

          收藏夾

          Java

          最新隨筆

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 浮梁县| 吉首市| 屯门区| 普安县| 隆德县| 北流市| 古丈县| 策勒县| 万州区| 全椒县| 吉水县| 遵义市| 肥乡县| 新野县| 潜江市| 西宁市| 上蔡县| 通州区| 永昌县| 城市| 边坝县| 古蔺县| 南平市| 阜南县| 虎林市| 大港区| 龙川县| 上栗县| 陕西省| 尉氏县| 疏勒县| 淮北市| 海原县| 永和县| 应城市| 玛多县| 五大连池市| 沛县| 如皋市| 信阳市| 夏邑县|