package com.ibm.Accountmanagement;
import java.io.Serializable; import javax.persistence.*;
/** * The persistent class for the USERTAB database table. * */ @Entity
@Table(name=”Usertab”) public class Usertab implements Serializable { private static final long serialVersionUID = 1L;
@Id private long userid; private String username; private String password; private String email; private short age; private String gender; …. } |
再次右键点击 EJB 项目 AccountManagementEJB,选择 JPA tool, 选择 Configure Project for JDBC Deployment” , 输入数据源名称 jdbc/social。如图 10 所示。
figure10_jpa_jdbc_deployment.jpg
点击确定后,RAD 会生成 Persistence.xml, 如清单 2 所示。
<?xml version=”1.0″ encoding=”UTF-8″?> <persistence version=”2.0″ xmlns=”http://java.sun.com/xml/ns/persistence” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd”> <persistence-unit name=”AccountManagementEJB”> <jta-data-source>jdbc/social</jta-data-source> <class>com.ibm.Accountmanagement.Usertab</class> <properties> <property name=”openjpa.jdbc.Schema” value=”DB2INST1″/> </properties> </persistence-unit> </persistence> |
JPA 持久性单元创建完成后,我们可以着手 Account Login 程序的业务逻辑部分了。在这个章节中,我们会创建 EJB session bean, 并利用 JPA 2.0 Criteria API 的新特性完成对数据的访问。
借助 EJB 3.1 的 No-interface view 的新特性,我们可以很容易的将一个 POJO 程序转化为 EJB session bean。例如,利用 @Stateless 的注释可以声明了一个无状态会话 bean;利用 @Stateful 注释,可以声明一个有状态会话 bean。No-interface Local view 使开发人员摆脱了繁琐的 Local、Remote 接口声明、继承工作。新建 com.ibm.Accountmanagement.AccountService class, 并将其转化为无状态会话 Bean, 如清单 3 所示。
package com.ibm.Accountmanagement;
import javax.ejb.Stateless; import javax.persistence.EntityManager; …..
@Stateless public class AccountService {
@PersistenceContext(unitName = “AccountManagementEJB”) EntityManager em; ….. } |
借助 @PersistenceContext 注释,可以将 JPA 实体管理器注入到 EJB 中。请确保参数 unitName 与 Persistence.xml 中定义的 <Persistent-unit name> 一致。
Tips: 当您在开发中频繁使用各类注释时,您可以利用 RAD 菜单 Source -> Organize Imports 解决当前所有的 import 的问题。
在 AccountService 中,我们需要完成的功能是,如何将用户输入的用户名、密码信息与数据库记录进行比对,如果相符,则返回一个 Usertab 对象,用于列出用户详细信息;如果不相符或遇到其他问题,则报错。很明显,这个功能需要实现数据库查询工作。
JPA 2.0 中引入了 Criteria API 的查询方式 , 使用 Criteria API 可以防止开发人员构造 @NamedQueries 时出现语法错误的情形。详情参考”JPA 2.0 中的动态类型安全查询“一文。
在利用 Criteria API 进行数据库查询前,我们需要先配置 JPA Static Metamodel。对于任意一个 JPA Entity, 我们不需要手工生成对应的 Static Metamodel, RAD 中的工具可以帮您自动完成这些工作,只要您的 Entity 定义没有变化,Static metamodel 也不需要更新。
下面几个配置步骤,用于在 RAD 中生成 Static Metamodel。
在您的 WAS 服务器 <WAS_server_root>/runtimes 目录下,找到 com.ibm.ws.jpa.thinclient_8.0.0.jar,将其放置到 RAD 可以访问的文件路径下;
在 RAD 中,查看 AccountManagementEJB 项目的属性(右键点击项目名称 -> Properties ), 访问属性 Java Compiler -> Annotation Processing -> Factory Path,加入 com.ibm.ws.jpa.thinclient_8.0.0.jar。如图 11 所示。
图 11. 更新 Annotation Factory 信息。
在 RAD 中,查看 AccountManagementEJB 项目的属性(右键点击项目名称 -> Properties ), 访问属性 Java Compiler -> Annotation Processing,加入新的 Processor options: openjpa.metamodel=true,并设置 Source directory 为 ejbModule。如图 12 所示。
配置完成后,RAD 将会自动生成 com.ibm.Accountmanagement.Usertab_. java。如清单 4 所示。
/** * 由 OpenJPA 元模型生成器工具生成。 **/
package com.ibm.Accountmanagement;
import javax.persistence.metamodel.ListAttribute; import javax.persistence.metamodel.SingularAttribute;
@javax.persistence.metamodel.StaticMetamodel (value=com.ibm.Accountmanagement.Usertab.class) @javax.annotation.Generated (value=”org.apache.openjpa.persistence.meta.AnnotationProcessor6″, date=”Mon Aug 08 17:17:56 CST 2011″) public class Usertab_ { public static volatile SingularAttribute<Usertab,Short> age; public static volatile SingularAttribute<Usertab,String> email; public static volatile SingularAttribute<Usertab,String> gender; public static volatile SingularAttribute<Usertab,String> password; public static volatile SingularAttribute<Usertab,Long> userid; public static volatile SingularAttribute<Usertab,String> username; } |
以下文章点击率最高
Loading…