利用 WebSphere Application Server V8 和 Rational Application Developer V8 开发 Java EE 6 应用程序3

                

 

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 所示。


图 10. 配置 JDBC connection 信息。

figure10_jpa_jdbc_deployment.jpg

点击确定后,RAD 会生成 Persistence.xml, 如清单 2 所示。


清单 2. Persistence.xml

                

 

<?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>

 

开发 EJB 3.1 Session Bean

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 所示。


清单 3. AccountService.java

                

 

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 所示。


图 12. 更新 Processor options

配置完成后,RAD 将会自动生成 com.ibm.Accountmanagement.Usertab_. java。如清单 4 所示。


清单 4. Usertab_.java

                

 

/**

* 由 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…

     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营