2013年5月31日

[Java] Non-Blocking I/O in Servlet 3.1

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/non_blocking_i_o_in

Servlet 3.1はJava EE 7で予定されている比較的マイナーなリリースですが、特にServlet APIで構築する人たちにとってはJava EEの基盤APIには非常に重要な変更が含まれています。
そういった機能の一つに、non-blocking I/Oのサポートがあります。低レイテンシ、高スループットのアプリケーションやプロトコル、Webフレームワークを強化するために新たに追加されています。

Servlet 3.1の共同スペックリードであるShing Wai ChanがコードサンプルをブログエントリにUpしています。
Non-blocking IO in Servlet 3.1 By Example
https://weblogs.java.net/blog/swchan2/archive/2013/04/16/non-blocking-io-servlet-31-example
ご自身で公式仕様をチェック頂けます。
JSR-000340 JavaTM Servlet 3.1 Final Release for Evaluation
http://download.oracle.com/otndocs/jcp/servlet-3_1-fr-eval-spec/index.html
APIをGlassFish promoted buildでお試しいただくこともできます。
Downloading Latest GlassFish 4 Promoted
https://blogs.oracle.com/theaquarium/entry/downloading_latest_glassfish_4_promoted

[SOA/BPM] NEW - Oracle Business Rules Self-Study Course

原文はこちら。
https://blogs.oracle.com/SOA/entry/new_oracle_business_rules_self

先頃Oracle Learning Libraryに「Using Oracle Business Rules in BPEL」という新しい自習コースがUpされました。この自習コースの所要時間はおよそ40分です。無料でご利用いただけます。
Using Oracle Business Rules in BPEL
https://apex.oracle.com/pls/apex/f?p=44785:24:2629954104925:::24:P24_CONTENT_ID,P24_PREV_PAGE:7519,118.
このコースでは、Oracle Business Rulesサービスコンポーネントの構成や構成されたコンポーネントをBPELプロセスからの呼びだしを説明する際に、「Introduction to Oracle Business Rules」自習コースの語彙とコンセプトを使っています。「Introduction to Oracle Business Rules」自習コースの後続コースです。
Introduction to Oracle Business Rules
https://apex.oracle.com/pls/apex/f?p=44785:24:0::NO:24:P24_CONTENT_ID,P24_PREV_PAGE:6952,2

[B2B] Customisation / overriding of the Envelop ecs files

原文はこちら。
https://blogs.oracle.com/oracleb2bgurus/entry/customisation_overriding_of_the_envelop

エンベロープ情報(インターチェンジ/グループECSファイル)をカスタマイズするような要件がたまに発生することがあります。
このようなケースは非常にまれなので、デフォルトのエンベロープ定義に加え、カスタマイズされた定義をアップロードする必要がありました。

同じことを実現するための手順を示します。
  1. Interchange ecsファイルだけを作成し、保存する
  2. グループecsファイルだけを作成し、保存する
  3. B2Bで同じものを使う
  1. Interchange ecsファイルだけを作成し、保存する
    • ドキュメントエディタを開き、必要なバージョンとドキュメントタイプを選択します。新しいecsファイル作成時に、エンベロープのインサートのためのチェックボックスを選択することを確認します。
    • 作成が完了したら、グループとトランザクションセットノードを削除し、Interchange ecsノード(ヘッダ、トレーラも含む)だけを残し、保存します。
  2. グループecsファイルだけを作成し、保存する
    • Interchangeを作成する手順で述べた手順でecsファイルを作成した後、Interchangeノードおよびトランザクションセットノードを削除し、グループecsノード(ヘッダ、トレーラも含む)だけを残し、保存します。
  3. B2Bで同じものを使う
    これらの新規作成したecsファイルを2つの方法でB2Bで利用します。
    1. トレーディングパートナーレベルでオーバーライド
      • 構成が完了し、カスタマイズがその後必要な場合に便利な方法です。この場合、[トレーディングパートナー]>[ドキュメント]からカスタマイズ対象のドキュメントを選択します。
      • 新規作成したInterchange、グループECSファイルを[Interchange]および[グループ]タブからそれぞれアップロードし、関連するアグリーメントを再デプロイします。
      この方式の利点は、以下の通りです。
      • カスタマイズされたエンベロープ定義をパートナーに追加できる柔軟性
      • 設計の手戻りを削減
    2. 管理>ドキュメント画面で、別のドキュメント定義を追加
      トレーディングパートナーレベルでの構成がまだの場合に、このシナリオを使うことができます。
      • 必要なドキュメントリビジョンを作成し、InterchangeおよびグループECSファイルをInterchangeおよびグループタブでそれぞれ作成します。
      • [トレーディングパートナー]>[ドキュメント]でドキュメントを追加し、アグリーメントを作成、デプロイします。

[BPM] Searching BPM tasks by payload content: Flex Fields (Mapped Attributes)

原文はこちら。
https://blogs.oracle.com/bpmtech/entry/searching_bpm_tasks_by_the

概要

Oracle BPM 11gR1では現在、ワークフローサービスのJava APIを使って、ペイロードの内容でBPMタスクを検索することはできません。このエントリではフレックスフィールドを使うことにより実現する方法を説明します。

フレックスフィールドについて

検索可能な情報をタスクペイロード内に格納する方法として、フレックスフィールドを利用するやり方があります(Fusion Middleware 11gR1 PS4以後ではマップ済属性と呼んでいます)。マップ済属性を使うと、タスク詳細に隠れることなく、ペイロードの値をタスクデータアソシエーションコンポーネントの列として表示することができます。フレックスフィールドにカスタム属性を格納することにより、以下のメリットを享受できます。
  • タスクのデータアソシエーションコンポーネントでフレックスフィールドを表示することができます
  • フレックスフィールドを使ってカスタムビューや詳細検索でタスクをフィルタすることができます
  • (WorkspaceおよびAPIから)フレックスフィールドを使ってキーワード検索することができます
ペイロード中のトップレベルの単純型属性のみをフレックスフィールドに割り当てることができます。複合型属性や、複合型属性内の単純型はサポートされていません。

プロセスを定義してからBusiness Process Workspaceでフレックスフィールドを定義します。フレックスフィールドを作成した後に生成されたインスタンスのみが正しいフレックスフィールドを反映します。フレックスフィールド作成前のビジネスプロセスのインスタンスでは後のフレックスフィールドの変更を反映しません。

マップ済属性には、Public(パブリック)とProtected(保護された)の2種類あります。パブリックフレックスフィールドの振る舞いはプロセスアクティビティで定義されるのに対し、保護されたフレックスフィールドではヒューマンタスクで他の要素(つまりタスクペイロード)へのマッピングとして定義されます。

この2種類のフレックスフィールドは、両者ともプロセスの生存期間中に変化することができ、各タスクに対し異なった割り当てを施すことができるという点でほぼ同じなのですが、値の割り当て方に違いがあります。パブリックフレックスフィールドの場合、BPMプロセスアクティビティでデータアソシエーションやトランスフォーメーションを使って値を割り当てますが、保護されたフレックスフィールドはSOAヒューマンタスク定義でマッピングすることにより値を割り当てます。

フレックスフィールドをsystemMessageAttributes要素に格納します。以下のワークフロータスクペイロードの一部ではフレックスフィールド格納方法を説明しています。
<...>

1
11
111

Salary
ProtectedTextAttribute1



Country
TextAttribute2



Manager
TextAttribute1



<...>

パブリックフレックスフィールド

これらのマッピングをいつでも変更できますが、タスクコンポーネントを再デプロイした場合にはマッピングを再作成する必要があります。以下のような属性があります。
フレックスフィールドの要素名説明
TextAttribute1 - TextAttribute202000文字までのテキストデータを格納します。これらのフィールドの内容はワークリストアプリケーションやタスク問い合わせサービスでのキーワード検索でチェックされます。
FormAttribute1 - FormAttribute102000文字までのテキストデータを格納します。これらのフィールドの内容はワークリストアプリケーションのキーワード検索でチェックされません。
URLAttribute1 - URLAttribute10200文字以内のテキストデータを格納します。これらのフィールドの内容はワークリストアプリケーションのキーワード検索でチェックされません。
DateAttribute1 - DateAttribute10日付情報を格納します。
NumberAttribute1 - NumberAttribute10数値情報を格納します。

パブリックフレックスフィールドの作成

1.JDeveloperで、フレックスフィールドが必要なタスク内に文字列パラメータを作成する。
2. Business Process Workspaceを管理者権限で開き、管理オプションを選択する。下図のように、フレックスフィールドメニューオプションを確認できるはず。


3. パブリックフレックスフィールドを選択し、新しいフレックスフィールドを作成する。フレックスフィールドを作成したら、「タスクタイプでマッピングを編集」を選択し、タスクを選択して、所望のヒューマンタスクを割り当てる。

4. 各タスクに対し、フレックスフィールドを、ヒューマンタスク内の対応する文字列型パラメータに割り当てる。


5. フレックスフィールドが対応するタスクに割り当てられていることを、フレックスフィールドを選択することで確認する。

保護されたフレックスフィールド

パブリックフレックスフィールドとの大きな違いは保護されたフレックスフィールドはランタイムでの変更ができない、という点です。保護されたフレックスフィールドは、タスクコンポーネントとともにデプロイされます。

次のような属性が利用できます。

フレックスフィールドの要素名説明
ProtectedTextAttribute1 - ProtectedTextAttribute202000文字までのテキストデータを格納します。これらのフィールドの内容はワークリストアプリケーションやタスク問い合わせサービスでのキーワード検索でチェックされます。
ProtectedFormAttribute1 - ProtectedFormAttribute102000文字までのテキストデータを格納します。これらのフィールドの内容はワークリストアプリケーションのキーワード検索でチェックされません。
ProtectedURLAttribute1 - ProtectedURLAttribute10200文字以内のテキストデータを格納します。これらのフィールドの内容はワークリストアプリケーションのキーワード検索でチェックされません。
ProtectedDateAttribute1 - ProtectedDateAttribute10日付情報を格納します。
ProtectedNumberAttribute1 - ProtectedNumberAttribute10数値情報を格納します。

保護されたフレックスフィールドの作成

1. Business Process Workspaceを管理者権限で開き、管理オプションを選択する。下図のように、フレックスフィールドメニューオプションを確認できるはず。

2. 保護されたフレックスフィールドを選択し新しいフレックスフィールドを作成する。
3. JDeveloperでヒューマンタスクを選択する。
4. 新しいマップ済属性をデータセクションに追加し、所望のペイロード要素に割り当てる。


Java APIを使ってフレックスフィールドを使って検索する

フレックスフィールドを作成してから、ワークフローサービスJava APIを使いフレックスフィールドで検索するJavaアプリケーションを作成することができます。フレックスフィールドの種類にあわせて述語を作成する必要があります。

a) パブリックフレックスフィールド
Predicate predicate = new Predicate(TableConstants.WFTASK_TEXTATTRIBUTE1_COLUMN,Predicate.OP_EQ,"<ValueX>");
b) 保護されたフレックスフィールド
Predicate predicate = new Predicate(TableConstants.WFTASK_PROTECTEDTEXTATTRIBUTE1_COLUMN,Predicate.OP_EQ, "<ValueX>");
その上で、述語をクエリに追加する必要があります。
List tasks = querySvc.queryTasks(ctx, queryColumns, null, //Do not query additional info
ITaskQueryService.AssignmentFilter.ALL, null, predicate, null, 0, 0);
コードを実行すると、変数tasksには述語に一致するタスクが含まれています。つまり、最初のフレックスフィールド(TEXTATTRIBUTE1 または PROTECTEDTEXTATTRIBUTE1)として、"<ValueX>"を含んでいるタスクを検索できる、ということです。

[BPM] Oracle BPM 11g Exception Handling

原文はこちら。
https://blogs.oracle.com/bpmtech/entry/bpm_exception_handling

ビジネス例外とシステム例外

BPMNは例外に基づくエラー処理機構を提供しています。これらの例外をエラー捕捉イベントを使って処理し、コンポジットのサービスアクティビティやBPMプロセスの終了イベントを使って例外を投げます。
エラーイベントは、(catchイベントが配置されている範囲に応じて)現在のアクティビティやプロセス、サブプロセスを停止することを考慮することが重要です。すなわち、その範囲内のアクティビティがエラーを補償した後に再開されません。このことを後で例示しましょう。

