71
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 1 Yoshio Terada Java Evangelist http://yoshio3.com , Twitter : @yoshioterada Java EE 6 かか Java EE 7 かかかかか H-1

Java EE 6 to Java EE 7

Embed Size (px)

Citation preview

Page 1: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.1

Yoshio TeradaJava Evangelist

http://yoshio3.com,

Twitter : @yoshioterada

Java EE 6 からJava EE 7 に向かって

【 H-1】

Page 2: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.2

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

Oracle は、米国オラクルコーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Page 3: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.3

はじめに

Page 4: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.4

2009 年 12 月 9 日

Java EE 6 リリース

Page 5: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5

1998 年 5 月

エンタープライズアプリケーション

1999 年 12 月10 specs

堅牢スケーラブル

2001 年 9 月13 specs

Web サービス

2003 年 11 月20 specs

かんたん開発

2006 年 5 月23 specs

軽量化

2009 年 12 月28 specs

Project JPE

J2EE 1.3

CMP,ConnectorArchitecture

Java EE 5

Ease of Development,Annotations,EJB 3.0, JPA, JSF, UpdatedWeb Services

J2EE 1.4Web Services Mgmt, Deployment,AsyncConnector

Java EE 6

Pruning,ExtensibilityEase of Dev,CDI, JAX-RS

Web Profile

Servlet 3.0, EJB 3.1 Lite

J2EE 1.2Servlet, JSP,EJB, JMSRMI/IIOP

Java EE の歴史

Page 6: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.6

Connector1.6

JPA 2.1 JTA 1.2 JMS

Managed Bean 1.0 EJB 3.1

Common Annotations

1.1

Interceptors 1.1

CDI 1.0

PortableExtensio

ns Servlet 3.1

JSPJSF 2.0

JAX-RS ELB

ean

Valid

atio

n

Java EE 6 に含まれる技術

Page 7: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.7

2010 年 1 月 27 日

Page 8: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.8

Page 9: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.9

拡張性プロファイル仕様の削減かんたん開発

Java EE 6 のテーマ

開発生産性の大幅向上

Page 10: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.10

web.xml<web-app> フレームワーク A フレームワーク B フレームワーク C フレームワーク D</web-app>

外部フレームワークの設定が容易

フレームワーク A<web-fragment> ….</web-fragment>

フレームワーク B<web-fragment> ….</web-fragment>

web.xml<web-app> <absolute-ordering> <name>B</name> <name>A</name> <absolute-ordering> </web-app>

拡張性

Page 11: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.11

プロファイル

Full Java EE 6 (Enterprise Platform)

Web Profile

Java EE のサブセットを提供Web 開発に特化 & 軽量

Page 12: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.12

Pruning ( 枝きり、剪定 ) → 仕様の削減

古く使われなくなって仕様の整理

次期バージョンで削除JAX-RPCEJB Entity BeanJAX-Rなど

→   JAX-WS→   JPA

Page 13: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.13

Java EE 対応統合開発環境

Page 14: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.14

開発効率が悪いテストも大変

J2EE の全技術は不要複雑なパッケージング

XML 設定地獄実行環境も重量

Page 15: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.15

JSF 2.0 : コンポーネント・ベース開発

Page 16: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.16

Web ページ作成者( デザイナー )

アプリケーション開発者

コンポーネント開発者

DB

BackEnd処理

JSF 2.0 : 役割に応じて疎で開発が可能

Page 17: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.17

EJB 3.1

• パッケージの簡略化• EJB 3.1 “Lite” の提供• ローカルビジネスインタフェースのオプション化• 標準化された Global JNDI 名• Java SE に組み込み可能な EJB コンテナ• その他の新機能

Page 18: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.18

JPA 2.0

• パッケージの簡略化 JPA 2.0 = JPA 1.0 + α• モデリングの強化• JPQL 新しい構文の追加• Criteria API の提供• メタモデル API の提供• 悲観的ロックの追加• バリデーションのサポート• 設定オプションの標準化

Page 19: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.19

テストも大変 開発効率が悪い

J2EE の全技術は不要複雑なパッケージング

XML 設定地獄実行環境も重量

Page 20: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.20

Java EE

Application Server

Web Container

EJB テストリモート・ lookup

JSP Servlet JSF

EJB Container

EJB EJB EJBDB

Java SE

EJB 3.0 までの単体テストは困難

アプリケーション・サーバへのデプロイが必要

Page 21: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.21

EJBテスト

