| |
在前面的所有的实体bean的例子中,我们所用的主键都是id,而且都是由容器自动生成的。 如: @id(generate = generatortype.auto) public int getid() { return id; } 事实上,主键可以是任意的java基本类型、或者是基本类型的包装类,如integer、string类型、或者是带字段或属性的主键类。注意,如果这样使用主键,你需要将主键的注释中的生成规则改为none。就是由程序生成主键值。 主键类必须实现hashcode和equals方法。 这个例子前面举例过,就是一个存储学生信息的实体bean,在那个例子中,使用name类作为属性,并且以id作为主键,在这个例子中,我们将使用name作为主键,注意name的类型一个java类。和前面的例子一样,我们还是使用client测试。 name.java:主键。 student.java:实体bean类。 studentdao.java:会话bean的业务接口 studentdaobean.java:会话bean的实现类 client.java:测试ejb的客户端类。 jndi.properties:jndi属性文件,提供访问jdni的基本配置属性。 build.xml:ant 配置文件,用以编译、发布、测试、清除ejb。 下面针对每个文件的内容做一个介绍。 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 ?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。
|
|