在前面的所有的实体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 ?c all,启动jboss。
http://localhost:8080/jmx-console/htmladaptor?action=inspect
闽公网安备 35060202000074号