EJB Container

EJB EJB EJB

Java SE

DB

EJB 3.1 組み込み可能コンテナ

アプリケーション・サーバへのデプロイは不要

EJBContainer container = EJBContainer.createEJBContainer();

Java SE のアプリケーションから EJB コンテナを起動

Page 22: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.22

組み込み可能コンテナを利用したテスト

public void testSayHello() { EJBContainer container = EJBContainer.createEJBContainer(); try{ Hello hello = (Hello)container.getContext().lookup ("java:global/classes/Hello"); System.out.println(hello.sayHello()); }catch(Exception e){ e.printStackTrace(); }}

Page 23: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.23

J2EE の全技術は不要

開発効率が悪いテストも大変

複雑なパッケージング XML 設定地獄

実行環境も重量

Page 24: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.24

Java EE 5 まではフル・スペックを提供

Java EE 5 Specification

JSP Servlet JSF EJB JMS

JTA Java Mail JAXP JAX-WSJPA

JAXB JAXR JDBC JAAS

JNDI

・・・

頻繁に使用しない機能もフル・セットで提供  不要モジュールもロードしメモリ消費  実行環境の起動、再起動も遅い

Page 25: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.25

Java EE 6 : プロファイル

Full Java EE 6 (Enterprise Platform)

Web Profile

全機能のサブセット版を提供   Web の開発に特化 ( これさえあれば Web 開発は十分 )  軽量

Page 26: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.26

Web プロファイルに含まれる仕様

Servlet 3.0 JPA 2.0

JSP 2.2/EL JTA 1.1

JSTL DI 1.0/CDI 1.0

JSF 2.0 Managed Bean 1.0

Bean Validation 1.0 Interceptors 1.1

EJB 3.1 Lite Common Annotations

Java EE 6 Web Profile

これさえあれば Web 開発は十分

Page 27: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.27

複雑なパッケージング

開発効率が悪いテストも大変

J2EE の全技術は不要

XML 設定地獄実行環境も重量

Page 28: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.28

WEB-INF/web.xml

WEB-INF/resources

WEB-INF/classes/FooServlet.class

com/oracle/FooBean.class

com/oracle/Foo.class

foo_web.war

foo_ejb.jar

foo.ear

com/oracle/Foo.class

lib/foo_common.jar

foo.ear

WEB-INF/web.xml

WEB-INF/classes/FooServlet.class

foo_web.war

com/oracle/FooBean.class

foo_ejb.jar

Java EE 5 までのパッケージの手間

適切なアーカイブファイル(ear, jar, war)

へのパッケージングが必要

Page 29: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.29

Java EE 6 のパッケージング

WEB-INF/web.xmlWEB-INF/resourcesWEB-INF/classes/FooServlet.class

WEB-INF/classes/com/oracle/FooBean.class

(EJB)WEB-INF/classes/com/oracle/Foo.class

foo.war

EJB も war ファイルへ !!配備記述子は不要 !!

Page 30: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.30

XML 設定地獄

開発効率が悪いテストも大変

J2EE の全技術は不要複雑なパッケージング

実行環境も重量

Page 31: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.31

Java EE 5 以降の設定

Configuration by Exception

必要に応じてデフォルト設定値を上書きする設定手法

アノテーションによる設定

Page 32: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.32

import javax.servlet.annotation.InitParam;

import javax.servlet.annotation.WebServlet;

@WebServlet( name = "SimpleServlet",

urlPatterns = {"/simple"},

initParams = {

@InitParam(name = "param1", value = "value1"),

@InitParam(name = "param2", value = "value2")

} )

public class SimpleServlet { }

Servlet 3.0 のアノテーション

Page 33: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.33

JSF 2.0 のアノテーション

import javax.faces.bean.ManagedBean;

@ManagedBean(name="user")

@SessionScoped

public class UserBean {

    private String name="";

    private String password;

}

Page 34: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.34

EJB 3.1 のアノテーション

@Stateless

public class HelloBean {

    public String sayHello(){

return “Hello”;

}

}

ローカル・ビジネス・インタフェースの実装も不要

Page 35: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.35

実行環境も重量

開発効率が悪いテストも大変

J2EE の全技術は不要複雑なパッケージング

XML 設定地獄

Page 36: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.36

アプリケーション・サーバも軽量化

Web Profile 版の起動時間: 3〜 4秒

不要サービスの未初期化

再起動時間の大幅短縮

小メモリで稼働

