• Share
  • Email
  • Embed
  • Like
  • Private Content
Whats comming JMS 2.0
 

Whats comming JMS 2.0

on

  • 6,430 views

 

Statistics

Views

Total Views
6,430
Views on SlideShare
1,073
Embed Views
5,357

Actions

Likes
2
Downloads
27
Comments
0

8 Embeds 5,357

http://yoshio3.com 5343
http://webcache.googleusercontent.com 6
http://translate.googleusercontent.com 3
https://si0.twimg.com 1
http://yoshio3.com&_=1339033527543 HTTP 1
http://yoshio3.com&_=1345796946951 HTTP 1
http://yoshio3.com&_=1347239256260 HTTP 1
https://twitter.com 1
More...

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Whats comming JMS 2.0 Whats comming JMS 2.0 Presentation Transcript

    • 1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JSR 343 : What s Coming Java Message Service 2.0日本オラクル株式会社 シニア Java エバンジェリスト寺田 佳央 2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。 OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標 です。文中の社名、商品名等は各社の商標または登録商標である場合があります。3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • Program Agenda •  はじめに –  JMS の復習 •  JMS 2.0 の新機能 •  まとめ •  参考情報4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • はじめに5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8 5
    • 6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • つながり7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • Messaging とは•  ソフトウェアやアプリケーションをつなぐための手段 – 類似例:電子メール(人と人とをつなぐ手段)8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • Point To Point (1対1)プロデューサー メッセージプロバイダ コンシュマー 送信 受信10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • Publish / Subscribe (1対多) サブスクライバ サブスクライバパブリッシャ メッセージプロバイダ サブスクライバ パブリッシュ サブスクライブ11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • Java SE/EE 環境で利用可能 JMS API JMS API EJB Java SE Java EE※ Application Client Container も利用可能12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • アプリケーション実装方法の比較 Application Java SE Message Client Appilcation Driven Bean Container開発生産性(低) 開発生産性(高)開発者の考慮が必要 コンテナが豊富な機能 を実装13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMS 参照実装 Open MQ14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • http://mq.java.net/ ※ GlassFish の Enterprise Platform 版にバンドル15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • Open MQ(メッセージ・プロバイダ) の起動 GlassFish> ./imqbrokerd -name “myBroker”! メッセージプロバイダが [27/3/2012:16:10:28 JST] ! OpenMQ の場合 ========================================================  ! Open Message Queue 4.5.2! Oracle バージョン: 4.5.2 (Build 2-d)!! … (中略)!! [27/3/2012:16:10:29 JST] [B1039]: ブローカ ! “myBroker@192.168.0.1:7676” の準備ができました。 16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • メッセージプロバイダの送信先(宛先)一覧 GlassFish> ./imqcmd list dst ! ユーザ名: admin! パスワード: [admin]! 指定されたブローカ上のすべての送信先のリスト:!--------------------------------------------------------------- !名前 タイプ 状態 プロデューサ コンシューマ Msgs !Total ワイルドカード Total ワイルドカード カウント リモート UnAck Avg Size!--------------------------------------------------------------- ! mq.sys.dmq キュー 実行中 0 – 0 – 1 0 0 996.0!送信先のリストに成功しました。 17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMS API Java SE Java SE 環境の 実装18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMS アプリケーション on Java SE •  メッセージ・プロバイダに接続 –  直接アドレス指定、JNDIルックアップ •  キューへの接続 •  メッセージ作成 •  メッセージ送信 宛先のキュー名 JMS クライアント メッセージプロバイダ19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMS アプリケーション ‒ 接続public class Sender {! public static void main(String[] args) throws JMSException {! com.sun.messaging.ConnectionFactory connectionFactory = ! new com.sun.messaging.ConnectionFactory();! connectionFactory.setProperty(com.sun.messaging.! ConnectionConfiguration.imqAddressList,! "mq://127.0.0.1:7676");! javax.jms.QueueConnection queueConnection = ! connectionFactory.createQueueConnection("admin", "admin");! …… (続く)! 20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMS アプリケーション on Java SE 環境public class Sender {! ……(続き)! javax.jms.QueueSession queueSession = queueConnection.! createQueueSession (false, Session.AUTO_ACKNOWLEDGE);! javax.jms.Queue smsQueue = queueSession. ! createQueue("sample_queue");! javax.jms.MessageProducer producer = queueSession. ! createSender(smsQueue);! Message msg = queueSession.createTextMessage(“メッセージ送信”);! producer.send(msg);! queueConnection.close();}} 21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • Java SE 環境で利用した場合の課題 •  接続ファクトリを自身で生成 –  MQプロバイダと密結合 –  MQプロバイダ・依存クラスを利用 –  可読性・保守性・移植性の低下 •  コネクション・プールの利用が不可能 –  コネクションの再利用が困難 –  大量リクエストでMQプロバイダへ高負荷を掛ける可能性あり •  トランザクション処理を自身で実装22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMS API App/EJB Java SE コンテナ上で動作23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • メッセージ・プロバイダ設定 •  アプリケーション・サーバの設定 –  接続ファクトリ –  宛先 jms/MyQueue 宛先のキュー名 JNDI 名前空間 管理者 接続 ファクトリ 宛先 メッセージプロバイダ jms/MyFactory24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • GlassFish の場合 管理ツールから接続ファクトリの設定 メッセージプロバイダGlassFishの管理コンソール 接続ファクトリの設定 (コネクション・ファクトリ) 25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • GlassFish の場合 管理ツールから送信先(宛先)の設定 宛先のキュー名 メッセージプロバイダ26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMS アプリケーション on コンテナ •  アプリケーション・クライアント・コンテナ •  EJB コンテナ リソース・ インジェクション JNDI 名前空間 jms/MyFactory開発者 jms/MyQueue 接続 宛先のキュー名 ファクトリ 宛先JMS クライアント メッセージプロバイダ クライアントはJNDI経由で 論理的に接続 27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMS API App Client アプリケーション・ Java SE クライアント・ コンテナの実装28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • リソースのインジェクションpublic class OrderSender {! @Resource( mappedName="jms/MyConnectionFactory” )! private static ConnectionFactory connectionFactory; ! @Resource( mappedName="jms/mySampleQueue” )! private static Queue queue;! public static void main(String argv[]) throws ! JMSException{ ! …… (続く) !29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • メッセージの送信public static void main(String argv[]) throws JMSException{ ! Connection con = connectionFactory.createConnection();! Session session = ! con.createSession(false, Session.AUTO_ACKNOWLEDGE);! MessageProducer prod = session.createProducer(queue);! TextMessage message = session.createTextMessage();! message.setText(“メッセージ送信”);! prod.send(message);! session.close();! con.close();!}! 30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • メッセージの受信 public class MyMessageListener implements MessageListener{! @Resource( mappedName="jms/MyConnectionFactory” )! private static ConnectionFactory connectionFactory; ! @Resource( mappedName="jms/mySampleQueue” )! private static Queue queue;!! public void onMessage(Message message){! System.out.println("Message received: " ! + ((TextMessage)message).getText();! }! …… (続く) 31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • メッセージの受信 …… (続き)!   public static void main(String[] args){! Connection connection = ! connectionFactory.createConnection();! Session session = !   connection.createSession(false,Session.AUTO_ACKNOWLEDGE);! MessageConsumer consumer = session.createConsumer(queue);! consumer.setMessageListener(new MyMessageListener());! connection.start(); ! } }! 32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMS API Java SE EJB EJB コンテナ (MDB) の実装33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • Message Driven Bean とは •  EJBコンテナで実行されるコンシュマー(受信者) –  プロデューサ(送信者)として実装することも可能 •  コードの大幅な簡略化 MDB –  マルチスレッド EJB –  セキュリティ Java EE –  トランザクション •  EJB による AOP開発 –  Interceptor –  PostConstruct, Predestroy34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • MDBによるメッセージ受信@MessageDriven(mappedName = "jms/mySampleQueue”)!public class ReceiverMDB implements MessageListener {! public void onMessage(Message message) {! try {! TextMessage msg = (TextMessage) message;! System.out.println(“Message received:" ! + msg.getText());! } catch (JMSException jmse) {! jmse.printStackTrace();! }}} トランザクション、セキュリティ、 Interceptor 等も利用可能35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMS 2.0の新機能36 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8 5
    • Java Message Service 2.0 (JSR 343) •  2011年3月:全開一致承認 •  Java EE 7 仕様の一部として提供 •  エキスパート・グループによって作業中 •  コミュニティ活動への参加の呼びかけ –  jms-spec.java.net –  メーリング・リストへの参加、コメント Spec Lead Nigel Deakin 37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMS 2.0 ロードマップ パブリック・レビュー ドラフト提出(計画) Q4 Q1 Q2 2011 2012 2013アーリー・ドラフト Java EE 7ファイナル提出(予定) リリース(予定)38 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • http://jms-spec.java.net39 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 40 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMS 2.0 の変更点のポイント41 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • • 新規簡易 API を提供 • 例外の実装方法が変更 • 既存 API に対する改善 • CDI を利用した冗長コードの排除42 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 既存のMDB : メッセージ受信 in Java EE @MessageDriven(mappedName = "jms/mySampleQueue”)! public class ReceiverMDB implements MessageListener {! public void onMessage(Message message) {! TextMessage msg = (TextMessage) message;! System.out.println(“受信したメッセージ:" ! + msg.getText());! }!} 受信用コード実装は簡単43 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 既存のMDB : メッセージ送信 in Java EE @Resource( mappedName="jms/MyConnectionFactory” )! private static ConnectionFactory connectionFactory; ! @Resource( mappedName="jms/mySampleQueue” )! private static Queue queue;!! メッセージ送信の実装は面倒 public void sendMessage(String text){! Connection con = connectionFactory.createConnection();! Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);! MessageProducer prod = session.createProducer(queue);! TextMessage message = session.createTextMessage(text);! message.setText(message);! prod.send(message);! con.close();44 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 既存の問題点: メッセージ送信 in Java EE @Resource( mappedName="jms/MyConnectionFactory” )! private static ConnectionFactory connectionFactory; ! @Resource( mappedName="jms/mySampleQueue” )! private static Queue queue;! 単なるメッセージ送信に! 中間オブジェクトが必要 public void sendMessage(String text){! Connection con = connectionFactory.createConnection();! Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);! MessageProducer prod = session.createProducer(queue);! TextMessage message = session.createTextMessage(text);! message.setText(message);! prod.send(message);! con.close();45 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 既存の問題点: メッセージ送信 in Java EE @Resource( mappedName="jms/MyConnectionFactory” )! private static ConnectionFactory connectionFactory; ! @Resource( mappedName="jms/mySampleQueue” )! private static Queue queue;! 定型的なコード! public void sendMessage(String text){! Connection con = connectionFactory.createConnection();! Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);! MessageProducer prod = session.createProducer(queue);! TextMessage message = session.createTextMessage(text);! message.setText(message);! prod.send(message);! con.close();46 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 新規簡易 API MessagingContext を提供 javax.jms.MessagingContext インタフェース MessagingContext •  別々のクラスを1つに統合 –  Connection Connection Session –  Session –  MessageProducer –  MessageConsumer MessageProducer MessageConsumer 47 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • MessagingContext の利用例 メッセージ送信 MessagingContext context = conFactory.createMessagingContext();! TextMessage textMsg = context.createTextMessage(message);! context.send(queue, textMsg);!! メッセージ受信 MessagingContext context = conFactory.! createMessagingContext(AUTO_ACKNOWLEDGE);! MessageListener mListener = new MyMsgListener();! context.setMessageListener(queue, mListener);!48 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 既存の問題点: メッセージ送信 in Java EEpublic void sendMessage(String text){! Connection con = null;! try{! con = connectionFactory.createConnection();! Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);! MessageProducer prod = session.createProducer(queue);! TextMessage message = session.createTextMessage(text);! message.setText(message);! prod.send(message);! 使用後コネクションの }finally{! クローズが必要 con.close();! }49 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • Java SE 7 の try-with-resource に対応 AutoCloseable による実装 (close()の実装が不要) ! public void sendMessage(String text){!  try(MessagingContext ctx = cFactory.createContext()){! TextMessage message = session.createTextMessage(text);! message.sendText(outQueue,message);! }! }!50 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 既存の問題点: メッセージ送信 in Java EEpublic void sendMessage(String text){! try{! ……// 送信処理! 例外処理の実装が prod.send(message);! 必要 }catch(JMSException jmse){! // 例外処理! }finally{! try{! if(con != null) con.close();! }catch (JMSException jmse2){! // 例外処理! }! }}51 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 例外の実装方法が変更チェック例外から非チェック例外へ 過去の例外クラス 今後の例外クラスJMSException JMSRuntimeExceptionTransactionRolledBackException TransactionRolledBackRuntimeEx ceptionIllegalStateException IllegalStateRuntimeException!InvalidDestinationException IllegalDestinationRuntimeExcep tion!InvalidSelectorException InvalidSelectorRuntimeExceptio nMessageFormatException MessageFormatRuntimeException 52 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 例外の実装方法が変更例外処理の実装は不要 (RuntimeException) public void sendMessage(String text){! ……// 送信処理! prod.send(message);! }53 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 既存の問題点: メッセージ送信 in Java EE @Resource( mappedName="jms/MyConnectionFactory” )! private static ConnectionFactory connectionFactory; ! @Resource( mappedName="jms/mySampleQueue” )! private static Queue queue;! 冗長的な引数! public void sendMessage(String text){! Connection con = connectionFactory.createConnection();! Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);! MessageProducer prod = session.createProducer(queue);! TextMessage message = session.createTextMessage(text);! message.setText(message);! prod.send(message);! con.close();54 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • javax.jms.Connection に対する改善 セッション作成方法の簡易化 •  今まで –  Connection#createSession( transacted, deliveryMode ) •  今後 –  Java SE で利用可能な新規メソッド •  Connection#createSession( sessionMode ) –  Java EE で利用可能な新規メソッド •  Connection#createSession()55 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • CDIアノテーションを使用した依存性注入MessagingContext に対する注入 @Inject! private MessagingContext context; •  リクエスト・スコープ •  リクエスト毎にコネクションを生成 •  処理終了時に自動的にコネクション切断56 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • CDIアノテーションを使用した依存性注入MessagingContext に対する注入 @Inject! @JMSConnectionFactory(“jms/MyConFactory”)! private MessagingContext context; •  JNDI ルックアップでコンテナの接続ファクトリを使用 –  コネクション・プール等を利用可能 •  JNDI 名を未指定時、システムのデフォルト使用57 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • CDIアノテーションを使用した依存性注入MessagingContext に対する注入 @Inject! @JMSConnectionFactory(“jms/MyConFactory”) ! @JMSPasswordCredential(userName=“admin”,password=“admin”)! private MessagingContext context; •  ユーザ名・パスワードを指定58 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • CDIアノテーションを使用した依存性注入MessagingContext に対する注入 @Inject! @JMSConnectionFactory(“jms/MyConFactory”) ! @JMSSessionMode(MessagingContext.AUTO_ACKNOWLEDGE)! private MessagingContext context; •  セッション・モードを指定 –  SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE –  (デフォルト:AUTO_ACKNOWLEDGE)59 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • CDIアノテーションを使用した依存性注入MessagingContext に対する注入 @Inject! @JMSConnectionFactory(“jms/MyConFactory”) ! @JMSAutoStart(false)! private MessagingContext context; •  JMSContext#setAutoStart(false)と同等 •  コンシューマ作成時JMSContextで使用する 接続を自動的に起動60 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 61 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • Java EE 6 までのメッセージ送信 @Resource( mappedName="jms/MyConnectionFactory” )! private static ConnectionFactory connectionFactory; ! @Resource( mappedName="jms/mySampleQueue” )! private static Queue queue;!! public void sendMessage(String text){! Connection con = connectionFactory.createConnection();! Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);! MessageProducer prod = session.createProducer(queue);! TextMessage message = session.createTextMessage(text);! message.setText(message);! prod.send(message);! con.close();62 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • Java EE 7 におけるメッセージ送信 @Inject! @JMSConnectionFactory(“jms/MyConFactory”) ! private MessagingContext context;!! @Resource(mappedName = “jms/queue”)! private Queue queue;!! public void sendNewMessage(String msg){! context.send(queue, msg);! }63 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • • マルチテナンシーのサポート – リソース生成用メタデータ • 議論中の内容 – http://java.net/jira/browse/ JMS_SPEC-57 • Java EE 7 仕様中で定義 – EE.5.17.4、EE.5.17.5(JMSでない)64 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 今までの実装・運用方法 ‒ 手順 1 •  アプリケーション・サーバの設定 –  接続ファクトリ –  宛先 jms/MyQueue 宛先のキュー名 JNDI 名前空間 管理者 接続 ファクトリ 宛先 メッセージプロバイダ jms/MyFactory65 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 今までの実装・運用方法 ‒ 手順 2 •  設定済のリソースをルックアップ リソース・ インジェクション JNDI 名前空間 jms/MyFactory開発者 jms/MyQueue 接続 宛先 宛先のキュー名 ファクトリJMS クライアント メッセージプロバイダ クライアントはJNDI経由で 論理的に接続 66 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 現状ではマルチテナンシー対応が困難 テナント A 管理者が接続ファクトリ、宛先を設定 開発者は管理者が設定したJNDI 名をコードに反映 テナント B 管理者が接続ファクトリ、宛先を設定 開発者は管理者が設定したJNDI 名をコードに反映 テナント C 管理者が接続ファクトリ、宛先を設定 開発者は管理者が設定したJNDI 名をコードに反映67 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 実現したい事•  アプリケーション上で必要なリソースを設定可能 JNDI 名前空間 テナントA宛先 接続 ファクトリ 宛先 管理者 テナントB宛先 (配備者) 接続 ファクトリ 宛先 メッセージプロバイダ68 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 新規メタデータを提供 ‒ 接続ファクトリ@JMSConnectionFactoryDefinition @JMSConnectionFactoryDefinition(! name=“java:app/MyJMSFactory” ,! resoureType=“javax.jms.QueueConnectionFactory” ,! clientId=“foo” ,! resourceAdapter=“jmsra” ,! initialPoolSize=5 ,! maxPoolSize=15! ※ 同等の XML 設定を提供 )69 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 新規メタデータを提供 ‒ 宛先@JMSDestinationDefinition @JMSDestinationDefinition(! name=“java:app/MyQueue” ,! resoureType=“javax.jms.Queue” ,! resourceAdapter=“jmsra” ,! destinationName=“myQueue”,! tenantIsolation=“ISOLATED or SHARED”! ) ※ 同等の XML 設定を提供70 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • • 開発容易性の大幅な向上 • Java EE 7 のテーマをサポート – クラウド対応 – マルチ・テナンシー • その他71 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 参考情報 •  JSR 343 –  http://jcp.org/en/jsr/detail?id=343 •  JMS 2.0 の仕様 –  http://java.net/projects/jms-spec –  http://java.net/projects/jms-spec/downloads •  JMS-Spec JIRA –  http://java.net/jira/browse/JMS_SPEC •  OpenMQ –  http://mq.java.net/72 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • Russia 17–18 April 2012 India 3–4 May 2012 San Francisco September 30–October 4, 201273 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 74 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 75 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • •  直接オブジェクト内容送信 •  永続サブスクリプションの簡易化 •  JMSプロバイダ、アプリケーションサーバ間インタフェース定義 •  MDBの設定改善 •  遅延配信 •  サーバからの非同期ACKを受信するメッセージ送信 •  JMSDeliveryCount の必須化 •  トピックの階層構造化 •  特定トピックのサブスクリプションに対する複数のコンシュマー •  バッチ配信76 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 直接オブジェクトの内容を送信可能 •  メッセージの作成は不要 –  producer#send(String text); –  producer#send(Serializable object); •  制限事項 –  メッセージ・プロパティの設定は不可 –  BytesMessage での使用は非推奨 –  receive() メソッドでの同様操作は検討中(不明確)77 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 永続サブスクリプションの実装の簡易化 •  今までの永続サブスクリプションの識別方法 –  {clientId, subscriptionName} •  今後、永続サブスクリプションで clientId は省略可能 •  EJB 3.2 より MDB を使用する場合、コンテナがデフ ォルトのサブスクリプション名を自動生成78 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMSプロバイダ・アプリケーションサーバ間のインタフェースを定義 •  目的: –  任意のプロバイダと任意のアプリケーションサーバの動作を保証 •  対応: –  Java EE Connector Architecture (JCA) を必須で提供79 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • MDB の改善 (提案中) •  JSR 342 (EJB 3.2) へ提案中 •  MDB における標準的な設定方法 –  宛先(キュー、トピック)の JNDI 名 (メタデータ中) –  接続の JNDI 名 (メタデータ中) –  クライアント ID –  永続サブスクリプション名80 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • MDB の改善 (提案中) ‒ 宛先の定義 •  アノテーションによる設定 @MessageDriven(messageDestinationLookup=“jms/queue”)! public class MyMDB implements MessageListener{! ……! }81 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • MDB の改善 (提案中) ‒ 接続の定義 •  アノテーションによる設定 @MessageDriven(connectionFactoryLookup=“jms/myCF”)! public class MyMDB implements MessageListener{! ……! }82 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • MDB の改善 (提案中) ‒ 永続サブスクリプションの定義 •  アノテーションによる設定 @MessageDriven(activationConfig = {! @ActivationConfigProperty(! propertyName=“subscriptionDurability”, propertyValue="Durable"),! @ActivationConfigProperty(! propertyName="clientId",propertyValue="MyMDB"),! @ActivationConfigProperty(! propertyName="subscriptionName",propertyValue="MySub”)! })! public class MyMDB implements MessageListener{! ……!83 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 遅延配信 •  メッセージ配信におけるスケジューリングが可能 •  MessageProducer に対する新規追加メソッド –  Public void setDeliveryDelay (long deliveryDelay) •  生成したメッセージを、メッセージプロバイダ上で、コ ンシュマーに配信するまで保持する時間をミリ秒で指定84 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • サーバからの非同期応答を受け取る  メッセージ配信 •  メッセージを送信後、応答をサーバから受け取るまで処 理をブロックせずに即座に返す •  応答を受信した際、代わりに非同期コールバックを呼び 出す producer.send(message, new AcknowledgeListener(){! public void onAcknowledge(Message message){! // ACK に対する処理! }! });!85 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • JMSXDeliveryCount が必須に •  JMS 1.1 では JMSXDeliveryCount のプロパティは  省略可能 –  使用した場合: •  メッセージを受信した際、JMSプロバイダが設定を実施 •  メッセージが配信された回数を設定(最初の配信も含め) •  初回配信時:1、次回配信時:2 •  JMS 2.0 では必須86 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • トピックの階層構造 ‒ 詳細検討中 •  トピックを階層構造に配置可能 –  STOCK.NASDAQ.TECH.ORCL –  STOCK.NASDAQ.TECH.GOOG –  STOCK.NASDAQ.TECH.ADBE –  STOCK.NYSE.TECH.HPQ •  コンシュマーはワイルドカードでサブスクライブ可能 –  STOCK.*.TECH.* –  STOCK.NASDAQ.TECH.*87 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 特定トピックのサブスクリプションに 対する複数のコンシュマー •  スケーラビリティの向上を目的 •  トピックのサブスクリプションからのメッセージをスケ ーラブルに処理可能 –  マルチスレッド –  マルチ JavaVM •  永続サブスクリプションのAPIには変更無し •  非永続サブスクリプション用の新規 API MessageConsumermessageConsumer =! session.createSharedConsumer(topic,sharedSubscriptionName);!88 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • バッチ配信 •  メッセージをバッチで非同期配信 •  MessageConsumer に対する新規追加メソッド void setBatchMessageListener(! BatchMessageListener listener,int batchSize,long batchTimeOut)! •  新規 BatchMessageListener リスナー void onMessages(Message[]messages)! •  ACK もバッチで送信 •  JMSプロバイダもしくはアプリケーションの効果的利用89 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 90 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8
    • 91 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8