ビジネス例外

ビジネス例外はプロセスフロー内の予期せぬビジネスプロセスのエラーを処理します。これを使うと、メインフローでは通常のユースケース(所謂Happy Path)を辿り、別のフローではプロセス例外を処理するような、複雑性を減らしたプロセスを作成することができます。
JDeveloperでは、エラーを発生しうるコンポーネントをビジネスカタログに追加すると、こうしたエラーが事前定義済みモジュールのエラーのビジネス例外として現れます。

システム例外

システム例外は、BPMサービスエンジンが動作しているソフトウェアやハードウェア基盤でのエラーの結果であるシステムエラーを処理します。このエントリの範囲では、データベースアダプタやWebサービスアダプタが挙げるシステム例外を捕捉することにフォーカスします(サービスアダプタはSOAコンポジットが有しています)。

システム例外の種類

最もよく使われるシステムフォルトの二つはBinding FaultとRemote Faultです。Remote Faultを使いサービスが対応できないエラーを捕まえ、Binding Faultはその他のシステムエラー、例えば間違った呼び出しなどのために使います。外部サービスを利用する場合に基盤が返すFaultを以下にまとめました。
フレックスフィールドの要素名例外フォルト
データベースアダプタ DBAdaperの停止時 BindingFault
SQL問い合わせ時 RemoteFault
(表が存在しない)
PL/SQLパッケージの例外 BindingFault
(‘raise_application_error’)
WebサービスとしてのPL/SQL(JDeveloperのウィザードから) PL/SQLの例外 RemoteFault (‘raise_application_error’)
サービス停止時 RemoteFault
SOAP Webサービス リモート例外 RemoteFault
間違った引数タイプ RemoteFault

例外捕捉の方法

BPMプロセスでは、例外(ビジネス例外、システム例外とも)を様々な方法で捕捉できます。
  • イベントサブプロセス
  • 境界イベント
    • サブプロセスに添付
    • アクティビティに添付

イベントサブプロセス

以下の図は、RemoteFaultとBindingFaultを処理するための2個のイベントサブプロセスを持つプロセスの例です。

「サービスタスク(Service Task)」が例外を投げ対応する補償サブプロセスが終了すると、プロセスが終了します。つまり、上の例では、DBInfoVisualizationタスクは実行されません。

次のプロセスではこの問題を解決しています。

DBViewInfoタスクはErrorCompensationサブプロセスの後に実行されます。

サブプロセスに添付した境界イベント

次のプロセスは、DatabaseアダプタもしくはWebサービスの呼びだしで例外が発生した場合に実行される補償目的のサブプロセスを示しています。先ほどのシナリオに似ていますが、補償プロセスの再利用の可能性が追加されています。

補償サブプロセスが終了するとフローはDBViewInfoアクティビティに遷移します。つまり、Databaseアダプタが例外を投げるとWebサービスの呼びだしは実行されません。

アクティビティに添付した境界イベント

以下の図ではRemoteFaultもしくはBindingFaultをアクティビティが投げた場合に呼び出される補償サブプロセスを示しています。

エラーイベントによって現在のアクティビティが止まるので、一つ以上の例外を同じアクティビティもしくはサブプロセスで捕捉すると、そのうちの一つのみを処理します。
以下の図では次のサービスを様々に呼びだす典型的なコンポジションサービスを示しています。
  • Webサービス(外部Java SOAP Webサービス)
  • SQL問い合わせのためのデータベースアダプタ
  • PL/SQL実行のためのデータベースアダプタ
  • Webサービスとして公開されたPL/SQLパッケージ(JDeveloper 11gのウィザードを利用)
そして、それらが投げる例外を処理します。

重要なのは、例外を捕捉した際に以後のサービスを呼び出さない、ということです。
(アーキテクチャの観点からすれば、おそらくこれはコンポジションサービスの設計が適切ではありませんが、この章の例示であり、エントリの目的に適っています)

境界イベントはコンポーネントパレットの「エラー捕捉イベント」にあります。

例外捕捉のため、エラーキャッチイベントをサービスアクティビティに配置する必要があります。
作成した境界イベントをダブルクリックして、捕捉する例外を定義することができます。以下のオプションから選択できます。
  • すべてのビジネス例外
  • すべてのシステム例外
  • 特定の例外
例外のスキーマを取得し、データアソシエーションを可能とするためには、(BPM 11gR1 PS3では)特定の例外を選択する必要があります。

[訳注]PS6でも同じです。



[注意]
PS4までは、製品のバグ番号10177932のため、最初の2個のオプション、つまりすべてのビジネス例外やすべてのシステム例外のいずれかを選択する場合、データアソシエーションを利用できませんでしたが、PS5以後では修正されています。

システム例外のリストを見るためには、「システム・フォルトの表示」をチェックする必要があります(サービスタスクで投げられる可能性があるシステムフォルトの確認のため、このエントリのSystem Exception Typesをご覧下さい)。

例外を使ってBPMサービスを拡張する

例外の一般的なグループ(すべてのビジネス例外もしくはすべてのシステム例外)を捕捉する場合、例外の操作はできないため、ビジネスカタログのエラーフォルダにある、対応するシステム例外スキーマを持つことが有用な場合があります。

以下の手順で作成できます。
  1. サービスのコントラクトWSDLを修正し、RuntimeExceptionスキーマを参照するFaultを追加する。
  2. <definitions xmlns:bpe="http://schemas.oracle.com/bpel/extension">
        <types>
            <xsd:schema>
        (…)
                <xsd:import namespace="http://schemas.oracle.com/bpel/extension" schemalocation="xsd/RuntimeFault.xsd"/>
            </xsd:schema>
        </types>
    (…)
        <message name="RuntimeFault">
            <part name="fault" type="bpe:RuntimeFaultMessage"/>
        </message>
    (…)
        <porttype name="PruebaSPV_JavaAsAWS">
            <operation name="XXXX">
                <input message="tns:inputXXXX"/>
                <output message="tns:outputXXXX"/>
                <fault message="tns:RuntimeFault" name="RuntimeFault"/>
            </operation>
        </porttype>
        <binding name="XXXXPortBinding" type="tns:XXXX">
            <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
            <operation name="XXXX">
                <soap:operation soapaction=""/>
                <input>
                    <soap:body use="literal"/>
                </input>
                <output>
                    <soap:body use="literal"/>
                </output>
                <fault name="RuntimeFault">
                    <soap:fault name="RuntimeFault" use="literal"/>
                </fault>
            </operation>
        </binding></definitions>
    (…)
  3. composite.xmlのService Adapterにエラーがないことを確認する
  4. プロセスで、クリアして、再度サービスを追加し、修正されたサービスを使用するすべてのサービスアクティビティをリフレッシュする。対応するデータ・アソシエーションを確認することを忘れずに。
  5. プロジェクトの強制リフレッシュ:JDeveloper 11gを再起動する。
  6. 例外がビジネスカタログのErrorsフォルダに現れることを確認する。
  7. JDeveloperでプロセスにサービスアクティビティを追加する。
これでFaultの内容にアクセスできます。

[Java] Feedback Wanted: Java SE 8

原文はこちら。
https://blogs.oracle.com/java/entry/contribute_to_the_quality_of

Oracleはjava.netでJDK 8のバイナリとドキュメントのスナップショット定期的な早期アクセススナップショットをリリースしています。このまだ完成版でないスナップショットをレビューし、現在開発中のJava SEプラットフォームに貢献してください!次世代のJava Development Kitである最新のJDK 8プレビューアップデートをダウンロードしてください。品質検査をして、試運転し、フィードバックを共有してください。OpenJDK jdk8プロジェクトからソースコードを取得できます。 JDK 8の機能のページに、現在資金提供され、JDK 8に載せることを目指しているJEPのリストがあります。
JDK 8 Project
http://jdk8.java.net/
OpenJDK JDK 8
http://openjdk.java.net/projects/jdk8/
JDK 8 Features
http://openjdk.java.net/projects/jdk8/features
提案したいことがあったり、JDK 8を使っている際に問題が発生したりした場合には、ぜひProject Feedbackフォーラムを使ってください。
Java SE Snapshots: Project Feedback
http://www.java.net/forums/jdk/java-se-snapshots-project-feedback
バグを発見されましたら、このプロジェクトに付随するIssue Trackerではなく、通常のJava SEバグレポートチャネルでお知らせください。その際は、java -versionコマンドの出力で得た完全なバージョン情報を含めることをお忘れなく。
Report a Bug or Request a Feature
http://bugs.sun.com/services/bugreport/index.jsp
JavaコミュニティはJavaリリースを継続して改善するために不可欠な存在です。みなさまのご参加をお待ちしています。
最新のJDK 8早期アクセススナップショットのダウンロードは以下のリンクからどうぞ。
JDK 8 Project
https://jdk8.java.net/

2013年5月30日

[Java] An Overview of JASPIC 1.1 Changes in Java EE 7

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/an_overview_of_jaspic_1

