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…