30
1 Entity Bean 概概 EJB 3.0 概概概 概7概

Entity Bean 概要

  • 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

Page 1: Entity Bean  概要

1

Entity Bean 概要EJB 3.0 コース

第 7 回

Page 2: Entity Bean  概要

2

ここでの目標 Entity Bean の基本事項について理解す

Page 3: Entity Bean  概要

3

Entity Bean とは?

Page 4: Entity Bean  概要

4

Entity Bean とは? 「永続化」されているデータとの対応に

用いるもの O/R マッピング リレーショナルデータベースの1行と、

Entity Bean の一つのインスタンスが対応する

リレーショナルデータベースと Entity Bean の間で同期が行われる

Page 5: Entity Bean  概要

5

実習環境の構築

Page 6: Entity Bean  概要

6

HSQLDB の利用設定 (1) 本講習では、リレーショナルデータベー

スとして HSQLDB を用います。 HSQLDB をダウンロード HSQLDB の lib ディレクトリにある hsqld

b.jar を %ORACLE_HOME%/j2ee/home/applib にコピー

Page 7: Entity Bean  概要

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"/>

Page 8: Entity Bean  概要

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"

Page 9: Entity Bean  概要

9

アプリケーションサーバを起動 ( あるいは再起動 ) します。

Page 10: Entity Bean  概要

10

テーブルの作成 (1) HSQL Database Manager を起動して、

テーブルを作成します。 howtoejb30entity の scripts フォルダに

ある table.sql を編集

Page 11: Entity Bean  概要

11

テーブルの作成 (2)

create table emp (empno DECIMAL(4) primary key,ENAME VARCHAR(10),SAL DECIMAL(10,2)

);

Page 12: Entity Bean  概要

12

アプリケーションのデプロイと実行 ant コマンドでコンパイルとデプロイを実行 クライアントプログラムの実行には、次のよう

に、適当なデータを設定してください。

ant run -Dempno=10 -Dname=tomoharu-Dsal=10000

データが HSQLDB に反映されたかどうか確かめます。 select * from emp;

Page 13: Entity Bean  概要

13

Entity Bean の作成

Page 14: Entity Bean  概要

14

Employee.java (1)// Entity Bean である@Entity// EMP テーブルと関連づけられる@Table(name = "EMP")public class Employee implements java.io.Serializ

able {……

}

Page 15: Entity Bean  概要

15

Employee.java (2)

// empNo プロパティは Entity Bean の ID である。 @Id // empNo プロパティは、テーブル中の // EMPNO 項目とマッピングしている。 // また、主キーである。 @Column(name="EMPNO", primaryKey=true) public int getEmpNo() {return empNo; } ......

Page 16: Entity Bean  概要

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) {...}

Page 17: Entity Bean  概要

17

インピーダンス・ミスマッチと Annotation(1) リレーショナルデータベースのテーブル

中の情報は、 Annotation に記述されている。 テーブル名、主キー、項目名、一対多の関係

など 旧来の EJB では、こうした情報は DD

ファイルに記述されていた。

Page 18: Entity Bean  概要

18

インピーダンス・ミスマッチと Annotation(2)

Java プログラムの持つ情報 <テーブルの情報

Java プログラムの持つ情報+ Annotation の情報 =

テーブルの情報

インピーダンス・ミスマッチ

インピーダンス・ミスマッチの解消

Page 19: Entity Bean  概要

19

Session Façade とEntity Manager

Page 20: Entity Bean  概要

20

Session Facade

クライアントが Entity Bean を直接操作するのではなく、 Stateless Session Bean からアクセスできるようにする。

データベースに関連するさまざまな処理を隠蔽する

これが「 Session Façade パターン」

Page 21: Entity Bean  概要

21

インタフェースの準備@Remotepublic interface EmployeeFacade {

// 従業員の情報をデータベースに追加 void addEmployee(

int empNo, String name, double salary);// 主キーから対応する従業員のデータを取得

Employee findEmployeeByEmpNo(int empNo);}

Page 22: Entity Bean  概要

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)

{...}}

Page 23: Entity Bean  概要

23

EntityManager と @Inject@Inject private EntityManager em;

EntityManager は、データの永続管理を受け持つオブジェクト。データベースと接続して、さまざまな処理を行う。

@Inject は、 Dependency Injection ( 依存性注入 ) を行うためのアノテーション。 EntityManager は、コンテナによって依存性注入される。

Page 24: Entity Bean  概要

24

EntityManager#find public Employee findEmployeeByEmpNo(int empNo) { return ((Employee) em.find("Employee",em

pNo)); }

EntityManager の find メソッドは、データベースからempNo という主キーで指定したデータを検索し、検索結果として Employee オブジェクトを返す。

Page 25: Entity Bean  概要

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 を永続化している。つまり、データをデータベースで管理するようにしている。

Page 26: Entity Bean  概要

26

クライアントのプログラム

Page 27: Entity Bean  概要

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);

Page 28: Entity Bean  概要

28

課題

Page 29: Entity Bean  概要

29

課題 (1) 次のテーブルのデータをアクセスする E

ntity Bean を作成してください。

create table account (id DECIMAL(4) primary key,name VARCHAR(10),account DECIMAL(10,2)

);

Page 30: Entity Bean  概要

30

課題 (2) (1) の Entity Bean を用いて、次の機能を

持つ Session Façade を作成してください。 データの登録 主キーによるデータの検索