WebSocketや、JSON-P、JMS 2、JAX-RS 2、Java Batch、Concurrency UtilitiesなどといったJava EE7におけるメジャーな変更にだけ注目するのは簡単ですが、実際には非常に幅広い範囲にわたって変更されています。JASPIC1.1(JSR196)は重要ではあるのに見落としやすい変更の一つです。
JSR 196: JavaTM Authentication Service Provider Interface for Containers
http://jcp.org/en/jsr/detail?id=196
Arjan Tijmsが自身のブログエントリで、変更箇所をを調べてくれています。
What's new in Java EE 7's authentication support? (Arjan Tijms' Weblog)
http://arjan-tijms.blogspot.fr/2013/04/whats-new-in-java-ee-7s-authentication.html
彼は各変更点のコンテキストやモチベーションについて技術的な詳細やサンプルコードと共に説明しています。彼はまた、JASPIC1.1の非常に便利な変更履歴についても言及しています。Java EEセキュリティに関心があるなら必読でしょう。

2013年5月27日

[Solaris] SAP Netweaver supports Solaris 10 Branded Zones on Solaris 11

原文はこちら。
https://blogs.oracle.com/partnertech/entry/sap_netweaver_supports_solaris_10

SAPはSolaris 10での動作をサポートしている全てのSAP NetWeaver製品で、Solaris 11を用いたSolaris 10 Blanded Zoneでの動作もサポートします。詳細はSAP note 1824835をご覧下さい(SAP製品をご利用のお客様専用で、要認証です)。

[Java] JSR updates - May 2013

原文はこちら。
https://blogs.oracle.com/jcp/entry/jsr_updates_may_2013

今月のJCPはJava EE 7に関するJSRのFinal Releaseのために忙しい月で、今月は2個のJSRのEarly Draft Reviewもありました(詳細は以下をどうぞ)。4月、Java EE 7のJSRがJCP EC Final Approval Ballots(ECによる最終承認投票)を通過し、今月は、Java EE 7のJSR14個のうち10個がFinal Releaseを出しています。
JSR updates - April 30
https://blogs.oracle.com/jcp/entry/jsr_updates_april_15
残りの4個のJSRはFinal Releaseを来週出す予定です。これらのJSRが完了するまで懸命な努力を重ねたスペックリード、Expert GroupのメンバーやAdopt-a-JSR参加者に対しお祝い申し上げます。これらのJSRについてもっと知って頂くためにも、6月12、13日開催のJava EE 7 ライブWebcastへの登録をお忘れなく。
Live Webcast : Introducing Java EE 7
https://event.on24.com/eventRegistration/EventLobbyServlet?target=registration.jsp&eventid=615713&sessionid=1&key=453EBA948F6408FE613E61903CBAEBFA&partnerref=Java_EE7_Launch_eVite_06122013&sourcepage=register
  • Early Draft Review
    • JSR 354(Money and Currency API)
      レビュー終了は2013年5月31日
    • JSR 359(SIP Servlet 2.0)
      レビュー終了は2013年6月15日
  • Final Release
    • JSR 338(Java Persistence 2.1)
    • JSR 339(Java API for RESTful Web Services)
    • JSR 341(Expression Language 3.0)
    • JSR 343(Java Message Service 2.0)
    • JSR 344(JavaServer Faces 2.2)
    • JSR 346(Contexts and Dependency Injection for Java EE 1.1)
    • JSR 349(Bean Validation 1.1)
    • JSR 352(Batch Applications for the Java Platform)
    • JSR 353(Java API for JSON Processing)
    • JSR 356(Java API for WebSocket)
JSR 236、340、342、345のFinal Releaseは来週の予定です。

2013年5月23日

[Java] What's New in JMS 2.0: Ease of Use

原文はこちら。
https://blogs.oracle.com/java/entry/what_s_new_in_jms

OracleのNigel Dealinが新しい記事をOTNのJavaページにUpしました。タイトルは「What's New in JMS 2.0, Part One: Ease of Use」で、この中でJMS 2.0では開発者はコード量を減らしながらメッセージの送受信が可能であることを説明しています。Java EE 7の仕様に含まれているJMS 2.0の機能の一部はJava EE WebアプリケーションやEJBアプリケーションにデプロイすることができるのに対し、別の機能はスタンドアロンのJava SE環境でのみ利用可能なものもあります。

Deakinは以下のように書いています。
JMS 2.0の唯一の最大の変更はメッセージ送受信の新しいAPIです。このAPIを使うと開発者が書くべきコード量が減ります。Java EEアプリケーションサーバーで動作するアプリケーションでは、新しいAPIはリソースインジェクションもサポートします。リソースインジェクションを使うとアプリケーションサーバーにJMSオブジェクトの作成や管理を任せることができるので、アプリケーションがもっとシンプルになります…。
新しいAPIは"simplified" APIとしても知られていますが、これまでのJMS 1.1 API("classic" API)に比べて簡単に利用できかつシンプルになっています。

Deakinは新APIを以下のように説明しています。
シンプルになったAPIは3個の新しいインターフェース(JMSContext、JMSProducer、JMSConsumer)を備えています。
  • JMSContextは、旧来のAPIにおいてConnectionオブジェクトとSessionオブジェクトが別れていたものを単一のオブジェクトに置き換えます。
  • JMSProducerは旧来のAPIにおけるMessageProducerオブジェクトに置き換わるもので軽量になっており、メッセージ配信オプションやヘッダー、プロパティを(builderパターンとしても知られています)メソッドチェーンを使い構成できます。
  • JMSConsumerは旧来のAPIにおけるMessageConsumerオブジェクトを置き換えるもので、同じような使い方で使われます。
開発者は二つのAPIを使うことができ、旧来の機能、新機能の両方にアクセスすることができます。第2部ではDeakinがJMS 2.0における新しいメッセージング機能を説明する予定ですのでお楽しみに。

記事は以下のリンクからどうぞ。
What's New in JMS 2.0, Part One: Ease of Use
http://www.oracle.com/technetwork/articles/java/jms20-1947669.html

[Java] JAXP 1.5 in JDK8 repository, b90

原文はこちら。
https://blogs.oracle.com/joew/entry/jaxp_1_5_in_jdk8

JAXP 1.5がJDK8リポジトリに入っています。互換性のない変更のため、開発チームの一部には既に影響があると感じている者もいますが、皆様がこの変更に関連する問題を特定する上でこのエントリが役立つことを願っています。
JEP 185をご覧下さい。
JEP 185: JAXP 1.5: Restrict Fetching of External Resources
http://openjdk.java.net/jeps/185
JDK8では、新しい外部アクセスプロパティがJAXP 1.5で導入されます。これはデフォルトでDOM/SAX/StAXパーサーやスキーマ検証、XSLTの場合はローカルファイルシステムへのアクセスを禁止するように設定されています。アプリケーションがDTD、XSD、XSLなどの外部リソースへのアクセスを必要とするXMLファイルを処理する際に、最新のJDK8で動作するシステムやアプリケーションはアクセスエラーが発生する可能性があります。互換性の影響はJDK8以後で再評価され、その評価によってデフォルト設定が変わる可能性があります。

現在のビルドにおけるエラーメッセージは以下のようです。メッセージはエラーメッセージの改善を要求するEnhancement Request(JDK-8015016)により変わる可能性があります。
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 163; External DTD: Failed to read external DTD 'properties.dtd', because 'http' access is not allowed.
以下のサンプルコードではこの新しいプロパティを使って問題を修正しています。
enableExternalAccess(parser, "http") ;  // or "all" to allow all access
    /**
     * Configure the parser to allow external access to DTDs by the protocol.
     */
    public static void enableExternalAccess(SAXParser parser, String protocol) throws SAXNotSupportedException  {
        try {
            parser.setProperty("http://javax.xml.XMLConstants/property/accessExternalDTD", protocol);
        }
        catch (SAXNotRecognizedException ignore) {
            // property requires >= JAXP 1.5
        }
    }
アプリケーションやシステム全体のためにこの制限を解除することが望ましいならば、このシステムプロパティ(例えばこの場合はjavax.xml.accessExternalDTD)やjaxp.propertiesファイルを使うことができます。詳細はJEP 185をご覧下さい。

2013年5月21日

[Identity Management] Unified Directory Goes Virtual: IdM R2 PS1

原文はこちら。
https://blogs.oracle.com/OracleIDM/entry/unified_directory_goes_virtual_idm

Oracle Unified Directoryは性能のためのバーを設定しました。伸縮性のある拡張性を提供するべく構築されており、Oracle Unified Directory (OUD)はOracle Directory Services Suiteの全てのディレクトリとの相互運用性があります。

Patchset 1でOUDはOracle Virtual Directoryの機能を併せ持つようになりました。複合型ディレクトリでは、組織はより低運用コストでディレクトリのサイロを一つのディレクトリサーバーに統合することができます。複数の基盤や別々の管理者ではなく、統一されたソリューションによってより優れた管理性や規模の経済をもたらします。

統一されたソリューションにより、組織が認証・認可のための高スケールな読み込み・書き込み性能を提供する単一のソリューションを使ってクラウドを受け入れやすくなります。クラウドアプリケーションにとっては、単一のディレクトリで、位置データやパーソナル化データを保存し、外部データのための単一のインタフェースを提供することができます。
Identity Management R2 PS1の詳細情報は以下のリンクからどうぞ。
Oracle Identity Management 11g Documentation
http://www.oracle.com/technetwork/jp/middleware/id-mgmt/documentation/index.html
http://www.oracle.com/technetwork/middleware/id-mgmt/documentation/index.html
また、以下のリソースからIdentity Management R2について学んで頂くこともできます。

[Linux] Oracle is sponsoring LinuxCon Japan 2013

原文はこちら。
https://blogs.oracle.com/linux/entry/oracle_is_sponsoring_linuxcon_japan1


LinuxCon Japanはアジアにおける主要なLinuxコンファレンスであり、コアな開発者、管理者、ユーザー、コミュニティの管理者、業界のエキスパートがいい感じに組み合わさって参加するイベントです。日本とアジア太平洋の国やその他の世界中のLinuxコミュニティ間のコラボレーションを促進するだけでなく、将来のやりとりをサポートすることを意図しています。このコンファレンスではプレゼンテーション、チュートリアル、Bird of a fetherセッション、基調講演、スポンサーによるミニサミットがあります。LinuxCon Japanでは以下のセッションおよびTechnologyブースでOracle Linuxをご紹介する予定です。

5月29日(水) 15時から(会場:Neptune)
Recent Developments in the Linux Kernel Security Subsystem - James Morris, Oracle
http://linuxconcloudopenjapan2013.sched.org/event/296bcc789f3fe132dacafb624466c999?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no

5月30日(木) 14時から(会場:Pegasus)
Recent Developments in the Linux Tracing World - Elena Zannoni, Oracle
http://linuxconcloudopenjapan2013.sched.org/event/a42fad84625789c02037c6458c55a6cc?iframe=yes&w=900&sidebar=yes&bg=no

5月31日(金) 11時から(会場:Neptune)
Btrfs Specific Data Deduplication - Lui Bo, Oracle
http://linuxconcloudopenjapan2013.sched.org/event/afa81c157f3aa8b2c140d85dfc1eef6b?iframe=yes&w=900&sidebar=yes&bg=no

5月31日(金) 12時から(会場:Mars)
XFS in Rapid Development - Jeff Liu, Oracle
http://linuxconcloudopenjapan2013.sched.org/event/2cd5963bb4d42d64829f2618b2b43138?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no

Technology Showcaseの4番ブースでOracle Linux/Oracle VMのDVDキット、ブローシャー、その他のグッズをお渡ししていますので、お見逃しなく!

今すぐ登録して、セッションやブースにお出で下さい。
登録ページ
http://events.linuxfoundation.org/events/linuxcon-japan/attend/register

2013年5月19日

[Java] Register for Live Webcast Introducing Java EE 7!

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/registration_for_live_webcast_introducing

Introducing Java EE 7のライブWebcastに是非ご登録下さい!Java EE 7プラットフォームのJSRが承認され、現在多くのJava EEの新機能を使った開発開始に向けカウントダウンをしています。
Live Webcast - Introducing Java EE 7
https://event.on24.com/eventRegistration/EventLobbyServlet?target=registration.jsp&eventid=615713&sessionid=1&key=453EBA948F6408FE613E61903CBAEBFA
Java EE 7 Platform Completes the JCP Final Approval Ballot
https://blogs.oracle.com/theaquarium/entry/java_ee_7_platform_completes
http://orablogs-jp.blogspot.jp/2013/05/java-ee-7-platform-completes-jcp-final.html
このオンラインイベントはMC Guptaがホストを務め、以下のような内容です。

  • ビジネスキーノート(Hasan Rizvi、Cameron Purdy)
  • テクニカルキーノート(Linda DeMichiel)
  • Java EEパートナーやコミュニティメンバーのインタビュー
  • 15コマの20分のテクニカルブレイクアウトセッション
    • 新しいJSRやアップデートされたJSRの機能の技術概要
    • JSRスペックリードがお話するセッション
    • ライブチャット
    • 3つのトラックでご提供
      • Scalable, dynamic HTML 5
      • Increasing developer productivity
      • Meeting enterprise demands
    • Java EE 7での開発のデモ
このイベントはライブチャット付きで2回開催します。

2013年6月12日(水)と6月13日(木)
  • 日本時間では木曜日の13時からのの開催です(もちろん夜更かしして木曜の1時から参加もOKです)
  • (PDT / カリフォルニア) 9時 / (EDT / ニューヨーク) 12時 / (BST / ロンドン) 17時
  • (PDT / カリフォルニア) 21時 / (EDT / ニューヨーク) 木曜日の0時 / (EST / シドニー) 木曜日の14時
是非拡散して下さい。

[Java] New Java SE Version Numbering Scheme!

原文はこちら。
https://blogs.oracle.com/java/entry/new_java_se_version_numbering

新機能やセキュリティ修正のリリース(Limited Updated Releases)のリリース番号は、20の倍数とすることになりました。Critical Patch Updates(CPUs)のリリース番号はその前のLimited Updateに5の倍数を加えたものとしますが、必要であれば、リリース番号を奇数にするために1を加えることがあります。
[例]
次回のLimited Update for JDK 7は7u40なので、以後のCPUは、7u45 > 7u51 > 7u55です。
その次のLimited Updateは7u60なので、以後CPUは7u65、7u71、7u75が続きます。
この新しいバージョニングシステムはJDK5、JDK6、JDK7にも適用し、OTN Java SEダウンロードページやJava.comで使われます。
Java SE Downloads
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Java.com
http://java.com
この変更により、以下のようにかわります。
  • バグシステムで特定リリースに修正や機能拡張を割り当てます。
  • 既存のコードが壊れないようします。例えば、バージョンは7u44の形式に従います。7u44-2は使えません。
  • 何か予期せぬリリースのために定期的なリリース番号の間に「スペース」を残しておきます。
詳細は以下のページからどうぞ。
Java SE - Change in Version Numbering Scheme
http://www.oracle.com/technetwork/java/javase/overview/jdk-version-number-scheme-1918258.html

2013年5月17日

[Support] Some MOS Updates and Changes

原文はこちら。
https://blogs.oracle.com/Support/entry/some_mos_updates_and_changes

MOSダッシュボードでニュースをご覧になっていない方で、知っておいていただきたいアップデートをご紹介します。
  • My Oracle Support - サービスリクエストの更新をメールでご覧いただけます(新機能、ただし日本語未対応)
    お客様かた最もリクエストの多かった機能をサポートしました。更新通知メール中にSR(サービスリクエスト / Service Request)の更新の詳細をメール本文で受信することができます。以前はSRの更新メール通知を受信しても、My Oracle Supportへログインして更新情報を確認する必要がありました。この新機能を有効にする方法は、以下のドキュメントをご覧下さい。
    Service Request Email Update Notification Enhancement [ID 1543136.1]
    https://support.oracle.com/oip/faces/secure/km/DocumentDisplay.jspx?id=1543136.1
    訳注)
    上記リンクにある通り、"This new feature is currently only available for Service Requests in English. "なので、日本語の場合は今まで通りです。ご注意下さい。

  • transport.oracle.comのIPアドレスが変わったため、ASR Manager、Secure File Transport(SFT)、Common Array Manager(CAM)、Solaris 11、VOPに影響する可能性があります
    ASR Manager、Secure File Transport (SFT)、Common Array Manager (CAM)、Solaris 11、 VOPソフトウェアをインストールされている場合、2013年5月10日に実施されたtransport.oracle.comのIPアドレスの変更に対応するため、ネットワーク構成に変更を加える必要があるかもしれません。詳細は以下のドキュメントをご覧下さい。
    Changes to Oracle IP Address for transport.oracle.com may affect ASR Manager, Secure File Transport (SFT), Common Array Manager (CAM), Solaris 11, and VOP [ID 1338575.1]
    https://support.oracle.com/oip/faces/secure/km/DocumentDisplay.jspx?id=1338575.1
  • MOS Release 6.5の機能のうち、Chatはご利用いただけません
    リリースノートにあるこの機能は、現時点でご利用いただけません。
    My Oracle Support Release Notes [ID 780132.5]
    https://support.oracle.com/rs?type=doc&id=780132.5
    チャット機能を使ってOracleのサポートエンジニアがチャットを通じてお客様とサービスリクエストについてコンタクトできます。チャットの状態はMy Oracle Supportのページヘッダの右側でご覧いただけ、ステータスをAvailable、もしくはNot Availableに設定変更できます。ステータスをAvailableにすると、Oracleのサポートエンジニアからお客様の状態がわかります。この機能は将来のリリースで利用可能になる予定です。 申し訳ありません。

