利用 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…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營