開発効率・運用管理コストの大幅向上

Page 37: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.37

シンプル化

HTML 5 対応

Java EE 7 のテーマ

Java EE 6 のプラス α

Page 38: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.38

Java EE 7 へ含まれる予定の JSR 一覧

Connector1.6

JPA 2.1 JTA 1.2 JMS 2.0

Managed Bean 1.0 EJB 3.2

Common Annotations

1.1

Interceptors 1.1

CDI 1.1

PortableExtensio

ns Servlet 3.1

JSP 2.2JSF 2.2

JAX-RS 2.0

EL 3.0

Bean

Valid

atio

n1

.1

Concurrency Utilities for

EE

Batch Application(JSR-352)

Java API forJSON

(JSR-353)

Java API forWebSocket(JSR-356)

新規追加 大幅な更新 通常の更新

Page 39: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.39

Java EE 7 の新機能詳細は火曜日に

Java API forWebSocket(JSR-356)

BatchApplication(JSR-352)

ConcurrencyUtilities for EE

(JSR-236)

Page 40: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.40

JSR 353 : Java API for Processing JSON

Java API forJSON

(JSR-353)

Page 41: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.41

RFC 4627 The application/json Media Type forJavaScript Object Notation

軽量、テキストベース、プログラミング言語に非依存移植性が高く、構造化されたデータ交換フォーマット

{“name”:”Bob”,”age”:20,”phone”:[“276 1234”,”124 4567”]}

JSON とは

Page 42: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.42

JSR 353 : Java API for Processing JSON

Streaming API– 低レベル– JSON の解析や生成の効率的な方法

Object Model API– 高レベル– Streaming よりもかんたんに実装可能– Streaming API 上に実装

Streaming & Object Model

Page 43: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.43

JSON API のアーキテクチャ

JSON プロバイダ

SPI

Streaming API

Object ModelAPI

APP1 APP2 APP n・・・

便利な機能

低レベル API

Page 44: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.44