[Big Data] Oracle Big Data Connectors 2.1

原文はこちら。
https://blogs.oracle.com/bigdataconnectors/entry/oracle_big_data_connectors_2

Oracle Big Data Connectors 2.1がリリースされています。
Oracle Big Data Connectors Downloads
http://www.oracle.com/technetwork/bdc/big-data-connectors/downloads/big-data-downloads-1451048.html
Oracle Loader for HadoopとOracle SQL Connector for HDFSは、新たにこのリリースでCDH 4.2とApache Hadoop 1.1.1での動作を保証しています。

Oracle Loader for Hadoopの機能強化点は以下の通りです。
  • Hiveパーティション表からのロードが可能になっています
  • ユーザビリティとエラー処理が改善されています
  • ロード前にユーザー指定キーでソートできます

2013年5月16日

[Java] New Online Training

原文はこちら。
https://blogs.oracle.com/java/entry/new_java_training_online

Java EvangelistのSimon RitterがRaspberry PiをJavaで動かすチュートリアルをUpしました。
Working with Java ME Embedded and Raspberry Pi - Series
http://apex.oracle.com/pls/apex/f?p=44785:24:111133271513717::::P24_CONTENT_ID,P24_PREV_PAGE:7431,24
OracleのエキスパートであるAngela CaceidoとSungmoon ChoがKeil ARM評価ボードでJava ME Embeddedを使ったサンプルJavaアプリケーションのインストール、コーディング、実行のノウハウを紹介しています。
Working with Java ME Embedded on the Keil ARM Evaluation Board - Series
http://apex.oracle.com/pls/apex/f?p=44785:24:16819055869234::NO:24:P24_CONTENT_ID,P24_PREV_PAGE:7426,2
いくつかの新しく登録されたOracle-by-Example (OBE) チュートリアルでは、Java EEと Oracle Enterprise Pack for Eclipse (OEPE)を使ってクラウドアプリケーションを作成する方法を説明しています。
その他のチュートリアルもたくさんありますので、ご興味ある方はOracle Learning Libraryへどうぞ。
Oracle Learning Library
http://apex.oracle.com/pls/apex/f?p=44785:1:0::NO

[misc.] JavaOne San Francisco Toolkit Available!

原文はこちら。
https://blogs.oracle.com/javaone/entry/javaone_san_francisco_toolkit_available

JavaOne Sun Francisco
http://www.oracle.com/javaone/index.html
September 22 - 26, 2013

もう少しで、今年のJavaイベントについて書くことでしょう。それとも、もしかすると、主治医に言えば、またはサンフランシスコで開催されるJavaOneに参加したり、スピーチをしたり、プレゼンテーションをしたりするのかもしれません。参加者、記者、ブロガー、ユーザー·グループのリーダー、スピーカー、テクノロジーソートリーダーやインフルエンサー、ソーシャルメディアの達人といったすべての方のために、自覚ややる気、参加を促すのに役立つツールを用意しています。
Welcome to the JavaOne ToolKit
http://www.oracle.com/javaone/toolkit/index.html

[Java] Brand Independent PLC Programming on the NetBeans Platform

原文はこちら。
https://blogs.oracle.com/geertjan/entry/brand_independent_plc_programming_on

工場の組立ラインの機械制御や、遊園地の乗り物、または照明器具のような最新の自動化装置は、プログラマブルロジックコントローラ(Programmable Logic Controller / PLC)によって動作しています。ラダー図(Ladder Diagram / LD)のような低レベルのプログラミング言語が数十年使われてきましたが、今なお現役で新しいPLCソフトウェアの開発に使われています。このようなプログラミング構造に内在する古い技術とともに、PLCソフトウェアがブランドに依存しているという事実のような、隠されたペナルティがあります。

PLC-PROGは、PLCプログラミングで完全にブランドから独立した、ユーザーフレンドリーなオブジェクト指向アプローチを実現する初めてのツールです。その結果開発コストが下がり、開発されたプログラムの信頼性が向上しています。このツールはIEC 611131-3に準拠するPLCブランドであればどの製品でも利用できます。グラフィカルなプログラミング方法論をベースにしており、個別のプログラミングスキルは不要で、ツールより監視および可視化の両方を実現することができます。
IEC 611131-3
http://en.wikipedia.org/wiki/IEC_61131-3
PLC-PROGはNetBeansプラットフォームが提供するライブラリを使い開発されてきました。下図はPLC-Prog Visual Editorでラックに収まった様子を模してありますが、これが関数(function)や入出力モジュールをドラッグできるベースエレメントです

プログラミングフローの追跡のためのTree Viewのような他のツールは以下のように表示されます。


詳細情報は以下からどうぞ。
PLC-PROG
http://www.plc-prog.eu/

[WLS, Hardware] WebLogic Server on Oracle Database Appliance - How to configure a WebLogic cluster

原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/weblogic_server_on_oracle_database2

Oracle Database Appliance上でOracle WebLogic Serverのクラスタを構成するには?

Appliance Managerを使うと、Oracle Database Appliance用のWebLogic Serverの構成は簡単です。

ウィザードに従って、数時間でWebLogic Serverクラスタを構成、展開できます。
  1. WebLogic Serverのバージョンを選択する。Rel. 2.5では、WebLogic 12c (12.1.1)もしくは11g (10.3.6)を選択可能。
  2. クラスタのサイズ(2、4、8ノードクラスタ)を選択する。
  3. ネットワーク情報を入力する。
  4. 負荷分散装置のネットワーク情報を入力する。
  5. (オプション)データソース構成情報を入力する。
  6. これでおしまい、デプロイの準備ができました。
シンプル、簡単、わかりやすいでしょ。

[BPM] Enabling logging for Web Forms

原文はこちら。
https://blogs.oracle.com/bpmtech/entry/enabling_logging_for_web_forms

Web Formのロギングを有効化したい場合、ログレベルをサーバー設定で変更する必要があります。PS6では、このプロパティはEnterprise Managerで公開されていませんが、logging.xmlを使って手作業で更新することができます。
手順
以下の場所にあるlogging.xmlを開きます。
<DOMAIN_HOME>/config/fmwconfig/servers/<サーバー名>/
以下のようにログレベルを変更します。
<logger name='com.frevvo' useParentHandlers='true'/>
<logger name='com.gauss' useParentHandlers='true'/>
<logger name='com.frevvo.forms' useParentHandlers='true'/>
<logger name='com.frevvo.forms.rule' useParentHandlers='true'/>
一般にロギングに関する詳細情報は、Fusion Middleware管理者ガイドにありますので、そちらをご覧下さい。

2013年5月15日

[Network, FMW] Oracle Traffic Director - download and check out new cool features in 11.1.1.7.0

原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/oracle_traffic_director_download_and

Oracleの戦略敵なLayer 7ソフトウェア負荷分散製品であるOracle Traffic Directorは、高速、高信頼性、セキュア、使いやすくかつスケーラブルな特徴があり、全てのTCP、HTTP、HTTPSのアプリケーションサーバーやWebサーバーへのトラフィックのための信頼性の高いエントリポイントとして展開することができます。最新リリースであるOracle Traffic Director 11.1.1.7.0がExalogicおよびDatabase Applianceでご利用頂けます。ダウンロードや詳細情報はOTNのTraffic Directorのページをご覧下さい。
Release Downloads for Oracle Traffic Director
http://www.oracle.com/technetwork/java/webtier/downloads/traffic-director-1373931.html
http://www.oracle.com/technetwork/jp/java/webtier/downloads/traffic-director-1373931.html
このリリースでは、メジャーな新機能や機能改善を追加しています。
  • Webアプリケーションファイアウォール
    Oracle Traffic DirectorはWebアプリケーションファイアウォールをサポートします。Webアプリケーションファイアウォールとは一組のルール(ルールセット)をHTTPリクエストに適用するフィルタもしくはサーバープラグインです。Webアプリケーションファイアウォールを使うと、ユーザーがトラフィックをチェックしたり、リクエストを拒否してCSRF脆弱性やクロスサイトスクリプティングのようなよくある攻撃からバックエンドアプリケーションを保護することができます。
  • WebSocket接続
    Oracle Traffic DirectorはデフォルトでWebSocket接続を処理します。WebSocket接続は寿命が長いので、ライブコンテンツやリアルタイムのゲーム、ビデオチャットなどをサポートできます。
  • LDAP/T3の負荷分散をサポート現在Oracle Traffic Directorは、Layer 7で基本的なLDAP/T3負荷分散をサポートしています。つまり、トラフィックのトンネリングのために、汎用的なTCP接続としてリクエストを取り扱います。 これはfull-NATモードで動作します。
是非お試し下さい。詳細の情報はデータシートやドキュメントをご覧下さい。
Oracle Traffic Director (Data Sheet)
http://www.oracle.com/us/products/middleware/application-server/oracle-traffic-director-ds-1389582.pdf
Oracle® Traffic Director Administrator’s Guide 11g Release 1 (11.1.1.7)
http://docs.oracle.com/cd/E23389_01/doc.11116/e21036/toc.htm
http://docs.oracle.com/cd/E23389_01/doc.11116/e21036.pdf

[Security] Oracle Access Management Mobile & Social SDK 11gR2 PS1 is out

原文はこちら。
https://blogs.oracle.com/IdentityStoreServices/entry/idm_mobile_sdk_11gr2_ps1

iOS SDKの最初のアップデート、ならびにAndroid SDKがリリースされました。両プラットフォームで多くの新機能が加わっており、エンタープライズアプリケーションを保護するにあたりお役に立つことでしょう。

以下の認証メカニズムをサポートしています。
  • モバイルおよびソーシャル認証
  • ナレッジベース認証(Knowledge Based Authentication)およびワンタイムパスワードを使う強力な認証
  • Facebook、Google、YahooなどのインターネットIDプロバイダーを使ったソーシャル認証
  • モバイルシングルサインオン
新機能は…
  • オフライン認証(ローカルにキャッシュされた資格証明に対する認証をサポート)
  • 資格証明ストア(デバイス内に安全に機密データを格納するためのユーティリティメソッドの集合体)
  • 暗号モジュール(機密データの暗号化のような、一般的な暗号化作業を可能に)
  • デバイスの位置把握
