Presentation is loading. Please wait.

Presentation is loading. Please wait.

S2.4 & S2EJB3Unit 中村( taedium ). Seasar 2.4 の特徴 1 Sesar 2.4 は EJB 3.0 を実 装しています。 EJB 3.0 の仕様は 5 月 12 日に Final Release されたばかりの新しい技 術です。

Similar presentations


Presentation on theme: "S2.4 & S2EJB3Unit 中村( taedium ). Seasar 2.4 の特徴 1 Sesar 2.4 は EJB 3.0 を実 装しています。 EJB 3.0 の仕様は 5 月 12 日に Final Release されたばかりの新しい技 術です。"— Presentation transcript:

1 S2.4 & S2EJB3Unit 中村( taedium )

2 Seasar 2.4 の特徴 1 Sesar 2.4 は EJB 3.0 を実 装しています。 EJB 3.0 の仕様は 5 月 12 日に Final Release されたばかりの新しい技 術です。

3 Seasar 2.4 の特徴 2 Sesar2.4 では EJB 3.0 に加え O/R マッピン グ機能の標準である Java Persistence API ( JPA )を使うこともできます。 Sesar2.4 で JPA を使うには Hibernate と連 携するための S2Hibernate-JPA を 利用します。

4 EJB 3.0 や JPA は使える技術? 以前の EJB に比べるとずいぶん使いやすく なっている。アノテーションを使った設 定がわかりやすい。 –EJB 3.0 : DI コンテナに慣れている人には問題 なく受け入れられるはず。 –JPA : Hibernate に慣れている人には問題なく 受け入れられるはず。 ただ …

5 問題点 1. EJB は サーバにデプロイ しないと動かせ ない。 2. EJB は 単体テストがしにくい 。 JPA の エンティティのデータを比較するテストが面倒。 3. EJB 3.0 はインターセプタの 機能が貧弱。 JPA は SQL を使いにくい 。

6 Seasar の対応 1 EJB はサーバにデプロイしないと動かせな い。 Seasar 2.4 は サーバにデプロイ しなくても EJB 3.0 のコンポーネン トを動かすことを可能にする。

7 Seasar の対応 2 EJB は単体テストがしにくい。 JPA のエン ティティのデータを比較するテストが面 倒。 Seasar 2.4 は JUnit を拡張した S2EJB3Unit を提供し、 EJB 3.0 や JPA を使ったプログラムの単体テストを簡 単する。

8 Seasar の対応 3 EJB 3.0 はインターセプタの機能が貧弱。 JPA は SQL が使いにくい。 Seasar 2.4 は EJB 3.0 の足りない機能を 補い拡張 できる。

9 ここで簡単にまとめ

10 Sesar2.4 では Java の標準技術である EJB 3.0 と Java Persistence API が 使える。 Sesar2.4 は さらに これらを より使いやすく する 。

11 Sesar 2.4 で EJB 3.0 を動かす @Stateless @EJB @Stateful @Local @TransactionManagement @TransactionAttribute @Interceptors @ExcludeClassInterceptors @PostConstruct @AroundInvoke

12 Sesar 2.4 で EJB 3.0 を動かす EJB 3.0 を使った開発の基 本は DI コンテナを使うと きと同じ。 インタフェースに対して プログラミングする。

13 Sesar 2.4 で EJB 3.0 を動かす public interface Greeting { String greet(); } public interface GreetingClient { void execute(); } 1. まず、インタフェースを 作成。

