• 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); // ……………