ドキュメント中にはもっとたくさんの情報が詰まっていますので、是非ご覧下さい。
Oracle® Fusion Middleware Developer's Guide for Oracle Access Management 11g Release 2 (11.1.2.1)
Developing Mobile Services Applications with the iOS Client SDK
http://docs.oracle.com/cd/E37115_01/dev.1112/e27134/mobileiossdk.htm
Developing Mobile Services Applications with the Android Client SDK
http://docs.oracle.com/cd/E37115_01/dev.1112/e27134/mobileandroidsdk.htm
SDKに付属するAPIドキュメントのチェックもお忘れなく。

2013年5月14日

[BPM] Debugging: Oracle Web Form does not render(Designtime/Runtime)

原文はこちら。
https://blogs.oracle.com/bpmtech/entry/oracle_web_forms_does_not

作成したWeb formが描画されない際のデバッグのコツ

  • ComposerへはFQDNでアクセスしましょう。
    (○)adc2100931.us.oracle.com:7001/bpm/composer
    (×)adc2100931:7001/bpm/composer
これはWeb Form作成時にエラーが発生する既知の不具合です。

  • すでにこのエラーが出ている場合は、hostファイルがFQDNを指していることを確認しましょう。
    (ファイル) /etc/hosts
    (例) 127.0.0.1        adc2100931.us.oracle.com
  • WebLogic Serverのリスナーアドレス、フロントエンド・ホストが正しく構成されている(つまり到達できる)ことを確認しましょう
  • フロントエンド・ホストの設定 リスニング・アドレスの設定

[BPM] Introduction to Web Forms -Basic Tutorial

原文はこちら。
https://blogs.oracle.com/bpmtech/entry/introduction_to_web_forms_basic

Oracle BPMのWeb Formの初心者で、概要とハンズオンを手早くやりたい、という方には、このサンプルを是非どうぞ。
ORACLE BPM SUITE 11G Downloads (bpm-WebForms-BasicTutorial)
https://java.net/projects/oraclebpmsuite11g/downloads/directory/Samples/bpm-WebForms-BasicTutorial
このステップバイステップの手順に従ってフォーム作成の共通タスクを知っていただけます。さらに、基礎となる概念や情報を提供していますので、この作業で何をやろうとしているのか理解の助けになるかと思います。

このチュートリアルを実施することで以下のことができるようになります。
  1. 新しいWeb Formの作成
  2. Web Formの設計(要素の追加、プロパティやスタイルの設定)
  3. Web Formレイアウトの変更(パネルや繰り返しの追加)
  4. フォームルールを使ったWeb Formへのダイナミックな振る舞いの追加(検証、見える・見えない、RESTサービスの呼び出し)
サンプル、手順などは以下のリンクからどうぞ。
ORACLE BPM SUITE 11G Downloads
https://java.net/projects/oraclebpmsuite11g/downloads/directory/Samples/bpm-WebForms-BasicTutorial

2013年5月8日

[WLS] WLST Offline Script to Create Summary of WebLogic Domain

原文はこちら。
https://blogs.oracle.com/fmwinstallproactive/entry/wlst_offline_script_to_create

Introduction

問題の調査において、早い段階でより大きい絵を把握することが重要であると常に信じています。例えば、管理対象サーバが問題のある挙動を示している場合、ログを見るだけでなく、背景も知りたいと考えています。例えば…
  • サーバーはクラスタメンバーか?
  • WebLogic Serverドメインに何個のサーバー/クラスターが存在するか?
  • ドメインは複数のマシンにまたがって展開しているか?
  • システムリソース(JDBC、JMSなど)が動作しているか?
WebLogic Serverスクリプティング(WLST)は長年使われており、ブログやウェブサイト、フォーラムで非常に数多くのサンプルがUpされています。大半は、オンラインモードでスクリプトを実行することを前提としていますが、WLSTのオンライン接続が確立できない場合はどうでしょうか。
手動で<DOMAIN_HOME>/config/config.xmlファイルを調べることもできますが、いくつかの構成はconfig.xmlが参照している他のXMLファイルにあるため、これはあまりいい方策とは言えません。きっと別の方法があるはずです。何しろ、WebLogic Serverはドメイン構成をMBeanに保持しているわけですから。そんなわけで、WLSTを検討してみました。

WLST's readDomain Function

WLSTのreadDomain関数をオフラインモードで利用し、ドメインのMBean構成階層/ツリーをロードすることができます。これは以下のように簡単です。

例:Unixマシンの場合
WL_HOME=/oracle/middleware/wlserver_10.3
DOMAIN_HOME=/oracle/middleware/user_projects/domains/MyDomain
$WL_HOME/common/bin/wlst.sh

wls:/offline/readDomain('/oracle/middleware/user_projects/domains/MyDomain')
cdやlsスタイルの構文を使って、ツリーを移動する準備が整いました。
wls:/offline/MyDomain/ls()

drw-   AnyMachine
drw-   AppDeployment
drw-   Cluster
drw-   EmbeddedLDAP
drw-   FileStore
drw-   JDBCSystemResource
drw-   JMSServer
drw-   JMSSystemResource
drw-   Library
drw-   MigratableTarget
drw-   Security
drw-   SecurityConfiguration
drw-   Server
drw-   ShutdownClass
drw-   StartupClass
drw-   WLDFSystemResource

-rw-   Active                                        false
-rw-   AdminServerName                               AdminServer
-rw-   AdministrationMBeanAuditingEnabled            false
-rw-   AdministrationPort                            9002
......(略)

wls:/offline/MyDomain/cd ('Server')
wls:/offline/MyDomain/Server/ls()

drw-   AdminServer
drw-   MyManagedServer
drw-   MyManagedServer01

wls:/offline/MyDomain/Server/cd ('MyManagedServer')
wls:/offline/MyDomain/Server/MyManagedServer/ls()

drw-   DataSource
drw-   NetworkAccessPoint
drw-   SSL
drw-   ServerDiagnosticConfig


-rw-   AcceptBacklog                                 300
-rw-   AdminReconnectIntervalSeconds                 10
-rw-   AdministrationPort                            0
-rw-   AdministrationPortEnabled                     false
-rw-   AdministrationProtocol                        null

...

-rw-   JavaCompilerPostClassPath                     null
-rw-   JavaCompilerPreClassPath                      null
-rw-   JavaStandardTrustKeyStorePassPhraseEncrypted  null
-rw-   JdbcLoginTimeoutSeconds                       0
-rw-   KeyStores                                     null
-rw-   ListenAddress                                 127.0.0.1
-rw-   ListenDelaySecs                               0
-rw-   ListenPort                                    7021
-rw-   ListenPortEnabled                             true

... (略)

wls:/offline/MyDomain/Server/MyManagedServer/foo = get('ListenPort')
wls:/offline/MyDomain/Server/MyManagedServer/print foo

7021

Sample Script and Output

MBeanのツリーを横断して検索する機能がオンラインモードに比べて限られているので、サマリーに有用な属性の中から情報を自動的に取得、表示するスクリプトを書くことは難しいものです。ほとんどの場合、cd()、ls()、get()で立ち往生していますが、IFとFORループ構文を使ってちょっと工夫すると、プログラムでツリーを探索し、きれいなフォーマットで出力することができます。今回のサンプルではHTMLの表を使いました。

Sample Output

サンプル出力結果例はこちらです。スクリーンショットは以下の通りです。

Download Sample Script

サンプルスクリプトはこちらからどうぞ。

Instructions to Run:

1. 起動ラッパースクリプト(UNIXの場合startWLSofflineCollection.sh、Windowsの場合、startWLSofflineCollection.cmd)の環境変数を皆さんの環境に合わせて変更します。

例:startWLSofflineCollection.sh
WL_HOME=/oracle/middleware/wlserver_10.3
DOMAIN_HOME=/oracle/middleware/user_projects/domains/MyDomain; export DOMAIN_HOME
WLST_OUTPUT_PATH=/temp/wlst/; export WLST_OUTPUT_PATH
WLST_OUTPUT_FILE=WLST_MBean_Config_Summary.html; export WLST_OUTPUT_FILE

${WL_HOME}/common/bin/wlst.sh CollectWLSConfigOffline.py
(注意)WLST_OUTPUT_PATH ディレクトリの値はスラッシュ(/)(Windowsの場合は\)で終わる必要があります。スラッシュがないと、スクリプトはエラーになって動作しません。

2. ラッパースクリプトを実行します。wlst.cmdを呼び出し、MBeanの値を収集してHTMLファイルに描画するはずです。
(スクリプトがWLSTシェルを呼び出しますが、Pythonスクリプトの実行は5~10秒程度です)

Disclaimer

これはMS Windows、Linuxで動作するWebLogic Server 10.3.6のドメインに対しテストしたサンプルスクリプトです。皆様の環境でエラーが発生しないとか、期待した結果を出すことを保証できません。数多くの同僚がこのスクリプトを使い、そのフィードバックをもっていくつかの問題を解決しました。もしフィードバックすべきことがあれば、このブログエントリのコメントにお願いいたします。WLSTコードの問題を修正するようにつとめます。

Credits

以下のエントリが非常に参考になりました。
Invoking FMW Application MBeans in Weblogic  (Java / Oracle SOA blog)
http://biemond.blogspot.co.uk/2010/02/invoking-fmw-application-mbeans-in.html
WLST By Examples
http://wlstbyexamples.blogspot.co.uk/

Some Pitfalls (which required coding around)

Checking whether Configuration MBean Hierarchy Exists

クラスタやJDBC、JMS、ファイルストアなどのサービスや機能が構成されていない場合、間rねするMBean階層がドメインレベルでのリストに現れません。例えば、ClusterやJDBC、JMS、ファイルストアが構成されていない場合、ls()を使うと以下のように表示されます。
wls:/offline/MyDomain/ls()

drw-   AnyMachine
drw-   AppDeployment
drw-   EmbeddedLDAP
drw-   Library
drw-   MigratableTarget
drw-   Security
drw-   SecurityConfiguration
drw-   Server
drw-   ShutdownClass
drw-   StartupClass
drw-   WLDFSystemResource
プログラムでcdで表示されないディレクトリに移動しても以下のようなエラーが返ります。
Error: cd() failed. Do dumpStack() to see details.
これを回避するため、スクリプトにはカスタムのfindMBean関数が含まれています。この関数はreturnmapパラメータを使う配列にls()のコンテンツを格納しますので、配列を使って繰り返し処理をして指定した文字列(MBeanディレクトリ名)が存在するかどうかをチェックすることができます。
def findMBean(v_pattern):
    # get a listing of everything in the current directory
    mydirs = ls(returnMap='true');

    v_compile_pattern = java.util.regex.Pattern.compile(v_pattern);

    found = 'Nope not here';

    for mydir in mydirs:
        x = java.lang.String(mydir);
        v_matched = v_compile_pattern.matcher(x);
        if v_matched.find():
            found = 'true';
    return found;

AnyMachine v Machines

WebLogic Server 10.3では、ドメインに複数のマシンが構成されている(つまりマシンに関連するノードマネージャがある)場合、ドメインレベルでのls()は以下のように表示されます。
wls:/offline/MyDomain/ls()

drw-   AnyMachine
しかし、cd ('AnyMachine')は失敗します。正しいcdの構文は以下の通りです。
wls:/offline/MyDomain/cd ('Machines')

Identifying Target Information

JDBCシステムリソースやクラスタのような機能にはターゲットがある場合とない場合があります。存在しないMBeanディレクトリへ移動しようとしたり、存在しないMBean属性を取得しようとすると、エラーが発生し、スクリプトは以後の処理を継続できません。これを回避するためには、TRY/ECXEPT構文を使うことができます。以下のサンプルスクリプトでは、JDBCシステムリソースターゲットを取得し処理しています。
try:
    v_any_targets = '';
    v_jdbc_target = get('Target');

    # Even if the get fails, the variable is assigned a value of none, set the flag variable accordingly
    if v_jdbc_target == 'None':
        v_any_targets = 'None';
        v_no_of_targets = 1;
    else:   
        # If the get has succeeded then set flag accordingly and obtain length of array returned by the get
        # The array length will be used to determine the HTML rowspan value

        v_any_targets ='Use v_jdbc_target';
        v_no_of_targets = len(v_jdbc_target);

except:

    # Setting flag and rowspan variable here as well .. belt and braces
    v_any_targets = 'None';
    v_no_of_targets = 1;

    # The exception will still display to standard out, which may cause alarm
    # So adding this message telling the user the exception is expected and can be ignored
    print "IGNORE this exception";

