1 / 30

Entity Bean 概要

Entity Bean 概要. EJB 3.0 コース 第 7 回. ここでの目標. Entity Bean の基本事項について理解する. Entity Bean とは?. Entity Bean とは?. 「永続化」されているデータとの対応に用いるもの O/R マッピング リレーショナルデータベースの1行と、 Entity Bean の一つのインスタンスが対応する リレーショナルデータベースと Entity Bean の間で同期が行われる. 実習環境の構築. HSQLDB の利用設定 (1).

livia
Download Presentation

Entity Bean 概要

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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ディレクトリにある hsqldb.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/application.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.Serializable { …… }

  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. インタフェースの準備 @Remote public interface EmployeeFacade { // 従業員の情報をデータベースに追加 void addEmployee( int empNo, String name, double salary); // 主キーから対応する従業員のデータを取得 Employee findEmployeeByEmpNo(int empNo); }

  22. Stateless Session Bean を用意 (1) import javax.persistence.EntityManager; @Stateless public 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",empNo)); } • 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(empNo);

  28. 課題

  29. 課題 (1) • 次のテーブルのデータをアクセスする Entity Bean を作成してください。 create table account ( id DECIMAL(4) primary key, name VARCHAR(10), account DECIMAL(10,2) );

  30. 課題 (2) • (1)の Entity Bean を用いて、次の機能を持つ Session Façade を作成してください。 • データの登録 • 主キーによるデータの検索

More Related