Upload
livia
View
114
Download
0
Embed Size (px)
DESCRIPTION
Entity Bean 概要. EJB 3.0 コース 第 7 回. ここでの目標. Entity Bean の基本事項について理解する. Entity Bean とは?. Entity Bean とは?. 「永続化」されているデータとの対応に用いるもの O/R マッピング リレーショナルデータベースの1行と、 Entity Bean の一つのインスタンスが対応する リレーショナルデータベースと Entity Bean の間で同期が行われる. 実習環境の構築. HSQLDB の利用設定 (1). - PowerPoint PPT Presentation
Citation preview
1
Entity Bean 概要EJB 3.0 コース
第 7 回
2
ここでの目標 Entity Bean の基本事項について理解す
る
3
Entity Bean とは?
4
Entity Bean とは? 「永続化」されているデータとの対応に
用いるもの O/R マッピング リレーショナルデータベースの1行と、
Entity Bean の一つのインスタンスが対応する
リレーショナルデータベースと Entity Bean の間で同期が行われる
5
実習環境の構築
6
HSQLDB の利用設定 (1) 本講習では、リレーショナルデータベー
スとして HSQLDB を用います。 HSQLDB をダウンロード HSQLDB の lib ディレクトリにある hsqld
b.jar を %ORACLE_HOME%/j2ee/home/applib にコピー
7
HSQLDB の利用設定 (2) %ORACLE_HOME%/j2ee/home/config/data-sources.
xml に HSQLDB の情報を追加
<connection-pool name="HSQLDB Connection Pool"> <connection-factory factory-class="org.hsqldb.jdbcDriver" user="sa” password="" url="jdbc:hsqldb:hsql://localhost/"> </connection-factory> </connection-pool>
<managed-data-source name="HSQLDB Data Source" connection-pool-name="HSQLDB Connection Pool" jndi-name="jdbc/HsqldbDS"/>
8
HSQLDB の利用設定 (3) %ORACLE_HOME%/j2ee/home/config/applicatio
n.xml を編集 デフォルトのデータソースを指定<orion-application xmlns:xsi="http://www.w3.org/
2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-application-10_0.xsd"
autocreate-tables="true" default-data-source="jdbc/HsqldbDS"
9
アプリケーションサーバを起動 ( あるいは再起動 ) します。
10
テーブルの作成 (1) HSQL Database Manager を起動して、
テーブルを作成します。 howtoejb30entity の scripts フォルダに
ある table.sql を編集
11
テーブルの作成 (2)
create table emp (empno DECIMAL(4) primary key,ENAME VARCHAR(10),SAL DECIMAL(10,2)
);
12
アプリケーションのデプロイと実行 ant コマンドでコンパイルとデプロイを実行 クライアントプログラムの実行には、次のよう
に、適当なデータを設定してください。
ant run -Dempno=10 -Dname=tomoharu-Dsal=10000
データが HSQLDB に反映されたかどうか確かめます。 select * from emp;
13
Entity Bean の作成
14
Employee.java (1)// Entity Bean である@Entity// EMP テーブルと関連づけられる@Table(name = "EMP")public class Employee implements java.io.Serializ
able {……
}
15
Employee.java (2)
// empNo プロパティは Entity Bean の ID である。 @Id // empNo プロパティは、テーブル中の // EMPNO 項目とマッピングしている。 // また、主キーである。 @Column(name="EMPNO", primaryKey=true) public int getEmpNo() {return empNo; } ......
16
Employee.java (3)// テーブル中の各項目に対応する// setter と getter (= プロパティ ) を用意// プロパティとテーブル中の項目名が同一の場合は// アノテーションをつける必要はないpublic void setEmpNo(int empNo) {...}public String getEname() {...}public void setEname(String eName) {...}public double getSal() {...}public void setSal(double sal) {...}
17
インピーダンス・ミスマッチと Annotation(1) リレーショナルデータベースのテーブル
中の情報は、 Annotation に記述されている。 テーブル名、主キー、項目名、一対多の関係
など 旧来の EJB では、こうした情報は DD
ファイルに記述されていた。
18
インピーダンス・ミスマッチと Annotation(2)
Java プログラムの持つ情報 <テーブルの情報
Java プログラムの持つ情報+ Annotation の情報 =
テーブルの情報
インピーダンス・ミスマッチ
インピーダンス・ミスマッチの解消
19
Session Façade とEntity Manager
20
Session Facade
クライアントが Entity Bean を直接操作するのではなく、 Stateless Session Bean からアクセスできるようにする。
データベースに関連するさまざまな処理を隠蔽する
これが「 Session Façade パターン」
21
インタフェースの準備@Remotepublic interface EmployeeFacade {
// 従業員の情報をデータベースに追加 void addEmployee(
int empNo, String name, double salary);// 主キーから対応する従業員のデータを取得
Employee findEmployeeByEmpNo(int empNo);}
22
Stateless Session Bean を用意 (1)
import javax.persistence.EntityManager;@Statelesspublic class EmployeeFacadeBean
implements EmployeeFacade { @Inject private EntityManager em; public Employee findEmployeeByEmpNo(int empNo) {...} public void addEmployee(int empNo, String n, double sal)
{...}}
23
EntityManager と @Inject@Inject private EntityManager em;
EntityManager は、データの永続管理を受け持つオブジェクト。データベースと接続して、さまざまな処理を行う。
@Inject は、 Dependency Injection ( 依存性注入 ) を行うためのアノテーション。 EntityManager は、コンテナによって依存性注入される。
24
EntityManager#find public Employee findEmployeeByEmpNo(int empNo) { return ((Employee) em.find("Employee",em
pNo)); }
EntityManager の find メソッドは、データベースからempNo という主キーで指定したデータを検索し、検索結果として Employee オブジェクトを返す。
25
EntityManager#persist public void addEmployee(int empNo, String eName, double sal) { if (emp == null) emp = new Employee(); emp.setEmpNo(empNo); emp.setEname(eName); emp.setSal(sal); em.persist(emp); }
EntityManager の persist メソッドで、 Entity Bean を永続化している。つまり、データをデータベースで管理するようにしている。
26
クライアントのプログラム
27
クライアントプログラム// JNDI から Session Facade を取得Context context = new InitialContext();EmployeeFacade ef = (EmployeeFacade) context
.lookup("java:comp/env/ejb/EmployeeFacade");
// Entity Manager を使ってデータの操作ef.addEmployee(empNo, name, sal);Employee emp2 = ef.findEmployeeByEmpNo(empN
o);
28
課題
29
課題 (1) 次のテーブルのデータをアクセスする E
ntity Bean を作成してください。
create table account (id DECIMAL(4) primary key,name VARCHAR(10),account DECIMAL(10,2)
);
30
課題 (2) (1) の Entity Bean を用いて、次の機能を
持つ Session Façade を作成してください。 データの登録 主キーによるデータの検索