[WLS] Get an Offline or Online WebLogic Domain Summary Using WLST!

原文はこちら。
https://blogs.oracle.com/fmwinstallproactive/entry/wlst_offline_or_online_domain

Introduction

以前のエント「WLST Offline Script to Create Summary of WebLogic Domain」で、ドメインの管理サーバーへの接続を確立できた場合にオンラインのサマリーを収集する機能を拡張する方法を作成しました。
WLST Offline Script to Create Summary of WebLogic Domain
https://blogs.oracle.com/fmwinstallproactive/entry/wlst_offline_script_to_create
http://orablogs-jp.blogspot.jp/2013/05/wlst-offline-script-to-create-summary.html
Webを検索すると、多くのWLSTのサンプルがあり、そのサンプルには管理対象サーバーの状態やパフォーマンス、JMS、JDBCなどの情報を集約しているものがあります。この点では、目新しいものではありませんが、以下のオプション機能を持つスクリプトをご紹介します。

1. ドメインの管理サーバーに接続できない場合、ドメインのオフライン情報を自動的に収集します。

2. スクリプトが収集したデータをHTMLに描画し、javascriptを使って結果をインタラクティブな形式で読みやすく表示します。スクリーンショットの一部は以下をご覧下さい。
Screenshot showing WLST Summarizer HTML output

3. 管理対象サーバーの状態が"FAILED"の場合もしくはJVMスレッドプールで一つ以上のThread hog(thread を不必要に作るプログラム)があれば、15秒ごとに3個スレッドダンプを取得します。

Download Sample Script

サンプルスクリプトはこちらからダウンロードできます。

Instructions to Run:

1. ダウンロードしたら、ZipファイルをWebLogic Serverが動作するマシンjに展開します。readme.txtに沿って3個のディレクトリができるはずです。
  • output
  • Sample_Output
  • scripts
2. scriptsディレクトリで、開始ラッパースクリプトであるstartWLSTDomainSummarizer.sh (Unix) もしくは startWLSTDomainSummarizer.cmd (MS Windows)を見つけましょう。エディタで環境に応じたファイルを開き、環境変数を皆さんの環境に合わせて変更します。

例:startWLSTDomainSummarizer.cmdの場合
set WL_HOME=D:\product\FMW11g\wlserver_10.3
set DOMAIN_HOME=D:\product\FMW11g\user_projects\domains\MyDomain
set WLST_OUTPUT_PATH=D:\WLSTDomainSummarizer\output\
set WLST_OUTPUT_FILE=WLST_Domain_Summary_Via_MBeans.html

call "%WL_HOME%\common\bin\wlst.cmd" StartDomainSummarizer.py
(注意)WLST_OUTPUT_PATH ディレクトリの値はスラッシュ(/)(Windowsの場合は\)で終わる必要があります。スラッシュがないと、スクリプトはエラーになって動作しません。

3. シェル(Windowsの場合はコマンドライン)でラッパースクリプトを実行します。WLSTを起動し、StartDomainSummarizer.pyを呼び出すはずです。この最初のpythonスクリプトでいくつかの入力を待ち受けます。
Is your domain Admin Server up and running and do you have the connection details? (Y /N ):
Y

Enter connection URL to Admin Server e.g t3://mymachine.acme.com:7001 :
t3://localhost:7001

Enter weblogic username:
weblogic

Enter weblogic username password (function prompt 1):
welcome1
(注意:パスワードの値はコンソールに表示されません)

レスポンスに応じて、WLSDomainInfoOffline.pyもしくはWLSDomainInfoOnline.pyを呼び出します。

4. スクリプトが正常に動作したら、サマリーのHTMLファイルが指定した出力ディレクトリに生成されているはずです。

5. HTMLが正しく描画されるために、.jsファイル、.css ファイルがあり、アクセス可能であることを確認して下さい(Zipファイルの展開で作成されるアウトプットディレクトリを確認しましょう)。例えば、(Webサーバー使わずに)HTMLファイルをローカルで見るためには、HTML出力結果、jquery-ui.js、spry.js、wlstsummarizer.cssを同一ディレクトリに配置します。

Disclaimer

これはMS Windows、Linuxで動作するWebLogic Server 10.3.6のドメインに対しテストしたサンプルスクリプトです。皆様の環境でエラーが発生しないとか、期待した結果を出すことを保証できません。フィードバックはこのブログエントリのコメントにお願いいたします。WLSTコードの問題を修正するようにつとめます。

Credits

JQuery: http://jquery.com/
Spry (Adobe) : https://github.com/adobe/Spry

[JavaFX] JavaFX 1.3.1 Runtime Redistribution

原文はこちら。
https://blogs.oracle.com/javafx/entry/javafx_1_3_1_runtime

昨年のJavaFX 1.2、1.3のEnd of Lifeの発表後、OracleのJavaFX 1.xダウンロード環境の停止を数ヶ月延期して、いくつかの企業が自身のアプリケーションをJava FX 2.xへの移行を完了できるようにしました。
JavaFX 1.2 and JavaFX 1.3 EOL Announcement
https://blogs.oracle.com/javafx/entry/javafx_1_2_and_javafx
これは3月末にloadUIの新しいバージョンをリリースした、SmartBear Softwareのケースです。
What’s new LoadUI 2.5 – The Tuned Up Release
http://www.loadui.org/About-loadUI/whats-new-in-loadui-25.html
しかし、アプリケーションをJavaFX最新バージョンに移植するためのリソースを持っていなかった企業や個人開発者がまだ数多くいらっしゃることを認識しており、少なくともEOLまでに移植できないと考えています。そこで、第三者が自分のアプリケーションと共にJavaFX1.3.1ランタイムを再配布することを可能にする回避策をまとめることにしました。この策は本日から有効です。開発者に実装時間(=移行期間)を提供するため、EOLをあと数ヶ月延期することにしました。再配布の手順からわかるように、これは比較的実装が容易な回避策です。より複雑かつ時間がかかったのは、JavaFX 1.3.1の再配布を許諾するライセンスのアップデートでした。

参考資料

2013年5月7日

[Database, Big Data] Oracle R Distribution for R 2.15.2 available on public-yum

原文はこちら。
https://blogs.oracle.com/R/entry/oracle_r_distribution_for_r

Oracle R Distribution for R 2.15.2 on LinuxがOracleのパブリックyumリポジトリからダウンロードできるようになっています。
Oracle Public Yum Repository for EL5 x86_64
http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/addons/x86_64/
R 2.15.2はメンテナンスアップデートで、性能改善、よく使われる関数のメモリ使用量の削減、64bitシステム上のデータに対し利用可能なメモリの増加、ポーランド言語ユーザー向けのローカライゼーション強化、数多くの不具合修正などを含んでいます。アップデート内容の詳細はNEWSファイルの「CHANGES IN R VERSION 2.15.2」にありますので、こちらをご覧下さい。
R News
http://stat.ethz.ch/R-manual/R-devel/doc/html/NEWS.html
Oracle R Enterpriseの最新アップデート(ver. 1.3.1)はR 2.15.1とR 2.15.2の両方で動作保証しています。
Oracle R Enterprise Downloads
http://www.oracle.com/technetwork/database/options/advanced-analytics/r-enterprise/ore-downloads-1502823.html
public-yumからOracle R Distributionをインストールすると、最新のR 2.15.2をダウンロードしてきます。例えば、Oracle Linux 5では、rootでログインし、yum.repos.dへ移動してパブリックyumリポジトリ構成ファイルをダウンロードすると、必要なリポジトリが使えるようになります。
cd /etc/yum.repos.d
wget http://public-yum.oracle.com/public-yum-el5.repo
public-yum-el5.repoを編集します。
[el5_addons]
enabled=1
[el5_latest]
enabled=1
続いて、Oracle R Distributionをインストールします。



Rを始動します。 Oracle R Distribution for R 2.15.2をインストールします。


Oracle R Distributionの古いバージョン、例えばR 2.15.1をインストールする場合、単にRのバージョンをインストール時に指定すればOKです。
yum install R-2.15.1
Detailed instructions for installing Oracle R Distributionの詳細なインストール手順はOracle R Enterprise Installation and Administration Guideにありますので、そちらをご覧下さい。Oracle R Distribution for R 2.15.2 on AIX, Solaris X86およびSolaris SPARCは今後数週間のうちにOracleの Free and Open Source Softwareポータルからダウンロードできるようになる予定です。
Oracle R Distribution
https://oss.oracle.com/ORD/

[Database] New: Best Practices For Database Consolidation On Exadata Database Machine

原文はこちら。
https://blogs.oracle.com/emeavadnews/entry/new_best_practices_for_database

このホワイトペーパーでは、Exadataへ集約・統合するにあたり、システムやアプリケーションを安定性や可用性を最大化するよう、セットアップや管理におけるベストプラクティスをまとめています。ホワイトペーパーは以下のリンクからどうぞ。
Best Practices For Database Consolidation On Exadata Database Machine
http://www.oracle.com/technetwork/database/features/availability/exadata-consolidation-522500.pdf

2013年5月5日

[ADF] Why should you move to 11.1.2.4?

原文はこちら。
https://blogs.oracle.com/mobile/entry/why_should_you_move_to

すばらしいことに、昨年10月下旬にADF Mobile 11.1.2.3のリリースしてからわずか数ヶ月のうちに、弊社のエンジニアリングチームが多くの新機能を提供することをやってのけました。Shay(Shay Shmeltzer)が新機能について前のエントリで記載している通り、新バージョンに移行する理由がたくさんあります。ADF Mobileコミュニティの多くの開発者は、ADF Mobileアプリケーションへのリアルタイム通知をプッシュする方法、適切にiOSとAndroidデバイスの両方でファイルの内容を表示する方法を探してきました。この11.1.2.4では、これらの機能を提供します。
この新しいプッシュ通知のサポートに関する一つの大きな事実は、ネイティブの機能が使用されているということです。これはつまり、Apple Push Notification ServiceやGoogle Cloud Mesaging Serviceを使ってADF Mobileアプリケーションに通知をプッシュする、ということです。プロプライエタリなメッセージングアプリケーションや特殊なメッセージングアプリケーションを実装する必要がないのです。これらのプッシュ通知サービスを使い、直接任意のバックエンドサーバと通信できます。
ファイル表示のサポートは、ファイルコンテンツを表示する必要がある任意のアプリケーションにとって重要なものです。ADF Mobile 11.1.2.3ではLocalHTML機能を使いiOSデバイスのファイルを表示しましたが、Android用のソリューションはありませんでした。アプリケーションでPDFやWordドキュメントといったファイルコンテンツを表示する必要がある場合、11.1.2.4に移行するべきです。
もう一つのすばらしい機能は、「アプリケーションアーカイブ」のサポートです。これはISVやSIパートナーにとって、再利用性のあるすばらしい機能です。パートナー様は全てのアプリケーション・アーティファクトを含むアプリケーションアーカイブを作成するだけで、様々なエンゲージメントでアプリケーションを再利用することができます。個々のお客様それぞれにとって、SIパートナーやお客様自身がアプリケーションアーカイブを拡張して新機能を追加し、個々の企業で展開することができます。お客様がアプリケーションに証明書とプロファイル、必要に応じてほとんどの3rdパーティーのモバイルアプリケーション管理パッケージを使って署名する必要がある場合、この機能もまた必要です。
最後に、数多くの性能改善が含まれています。例えば、ListViewの性能に関する機能向上です。
11.1.2.4へのアプリケーションの移行手順は以下のリリースノートをご覧下さい。
Oracle JDeveloper and Application Development Framework (ADF) 11g Release 2 (11.1.2.4.0)
Known Issues for JDeveloper and ADF 11g Release 2 (11.1.2.4.0)
Migration > ADF Mobile Migration
http://www.oracle.com/technetwork/developer-tools/jdev/documentation/11-124-rn-1942343.html#11.1.2.4.0ShermanUpdate4-ReleaseNotesREPOSITORY-Migration
しかし、今11.1.2.4へ移行する理由が他にもいくつかあります。これらを確認していただき、ご自身にあてはまるかどうかを確認して下さい。
  • Appleは2013年5月1日から「AppStoreにUpする全てのアプリケーションはiPhone 5のフォームファクターを適切にサポートしなければならない」と発表しています。
    Make Your Apps Look Great on the Retina Display and iPhone 5
    https://developer.apple.com/news/?id=3212013b
    iPhone 5の画面サイズは1136x680ピクセルで16:9の比率ですが、以前のiPhoneの画面サイズは960x680ピクセルで4:3の比率でした。iPhone 5がリリースされる前に開発された全てのアプリケーションと同様に、11.1.2.3を使って開発されたADF Mobileアプリケーションはレターボックス・フォーマットで表示されました。これはもyはや新しいAppleのUIガイドラインに適合しません。そのため、ADF MobileアプリケーションをApple AppStoreに投稿しようと考えている場合は、iPhone 5のフォームファクターを適切にサポートする11.1.2.4に移行する必要があります。
  • 11.1.2.4にはiPad miniのサポートも追加されていますので、iPad miniでアイコンおよびスプラッシュスクリーンを指定することができます。
  • Xcode 4.5以後のiOSシミュレータを使ってテストしたい場合、11.1.2.4に移行する必要があります。11.1.2.3ではデバイスを回してもアプリケーションが回転しない、という既知の問題があるためです。
  • JDeveloperおよびADF Mobile 11.1.2.4は最新のモバイルSDK(Xcode 4.5/iOS 6および最新のAndroid開発ツール/SDK)での動作が保証されています。そのため、これらの新しいSDKを使いたい場合には、11.1.2.4に移行する必要があります。
  • 11.1.2.4で多くのバグが修正されています。現在ADF Mobile 11.1.2.3でバグに当たっている場合、修正されたバグのリストをチェックして下さい。
    Bugs Fixed in 11.1.2.4.0
    http://www.oracle.com/technetwork/developer-tools/jdev/jdev-11gr2-nf-404365.html#11gR2%2811.1.2.4.0%29NewFeatures-BugFixList