{

"firstName": "John", "lastName": "Smith", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

JSON データのサンプル

Page 45: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.45

Streaming API (低レベル : StAX ライクな実装 )

Page 46: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.46

JsonParser インスタンスの生成方法 (読み込み 2通り )

JsonParser parser = javax.json.Json#createParser()

JsonParser parser = Json#createParserFactory()#createParser()

Page 47: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.47

{

"firstName": ”Taro", "lastName": ”Yamada", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

START_OBJECT

Streaming API – JsonParser (低レベル操作 )

Page 48: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.48

{

"firstName": ”Taro", "lastName": ”Yamada", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

KEY_NAME

Streaming API – JsonParser (低レベル操作 )

Page 49: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.49

{

"firstName": ”Taro", "lastName": ”Yamada", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

VALUE_STRING

Streaming API – JsonParser (低レベル操作 )

Page 50: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.50

{

"firstName": ”Taro", "lastName": ”Yamada", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

VALUE_NUMBER

Streaming API – JsonParser (低レベル操作 )

Page 51: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.51

{

"firstName": ”Taro", "lastName": ”Yamada", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

START_ARRAY

Streaming API – JsonParser (低レベル操作 )

Page 52: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.52

{

"firstName": ”Taro", "lastName": ”Yamada", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}END_ARRAY

Streaming API – JsonParser (低レベル操作 )

Page 53: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.53

{

"firstName": ”Taro", "lastName": ”Yamada", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

} END_OBJECT

Streaming API – JsonParser (低レベル操作 )

Page 54: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.54

{

"firstName": ”Taro", "lastName": ”Yamada", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

例 – 値 “ John” の取得方法 (低レベル )

Page 55: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.55Copyright © 2013, Oracle and/or its affiliates. All rights reserved.55

try (Reader reader =

new FileReader(”~/json.dat");) {

JsonParser parser = Json.createParser(reader);

JsonParser.Event event = null;

event = parser.next(); //START_OBJECT の取得

event = parser.next(); //KEY_NAME “firstName” の取得 System.out.println(parser.getString());

} catch (IOException ioe) {

logger.log(Level.SEVERE, null ,ioe);

} {"firstName": ”Taro"

Page 56: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.56

Object Model API (扱い易い : DOM ライクな実装 )

Page 57: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.57

try (JsonReader jsonReader = Json.createReader(reader)) {

JsonObject jObj = jsonReader.readObject();

if(jObj.containsKey("firstName")){

String value = jObj.getString("firstName");

System.out.println(value); // Taro

}

}

JSonObject から特定 Key の Value を取得Key と Value の型が分かっている場合に有効

{ "firstName": ”Taro", ……}

Page 58: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.58

if(jObj.containsKey("phoneNumber")){

JsonArray array = jObj.getJsonArray("phoneNumber");

for(JsonValue phoneValue : array){

if(phoneValue.getValueType() ==

JsonValue.ValueType.OBJECT){

JsonObject arrayElem =

array.getJsonObject(array.indexOf(phoneValue));

if(arrayElem.containsKey("type")){ }

"phoneNumber": [ { "type": "home”, ..}, { "type": "home”, ..} …… ]

JSonObject から特定 Array を取得

Page 59: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.59

Builder から JsonObject の生成

JsonObject jsonObject = Json.createObjectBuilder(). // {

add(”KEY1", ”VALUE1"). //”KEY1": ”VALUE1”

add(”KEY2", //”KEY2":

Json.createArrayBuilder(). // [

add(Json.createObjectBuilder(). //{

add(”KEY3", ”VALUE3"))). //”KEY3": ”VALUE3" }

build();

{"KEY1":"VALUE1","KEY2":[{"KEY3","VALUE3”}]}

Page 60: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.60

try (BufferedReader br =

new BufferedReader(new FileReader(”~/json.dat"));

JsonReader jsonReader = Json.createReader(br)) {

JsonObject jObj = jsonReader.readObject();

...

} catch (IOException ex) {

logger.log(Level.SEVERE, null, ex);

}

I/O から JSonObject の読み込み

Page 61: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.61

JSR 341:

Expression Language 3.0

EL 3.0

Page 62: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.62

Lambda 式対応– Array, List, Map の構成

コレクションに対するクエリ演算子 (LINQ式 ) Java SE 環境で利用するための API を提供 デフォルトの EL 実行環境マネージャの追加 クラス (static) 変数、クラス (static) メソッド、 enum 定数対応 クラス、パッケージのインポート

新機能の一覧

EL 3.0

Page 63: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.63

名前空間を持つ Name– reference, import

関数定義 コンストラクタ 新しい演算子

– 文字列連結演算子、変数割当用演算子型変換表記の評価用のリスナー

新機能の一覧

EL 3.0

Page 64: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.64

<h:dataTable id="tabledata" value=”#{

afilter =indexManagedBean.ageFileter ;

indexManagedBean.data.stream().

filter(p-> p.age >= afilter).

toList()}" var="person" border="1"> <h:column>

<f:facet name="header">

<h:outputText value=" 名前 "/>

</f:facet>

<h:outputText value="#{person.name}"/>

</h:column>

EL 式内で Lambda 式を記述 ( コレクション操作 )

Page 65: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.65

JSR 343: Java™ Message Service 2.0

JMS 2.0

Page 66: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.66

かんたんに実装できるようになった API– JMSContext, JMSProducer, JMSConsumer の追加

例外の実装方法の変更既存 API に対する改善 CDI を利用した冗長コードの排除

クラウド機能は Java EE 8 へ

新機能の一覧

JMS 2.0

Page 67: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.67Copyright © 2013, Oracle and/or its affiliates. All rights reserved.67

@Stateless

public class MailRegJMSSendQueueEJB {

@Resource(mappedName = "java:comp/

DefaultJMSConnectionFactory")

ConnectionFactory conn;

@Resource(mappedName = "jms/mailRegistQueue")

Queue queue;

public void registEmailAddress(String emailAddress) {

try (JMSContext context = conn.createContext()) {

context.createProducer().

send(queue,emailAddress);

}}}

送信コード (Java EE 7)

Page 68: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.68Copyright © 2013, Oracle and/or its affiliates. All rights reserved.68

@MessageDriven(mappedName = "jms/mailRegistQueue")

public class SendMessageMDB implements MessageListener {

@Inject

MailSender mailSender;

@Override

public void onMessage(Message message) {

try {

TextMessage msg = (TextMessage) message;

mailSender.sendMessage(msg.getText());

} catch (JMSException jmse) {

logger.log(Level.SEVERE, …);

}}}受信コード MDB(Java EE 7)

Page 69: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.69

Java EE 7 の新機能詳細は火曜日に

Java API forWebSocket(JSR-356)

BatchApplication(JSR-352)

ConcurrencyUtilities for EE

(JSR-236)

Page 70: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.70

Page 71: Java EE 6 to Java EE 7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.71