在ejb3.0中,实体bean可以实现继承关系。 比如有个person的实体bean,它有姓名和性别两个属性。
上帝和女娲造人的时候,造出两种人:man和woman。man和woman都是实体bean,而且他们都继承person。
单一表策略就是副实体和子实体的数据都存放在一张表中,同时指定一列用来区别这些实体。
如:
这个注释用来指定继承使用的策略,以及为了区别这些实体所用的列的类型与值。
这个例子主要有以下几个文件,这个例子主要实现了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
指定使用p_type列用来区别各实体bean。
man.java
这个实体bean增加了一个是否是好男人的属性。
woman.java
entitytest.java
persontestbean.java
在这个会话bean中提供了创建man、woman实体bean的方法,并提供了查找方法。
client.java
这个客户端用来测试。
请运行{$jboss_home}/bin目录下的run.bat: run ?cc 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。
上帝和女娲造人的时候,造出两种人: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 ?cc 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。
闽公网安备 35060202000074号