14 @Stateless public class GreetingImpl implements Greeting { public String greet() { return "Hello World!"; } @Stateless public class GreetingClientImpl implements GreetingClient { @EJB private Greeting greeting; public void execute() { System.out.println(greeting.greet()); } フィールドインジェクション Context ctx = new InitialContext(); GreetingClient greetingClient = (GreetingClient) ctx.lookup("greetingClient"); greetingClient.execute(); 2. 実装クラスに EJB 3.0 のアノテーションをつ ける。 3. DI するためにアノ テーションを付ける。 4.JNDI で lookup して 実行。

15 S2EJB3Unit とは JUnit の拡張版。 EJB に対するテストを行う。 JPA を使った DAO のテストを行う。 JPA のエンティティのテストを行う。

16 S2EJB3Unit の特徴 1 DI の指定 public class HogeTest extends S2EJB3TestCase { @EJB private GreetingClient greetingClient; @EJB(beanName=“xxx”) private GreetingClient greetingClient2; } @EJB で DI する。

17 S2EJB3Unit の特徴 2 DI されるコンポートの指定 public class HogeTest extends S2EJB3TestCase { @EJB private GreetingClient greetingClient; @Override public void setUp() throws Exception { super.setUp(); include("examples/ejb3/dicon/GreetingMain.dicon"); register(GreetingImpl.class); } DI されるコンポーネント は設定ファイルを使って まとめて、もしくはクラ スごとに登録できる。

18 S2EJB3Unit の特徴 3 ロールバックをアノテーションで指定 public class HogeTest extends S2EJB3TestCase { @Rollback public void testFindEmployee() { //…DB アクセス処理 } @Rollback で test メソッド開始前にトランザク ションを開始しメソッド終了後にトランザク ションをロールバックする。 →DB を汚さずに すむ。

19 S2EJB3Unit の特徴 4 EntityManager の取得 public class HogeTest extends S2EJB3TestCase { @Rollback public void testFindEmployee() { getEntityManager().find(Employee.class, new Long(1)); } Java Persistence API の EntityManager が getter で取 得するだけで使える。

20 S2EJB3Unit の特徴 5 準備値( Excel データ) 、期待値( Excel データ)、実際値(エンティ ティ) public class GreetingClientImplTest extends S2EJB3TestCase { @Rollback public void testFindEmployee() { readXlsWriteDb("Prepare.xls"); DataSet expected = readXls("findEmployeeResult.xls"); Employee actual = getEntityManager().find(Employee.class, new Long(1)); assertEntityEquals("0", expected, actual); } テストデータは Excel で用 意して DB に書き込む。 テストの期待値は Excel で 用意する。 期待値と Entity のデータを 比較するアサートメソッ ド。

21 S2EJB3Unit の特徴 6 更新の検証 public class GreetingClientImplTest extends S2EJB3TestCase { @Rollback public void testUpdateEmployee() { readXlsWriteDb("Prepare.xls"); DataSet expected = readXls("updateEmployeeResult.xls"); Employee employee = getEntityManager().find(Employee.class, new Long(2)); employee.setSalary(9999); assertEquals("0", expected, reload(expected)); } EmployeeEntity を更新。 DataSet 同士を比較する。 DB を更新し期待値のデータ を読み直す。

22 S2EJB3Unit を動かしてみる 実際に S2EJB3Unit を動かして見ます。

23 テーブルとエンティティのマッピ ング Employee エンティティ Department エンティティ Address エンティティ 0.. 11 1 0..*

24 テーブルとエンティティの比較 1 エンティティ単体 (もしくリスト)を DB データと比較する ターゲットとなるエン ティティの値のみを比較 する。

25 テーブルとエンティティの比較 2 エンティティ単体 (もしくはリスト) のリレーションシッ プを含めて DB データ と比較する ターゲットとなるエ ンティティから辿れ るリレーションも比 較対象とする。

26 テーブルとエンティティの比較 3 Java 上で参照があれ ば逆向きにも辿るこ とができる。遅延 ローディングにも対 応。 クエリで Department を取 得した場合、 Employee は 遅延ローディングされる が Employee も比較可能。

27 複雑なマッピングにも対応 ポリモーフィズ ムを使ったマッ ピングに対して もデータの比較 が可能。 0.. 11 1 0..* 11 0.. 1

28 エンティティの更新 エンティティ単体 (もしくリスト)を DB データと比較する ターゲットとなるエン ティティの値のみを比較 する。


Download ppt "S2.4 & S2EJB3Unit 中村( taedium ). Seasar 2.4 の特徴 1 Sesar 2.4 は EJB 3.0 を実 装しています。 EJB 3.0 の仕様は 5 月 12 日に Final Release されたばかりの新しい技 術です。"

Similar presentations


Ads by Google