时间: 2021-07-31 作者:daque
在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 ejbjar,将编写翻译打包颁布此ejb。 在eclipse的ant视图中实行run target。大概在吩咐行下,加入到此工程目次下,实行ant run,尝试这个ejb。