ADF Mobile開発チーム全体を代表して、皆様のADF Mobileに対する継続的なサポートに感謝します。みなさまからのフィードバックを是非お寄せ下さい。

[ADF] New Oracle ADF Mobile 11.1.2.4 is Available

原文はこちら。
https://blogs.oracle.com/mobile/entry/new_oracle_adf_mobile_11

Oracle ADF Mobileの新バージョン11.1.2.4の発表ができて嬉しく思っています。これは新しいOracle JDeveloper 11.1.2.4の拡張機能としてOTNからダウンロードできます。
Release Downloads for Oracle JDeveloper 11g (11.1.2.4.0)
http://www.oracle.com/technetwork/developer-tools/jdev/downloads/index.html
モバイル向けの開発者にとって、このリリースは主要な新機能だけでなく、アーキテクチャへのアップデートも含むものです。
新機能を紹介する動画は以下からどうぞ。
What's New: ADF Mobile 11gR2 Update 4 (11.1.2.4.0)
http://download.oracle.com/otn_hosted_doc/jdeveloper/11gdemos/ADFMobile11124/ADFMobile11Overview.html
以下にこのリリースのハイライトをまとめました。
  • Push Notification
    ADF MobileアプリケーションはAppleとGoogleの通知サービスを使い、通知を受信できるようになりました。
  • Badging
    iOSアプリケーション向け通知機能に関連して、アプリケーションが新しいメッセージを受信したことを示すよう、アプリケーション上に小さなオーバーレイアイコンを付けられるようにしました。
  • Display files
    新しいデバイス機能メソッドを使うと、ファイルをアプリケーションの一部として表示することができます。iOSデバイスでファイルをプレビューすることができます。
  • Application Archive Packaging
    アプリケーションをパッケージし、お客様に配布することができます。証明書を使ってアプリケーションに署名し、配信チャネルを通じて配布することができます。モバイル向け製品を開発されているISVの方々にとって非常に有用な機能です。
  • Apache Cordova 2.2. Support
    デバイス機能の統合のため、phonegapからオープンソースのCordova 2.2ソリューションにアップグレードしました。これはより新しいインタフェースを用いてデバイスを統合するための多くの選択肢を広げます。
    Apache Cordova 2.2
    http://cordova.apache.org/
  • Mobile SDKs update
    拡張機能をアップデートし、最新のAndroidおよびiOSのSDKをサポートしました。
新機能がモバイル向けアプリケーション開発プロジェクトにおいて役立つことを期待しています。是非フィードバックをお願いします。

2013年5月4日

[Java] Integrating WebSockets and JMS with CDI Events in Java EE 7

原文はこちら。
https://blogs.oracle.com/brunoborges/entry/integrating_websockets_and_jms_with

Web開発について検討する場合、最近ではWebSocketも検討されているのではないでしょうか。そして、手に入れられるものであれば何でも統合してみたいと思われていることでしょう。これを超えたクールなもの、例えばJMS 2.0のようなクールなモノをひっさげてJava EE7がやってきます。そしてあなたは不思議に思うことでしょう。自身のWebサイトに接続されているすべてのWebSocketセッションに対してどうやって非同期メッセージを送ることができるのだろう、と。サーバーからのプッシュ型で、ポーリングなしで、本格的なやつです。
答えは非常にシンプルで、CDIを使うことです。またこれはJava EEの魔法の糊としても知られています。CDIを使うと、明らかにアプリケーションと異なる部分間での相互通信を開発者は構築することができます。WebSocketアプリケーションがJMSを使ってメッセージを送受信できるようにするためのすべての手順をたどっていきましょう。

1 - Creating the WebSocket Server Endpoint

まず、クライアントからメッセージを受信するWebSocketのサーバーエンドポイントを構築する必要があります。また、サーバープッシュを使いインバウンドのJMSメッセージペイロードを用いて非同期でクライアントに通知する必要もあります。
@Named
@ServerEndpoint("/websocket")
public class WebSocketEndpoint implements Serializable {
 // this object will hold all WebSocket sessions connected to this WebSocket
 // server endpoint (per JVM)
 private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>()); 
ここで、3個の主要なメソッドをこのWebSocketに追加する必要があります。
@OnOpen public void onOpen(final Session session) { sessions.add(session); } 
@OnMessage public void onMessage(final String message, final Session client) { ... } 
@OnClose public void onClose(final Session session) { sessions.remove(session); }
onOpenonCloseで、このエンドポイントに接続しているすべてのユーザーセッションを管理することに注目して下さい。後でセッションをonMessageの中で使う方法をご覧頂きます。ここでは、JMS Queueにメッセージを送信するSessionBeanを作成しましょう。

2 - Creating the SessionBean to send JMS messages

WebSocketおよびJMSの仕様の両方で定義されている制限により、WebSocketのエンドポイントの内部で直接JMSオブジェクトを作成することはできません。そのため、SessionBeanを作成して、インバウンドWebSocketメッセージをJMS Queueに転送する必要があります。以下のようにQueueSenderSessionBeanというクラスを作成します。
@Named
@LocalBean
@Stateless public class QueueSenderSessionBean { ... }
このSessionBeanは@Statelessであり、CDIコンテキスト(@Named)の一部でもあります。そして、インタフェースを持たないので、@LocalBeanです。それでは、ビジネスメソッド(sendMessage)を追加しましょう。
public void sendMessage(String message) { ... } 
かなりわかりやすいですね。JMS 2.0のすごいことの一つは、宛先へのメッセージ送信がシンプルである、ということです。そのために、2個のオブジェクトを注入する必要があります。
@Resource(mappedName = "jms/myQueue")
private Queue myQueue;
@Inject private JMSContext jmsContext; 
JMSContextはJMS APIに追加された、新しいクラスの一つです。ドキュメントは以下からどうぞ。
Interface JMSContext
http://jms-spec.java.net/2.0/apidocs/javax/jms/JMSContext.html
これはConnectionとSessionをカプセル化し、デフォルトのConnectionFactoryを使いますが、これらはすべてのJava EE 7認定アプリケーションサーバーが提供するリソースです。
Interface Connection
https://jms-spec.java.net/2.0/apidocs/javax/jms/Connection.html
Interface Session
https://jms-spec.java.net/2.0/apidocs/javax/jms/Session.html
Interface ConnectionFactory
https://jms-spec.java.net/2.0/apidocs/javax/jms/ConnectionFactory.html
次は、ロジックを以前追加したメソッドに追加する必要があります。
jmsContext.createProducer().send(myQueue, message);
そして、SessionBeanに手をつけましょう。次は、SessionBeanとWebSocket間に糊を追加して、JMS宛先にメッセージを送信します。

3 - Forwarding an incoming WebSocket message to a JMS destination

これはまったく簡単です。やるべきことは、SessionBeanをWebSocketに注入し、エンドポイントのonMessage内でsendMessageメソッドを呼び出すことです。まず注入から始めますが、不具合のためにコンストラクタinjectionを実行する必要があります。WebSocketサーバーエンドポイントクラスのWebSocketEndpointを開き、以下のフィールドを追加します。
private QueueSenderSessionBean senderBean;
以下のコンストラクタを追加します。
@Inject
 public WebSocketEndpoint(QueueSenderSessionBean sb) {
     this.senderBean = sb;
}
次はシンプルにonMessage内からメソッドを呼び出します。
senderBean.sendMessage(message);
このアプリケーションの最初の部分はこれで完了です。このコードを使ってWebSocketクライアントからJMS宛先にメッセージを送信することができます。では次にこの逆をやってみましょう。JMS QueueからWebSocketクライアントにデータを送信してみましょう。

4 - Listening to a JMS Destination with a MessageDriven Bean

(面白い事実)まだご存知ない開発者もいらっしゃいますが、JMS APIはMessageDrivenアノテーションを指定しません。その代わりに、EJB仕様の一部であるため、JMSのみならず他の多くのもので利用できます。素晴らしいApache TomEEからDavid Blevinsが気付き、EJBの仕様に小さな変更を提案しました。その提案とは、リソースアダプタがmessagelistener-typeを提供するために、コネクタを必要とするというものです。しかし彼の提案では、MDBを使って様々なものをリスニングできるはずで、リスナーインタフェースはオプションであるべきだ、と言っています。一つの例は、Telnetコマンドのリスニングです。実にすばらしい!しかし、ここではJMS固有のユースケースに着目しましょう。
Annotation Type MessageDriven
http://docs.oracle.com/javaee/6/api/javax/ejb/MessageDriven.html
David Blevins (Twitter)
https://twitter.com/dblevins
Apache TomEE
http://tomee.apache.org/
Modernize Connector/MDB
https://java.net/jira/browse/EJB_SPEC-60
dblevins / mdb-improvements (GitHub)
https://github.com/dblevins/mdb-improvements
WebSocketクライアントからQueue宛先にメッセージを発行することができるようになっているので、処理のあと、どこかに転送する必要があります。JMS MDBを作り始めましょう(覚えておいて欲しいのは、すべてのMDBが暗黙のうちにJMSと関係があるわけではありません)。JMS ResourceAdapterコネクタが必要とするMessageListenerインタフェースを実装しましょう。
Interface MessageListener
http://docs.oracle.com/javaee/6/api/javax/jms/MessageListener.html
@Named
@MessageDriven(mappedName = "jms/myQueue")
public class WebSocketMDB implements MessageListener {
    @Override
    public void onMessage(Message msg) { ... }
}
これはすべてのJMS MDBの基本的なコードです。これから魔法をかけていきましょう。

5 - Firing CDI events with the JMS Message payload

仕様の制限のために、WebSocketサーバーのエンドポイントから直接JMS宛先をリスニングできないことをお話したことを覚えてますでしょうか。まぁ、実際には違うテクニックを使えばできるのですがね。CDI Eventについて聞いたことがないのであれば、このチュートリアルを進める前に以下をお読み下さい。
Using Events in CDI Applications (The Java EE 6 Tutorial)
http://docs.oracle.com/javaee/6/tutorial/doc/gkhic.html
Working with Events in CDI
https://netbeans.org/kb/docs/javaee/cdi-events.html
Decoupling event producers and event consumers in Java EE 6 using CDI and JMS (Juliano Viana)
https://weblogs.java.net/blog/jjviana/archive/2010/04/14/decoupling-event-producers-and-event-consumers-java-ee-6-using-cdi-a
読み終えましたか?それでは進めましょう。まず、Event修飾子です。WSJMSMessageアノテーションをプロジェクト内に作成します。
@Qualifier
  @Retention(RetentionPolicy.RUNTIME)
  @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
  public @interface WSJMSMessage {}
