- 1. 课题: EJB3.0 实体Bean杨文艺
13807310406
QQ:670146554
- 2. 开发一个简单的EntityBean( 3.0)目标:
掌握 EntityBean3.0的编写
开始引入SLSB的编写,为下节内容打基础
掌握 JBOSS下EJB3 的部署。
编写调用SLSB的CLIENT,掌握JNDI的使用
- 3. 开发一个简单的EntityBean( 3.0)1.创建一个EJB项目:Ejb3Sample3 , 包结构:
com.xxx.entity.eb32.创建一个 EJB3的 Entity Bean : StudentEJB3
有两种方式:
方式 一:用MyEclipse的反向工程
方式二:手工编写
下面分别介绍
- 4. 开发一个简单的EntityBean(3.0)2.1 用MyEclipse的反向工程从database explorer 选择反向EJB3
- 5. 开发一个简单的EntityBean(3.0)2.1 用MyEclipse的反向工程输入Bean的全名,点完成
- 6. 开发一个简单的EntityBean(3.0)2.2 也可以手工编写New 对象,选择:EJB3 Entity Bean
- 7. 开发一个简单的EntityBean(3.0)2.2 也可以手工编写New 对象,选择:EJB3 Entity Bean
- 8. 开发一个简单的EntityBean(3.0)import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity //实体BEAN 元注解
@Table(name = “student”, schema = “public”) //映射表 元注解
public class StudentEJB3 implements java.io.Serializable {
// Fields
private Integer sno;
private String sname;
private String sex;
private Integer bno;
// Constructors
public StudentEJB3() {
}
public StudentEJB3(Integer sno, String sname, String sex, Integer bno) {
this.sno = sno;
this.sname = sname;
this.sex = sex;
this.bno = bno;
}2.3 代码分析
- 9. 开发一个简单的EntityBean(3.0)// Property accessors
@Id //主键 元注解
@Column(name = “sno”, unique = true, nullable = false) //字段 元注解
public Integer getSno() {
return this.sno;
}
public void setSno(Integer sno) {
this.sno = sno;
}
@Column(name = "sname", nullable = false, length = 8)
public String getSname() {
return this.sname;
}
public void setSname(String sname) {
this.sname = sname;
}
//省略其他get/set
2.3 代码分析
- 10. 开发一个简单的EntityBean(3.0)2.3 代码分析与EntityBean3.0有关的
元注解@Entity@Table@Column@Id@GeneratedValue元注解是Jdk5.0的新特性,能够被编译进字节码。 Jdk5.0的元注解有一整套规范,EntityBean只是用到了其中的JPA部分。
JPA是 sun公司推出的关于持久化的Java Api标准规范。使用JPA在Java环境中代码能很好的移植。在特定的(Java)项目中,我们推荐使用JPA元注解方式。JPA有很多替代方案,如使用XML配置的原生的Hibernate.
元注解是非侵入式的,是代码安全的,即:在不能支持EJB的运行环境中, EntityBean3.0可以作为普通的JavaBean(POJO)使用
- 11. 开发一个简单的EntityBean(3.0)2.4 编写测试该EB3,0的SLSB:EJS/EJC:JBOSSEntityBean3.0ClientJNDIEntityBean可以被Client直接访问(通过远程视图),但一般不这样做,而是通过SessionBean作为中介。如上图.DSDBSessionBean
- 12. 开发一个简单的EntityBean(3.0)2.4 编写测试该EB3,0的SLSB:2.4.1 定义SLSB业务接口 : StudentSlsbpublic interface StudentSlsb { //根据主键id查询数据单条 public String getById(int id ); //插入数据 public int insert (Integer sno,String sname,String sex,String bno); //更新表数据 public int update (Integer sno,String sname,String sex,String bno); //删除数据 public int delete (Integer sno); }
- 13. 开发一个简单的EntityBean(3.0)2.4 编写测试该EB3,0的SLSB:2.4.2 实现SLSB业务接口 : StudentSlsbImplimport javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.xxx.entity.eb3.StudentEJB3;
@Stateless
@Remote(StudentSlsb.class)
public class StudentSlsbImpl implements StudentSlsb {
/*
* 持久化实体管理器EntityManager通
* 过@PersistenceContext注释由EJB容器动态注入
*/
@PersistenceContext(unitName="STUDENT_PU")
EntityManager em;
//根据学号(主键)查找学生
public StudentEB getById(Integer sno) {
return stu = em.find(StudentEB.class, sno);
}
- 14. 开发一个简单的EntityBean(3.0)2.4 编写测试该EB3,0的SLSB:2.4.2 实现SLSB业务接口 : StudentSlsbImpl //根据班级查找学生
public List findByBno(Integer bno){
Query q =em.createQuery("from StudentEB as m where m.bno=:bno");
q.setParameter("bno", bno);
return q.getResultList();
}
//根据学号删除学生
public int delete(Integer sno) {
StudentEJB3 stu = getById(sno);
em.remove(stu);
return 0;
}
//生成一个新的学生
public int insert(Integer sno, String sname, String sex, Integer bno) {
StudentEJB3 stu =new StudentEJB3(sno, sname,sex, bno);
em.persist(stu);
return 0;
}
//根据学号修改学生信息
public int update(Integer sno, String sname, String sex, Integer bno) {
StudentEJB3 stu = getById(sno);
stu.setSname(sname);
stu.setSex(sex);
stu.setBno(bno);
em.merge(stu);
return 0;
}
- 15. 开发一个简单的EntityBean(3.0)2.5 部署:2.5.1 编写部署文件 src / META-INF / persistence.xml
java:/PostgresDS 数据库连接池的JNDI名字持久化单元名字2.5.2 部署项目到Jboss, 配置好数据源, 启动JBOSS
- 16. 开发一个简单的EntityBean(3.0)2.5 编写测试Client: 引入jbossall-client.jar Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", “jnp://localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
InitialContext ctx;
ctx = new InitialContext(props);
StudentEJB3 stu;
StudentSlsb stuSlsb;
stuSlsb = (StudentSlsb) ctx.lookup(" StudentSlsbImpl/remote");
stu = stuSlsb. getById(1);
// ……………