定義した修飾子を使い、CDIは出力されたイベントをオブザーバーオブジェクトに接続することができます。WebSocketMDBに戻って、先ほど作成した修飾子を使って、Eventディスパッチャーを追加します。
Interface Event<T>
http://docs.oracle.com/javaee/6/api/javax/enterprise/event/Event.html
@Inject
@WSJMSMessage
Event<Message> jmsEvent; 
ロジックをonMessageメソッドに追加しましょう。
jmsEvent.fire(msg);

6 - Listening to CDI events within the WebSocket server endpoint

これがこの記事のサーバー側の最後のパートです。次はクライアント側でJavascriptのコード記述方法をご覧頂きます。Messageペイロードを使って、MDBが出力したCDIイベントをリスニングしましょう。再度WebSocketEndpointクラスを開き、以下のメソッドを追加しましょう。
public void onJMSMessage(@Observes @WSJMSMessage Message msg) {
     try {
         for (Session s : sessions) {
             s.getBasicRemote().sendText("message from JMS: " + msg.getBody(String.class));
         }
    } catch (IOException | JMSException ex) {
            Logger.getLogger(WebSocketEndpoint.class.getName()).log(Level.SEVERE, null, ex);
    }
}
@Observesと以前定義した@WSJMSMessage修飾子に着目しましょう。これでCDIにMDBが発したイベントをリスニングするように指示するのです。
Annotation Type Observes
http://docs.oracle.com/javaee/6/api/javax/enterprise/event/Observes.html

7 - Client-side Javascript to connect with the WebSocket server endpoint

これがしばらくの間Internet界隈に出てきましたが、Java固有でもJava EE固有でもありません。とはいえ、とにかく基本的にこれです。
// note the final path is the same defined inside WebSocketEndpoint class at @ServerEndpoint
websocketSession = new WebSocket('ws://' + document.location.host + '/your-app-context-root/websocket');
このサンプルで使っているJavascriptとHTMLインタフェースは以下のリンクからどうぞ。
brunoborges / javaee7-jms-websocket-example (GitHub)
Javascript
https://github.com/brunoborges/javaee7-jms-websocket-example/blob/master/src/main/webapp/myapp.js
HTMLインタフェース
https://github.com/brunoborges/javaee7-jms-websocket-example/blob/master/src/main/webapp/index.html

Conclusion

この記事がJava EE 7での開発を始めるにあたって役立つことを期待しています。そして。CDIやWebSocket、JMS、EJBとの統合の可能性を理解する上で役立つことを願っています。これらはこのエントリの主要なポイントです。
  • WebSocketクライアントと非同期通信できること(session.getAsyncRemote()を使って非同期でメッセージを送信できるわけですけれども)
  • アプリケーションの任意の場所でWebSocketクライアントに対しサーバープッシュすることができる、ということ
  • JMS Topicを使って、クラスタ全体でWebSocketクライアントセッションへのサーバーからプッシュされた通信をスケールすることができる、ということ
    これはおそらくこの設定における最も興味深いところの一つでしょう。QueueのかわりにTopicを使うと、クラスタ全体でアプリケーションに接続している全てのWebSocketセッションに対し、データをプッシュすることができます。Webサーバーあたり、およそ6万4000個のクライアントセッションという限界があり、この例では静的なsynchronized Setを使ってこれらの参照を保持しています。クラスタの場合を想像してみましょう。これをクラスタ化されたTopicのサブスクライバに変えると、サーバーからプッシュされたデータをスケールアップすることができます。
このプロジェクトのソースコードはGitHubのjavaee7-jms-websocket-exampleにUpしてあります。
Bruno Borgesのリポジトリ(GitHub)
https://github.com/brunoborges/
brunoborges / javaee7-jms-websocket-example (Java EE 7 Example for JMS and WebSockets integration)
https://github.com/brunoborges/javaee7-jms-websocket-example/

2013年5月1日

[BPM] How to Enable Web Forms Manually

原文はこちら。
https://blogs.oracle.com/middleware/entry/bpm_web_forms_not_enabled

BPMの環境を11.1.1.6から11.1.1.7 (PS6) にアップグレードしました。BPM Composerにたくさんの機能が追加されているため、色々話題に事欠かないわけですが、Web Formのような新機能で何か作りたかったので、Web Formを利用する簡単なBPMプロセスを実装してみました。ヒューマンタスクの作成までは完了したのですが、Web Formを追加しようとしたところ、緑のプラスボタンが使えませんでした。

これがアップグレードの一環での問題なのか、何か手順を間違えたのかわかりませんでしたが、別の正常に動作しているインスタンスとちょっと見比べたところ、WebLogic管理コンソールで見る限り、frevvoアプリケーションがデプロイされていないことがわかりました。frevvoアプリケーションを手作業でインストールすると、Web Formが使えるようになりました。なお、frevvoアプリケーションの存在場所は以下の通りです。
$MW_HOME/Oracle_SOA1/soa/applications/frevvo.ear

[misc.] OTN Forum software is going to be upgraded in May 2013

原文はこちら。
https://blogs.oracle.com/opal/entry/otn_forum_software_is_going

ご存知ない方のためにお知らせです。Oracle Technology Network Forumのソフトウェアを今週末アップグレードする予定です。
OTN Discussion Forums
https://forums.oracle.com/forums/main.jspa?categoryID=84
古いソフトウェアは老朽化しており便利な機能を使えないため、このアップグレードはすばらしいことです。現行のフォーラムは週末にかけてRead Onlyになる予定です。
新バージョン立ち上げにおいて、最小限の機能がサポートされる予定です。アップグレード版が安定した時点で、追加の機能が有効化される予定になっています。
移行プロジェクトの一環として、あまり使われていないフォーラムや廃止されたフォーラムは削除される予定です。いくつかのカテゴリが作り直される予定です。

移行に関する詳細情報は以下のリンクをご覧下さい。
Thread: We are upgrading OTN Forums! This is the place for questions and comments.
https://forums.oracle.com/forums/thread.jspa?threadID=2519003
ご承知頂きたいのは、このフォーラムのソフトウェアはJiveを使っている、ということです。つまり、パッケージアプリケーションであって、リクエストがあった機能全てが魔法のように実現するわけではありません。しかも、良くも悪くも、Jiveが "forums" を "spaces" と名前を変えていて、どうもこれを変更できないようです。

[訳注]
具体的には以下の予定でサービス停止するようです。
  • フォーラム停止期間:5月4日13時(JST)/5月3日21時(PDT)から数時間
  • 新インフラでのサービス再開:5月6日(PDT)、時間は未定。
  • 新インフラでのサービス再開までは、Read Onlyでのサービス提供(書き込み不可)

[Java] JSR 356, Java API for WebSocket

原文はこちら。
https://blogs.oracle.com/java/entry/jsr_356_java_api_for

Java ChampionのJohan Vosが寄稿した「JSR 356, Java API for WebSocket」がOTNのJavaページにUpされています。この記事では、WebSocketをアプリケーションに統合する方法を紹介しています。Java EE 7プラットフォームの構成要素であるJSR 356では、Java開発者がJavaサーバーサイド、クライアントサイド両方のアプリケーションにWebSocketを統合したい場合に利用可能なAPIを取り決めています。APIは非常に柔軟で自由に開発者がWebSocketベースのアプリケーションを作成でき、しかも基礎となるWebSocketの実装に依存しませんので、ベンダーロックインを避けることができます。また、ライブラリやアプリケーションサーバーの選択肢が増える、ということもあります。WebSocket実装を使うWebクライアントやネイティブクライアントであればJavaで構築したバックエンドシステムと簡単に通信することができます。

Java EE 7標準の一端として、全てのJava EE 7準拠アプリケーションサーバーはJSR 356に従うWebSocketプロトコルの実装を有することでしょう。Vosは以下のように説明しています。
「WebSocketクライアントとサーバーが接続を確立すると、両者は対称の関係になるため、クライアントAPIとサーバーAPIの違いは微少なものです。JSR 356はJavaクライアントAPIも定義していますが、これはJava EE 7で必要な完全なAPIのサブセットです。
WebSocketメッセージとしてJavaオブジェクトを送受信できるため、Java API for WebSocketは非常に強力です、
基本的に、異なる3種類のメッセージがあります。
  • テキストベースのメッセージ
  • バイナリメッセージ
  • WebSocket接続のためのPongメッセージ(訳注:pingに対する応答メッセージ)
インターフェース駆動のモデルを使う場合、各セッションは3種類のメッセージのそれぞれに対して多くとも1個のMessageHandlerを登録することができます。
アノテーション駆動モデルを使う場合、各種類のメッセージに対し、1個の@onMessageアノテーションを付けたメソッドが許可されています。アノテーションを付けられたメソッドにおいて特定のメッセージコンテキストに対して許可されているパラメータはメッセージの種類によって変わります。」
記事は以下のリンクからどうぞ。是非WebSocketをアプリケーションに統合する方法を知って頂ければと思います。
JSR 356, Java API for WebSocket (by Johan Vos)
http://www.oracle.com/technetwork/articles/java/jsr356-1937161.html

[Java] Java EE 7 Platform Completes the JCP Final Approval Ballot

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/java_ee_7_platform_completes

Java EE 7 PlatformおよびWeb ProfileのJSRがJCP Executive CommitteeのFinal Approval Ballot(最終承認投票)を圧倒的な賛成多数で通過したことをお伝えできることを嬉しく思っています。これで全てのJava 7のJSRのJCPの承認プロセスを終了しました。
このJava EE 7 PlatformのリリースはOracleの管理下での最初のリリースですが、パートナーのRed Hat(CDIとBean Validation)とIBM(Batch)がリードしてくださったJSRを含む、次の14個のJSRと9個のメンテナンスリリース(MR)からなっています。これらのJSRのうち、WebSocket、JSON、Concurrency、BatchのJSRは、このリリースで初めてJava EEプラットフォームに登場しました。

JSR

  • Java Platform, Enterprise Edition 7 (JSR 342)
  • Concurrency Utilities for Java EE 1.0 (JSR 236)
  • Java Persistence 2.1 (JSR 338)
  • JAX-RS: The Java API for RESTful Web Services 2.0 (JSR 339)
  • Java Servlet 3.1 (JSR 340)
  • Expression Language 3.0 (JSR 341)
  • Java Message Service 2.0 (JSR 343)
  • JavaServer Faces 2.2 (JSR 344)
  • Enterprise JavaBeans 3.2 (JSR 345)
  • Contexts and Dependency Injection for Java EE 1.1 (JSR 346)
  • Bean Validation 1.1 (JSR 349)
  • Batch Applications for the Java Platform 1.0 (JSR 352)
  • Java API for JSON Processing 1.0 (JSR 353)
  • Java API for WebSocket 1.0 (JSR 356)

MR

  • Web Services for Java EE 1.4 (JSR 109)
  • Java Authorization Service Provider Contract for Containers 1.5 (JACC 1.5) (JSR 115)
  • Java Authentication Service Provider Interface for Containers 1.1 (JASPIC 1.1) (JSR 196)
  • JavaServer Pages 2.3 (JSR 245)
  • Common Annotations for the Java Platform 1.2 (JSR 250)
  • Interceptors 1.2 (JSR 318)
  • Java EE Connector Architecture 1.7 (JSR 322)
  • Java Transaction API 1.2 (JSR 907)
  • JavaMail 1.5 (JSR 919)
このプロセスに貢献してくださったコミュニティメンバーの皆様に感謝申し上げます。特にExpert Groupの皆様、java.netのJSRプロジェクトのメンバーの皆様(JCP transparencyプログラムの下でのオープンなオペレーション)、Adopt-a-JSRプログラムに参加頂いたJava User Groupのメンバーの皆様、そして私たちのアウトリーチ調査に参加頂いた皆様に感謝申し上げます。
Java EE Platform Specification > Other Java EE Specifications
https://java.net/projects/javaee-spec/pages/Home#Other_Java_EE_Specifications
Transparency and Community Participation in Java EE 7 (Arun Gupta, Miles to go ...)
https://blogs.oracle.com/arungupta/entry/transparency_and_community_participation_in
Adopt a JSR Program
https://java.net/projects/adoptajsr/pages/Home
Java EE 7 Survey Results! (Reza Rahman's Blog)
https://blogs.oracle.com/reza/entry/java_ee_7_survey_results
数週間以内にJava EE 7のGlassFishリファレンス実装のリリースがありますので、お楽しみに。