2012年9月29日

[OSB, WLS] OSB, Service Callouts and OQL

原文はこちら。
https://blogs.oracle.com/ATeamExalogic/entry/osb_service_callouts_and_oql

Oracle Fusion Middlewareご利用のお客様はサービスエンドポイントの仮想化のためにOracle Service Bus (OSB)を使い、ステートレスなサービスオーケストレーションを実装しています。OSBの性能やスピードの背後に複数の鍵となる設計・実装があり、高負荷でのアプリケーションの性能や振る舞いに影響を与えることがあります。OSBでよく使われる機能の一つとして、サービスコールアウトというパイプライン中のアクションがあります。これはメッセージを修飾したり、一つの単純なオーケストレーションで複数のサービスを呼び出すために使います。内部実装を知らずにこの機能を使いすぎると、ひどい問題を招くことがあります。

この一連のエントリでは、OSBの内部を掘り下げて考えます。高負荷時のサービスコールアウトの利用に関連する問題を、スレッドダンプやThreadLogicやOQL(Object Query Language)を使ってのヒープダンプ分析により診断し、解決していきます。
第1部では主として、ルーティングとサービスコールアウトを実装する上でOSBが内部で使用しているスレッディングモデルを取り扱います。
OSB, Service Callouts and OQL - Part 1
http://allthingsmdw.blogspot.jp/2012/09/osb-service-callouts-and-oql-part-1.html
第2部では、OSBサーバのスレッドダンプ分析を掘り下げ、サービスコールアウトに関連するスレッドの問題を発見し、ヒープダンプやOQLを使って、関連するプロキシサービスや関連するビジネスサービスを特定します。
OSB, Service Callouts and OQL - Part 2
http://allthingsmdw.blogspot.jp/2012/09/osb-service-callouts-and-oql-part-2.html
第3部、最終回では、OSBサーバの停止に関連するサービスコールアウトを避けるための方法を取り扱います。ソリューションに入る前に、WebLogic Serverのワークマネージャについて簡潔に説明する必要があると考えています。
OSB, Service Callouts and OQL - Part 3
http://allthingsmdw.blogspot.jp/2012/09/osb-service-callouts-and-oql-part-3.html
詳細情報は、Part 1のエントリをご覧下さい。

2012年9月27日

[misc] ePub形式とmobi形式でWebLogic Server 12cの日本語ドキュメントを提供開始しました

WebLogic Server 12cの日本語ドキュメントが、ePub形式、mobi形式でも提供されていること、ご存知でしたか?「英語版はあるのに日本語版はまだないの?」と思ってらっしゃったみなさんには、お待たせしましたという感じでしょうか。
OTN-Jのページで、WebLogic Serverのドキュメントを見るために、以下のリンクを開くと、下図のような画面が現れますよね。
Oracle WebLogic Server Product Documentation
http://www.oracle.com/technetwork/jp/middleware/weblogic/documentation/index.html

この画面の黄色でマークした部分をクリックすると、以下のようなページが現れ、mobi形式、ePub形式のドキュメントをダウンロードできます。
Oracle Weblogic Server 12c リリース1 (12.1.1)
http://docs.oracle.com/cd/E28613_01/ebooklist/ebooklist.html


現在はWebLogic Server 12cのみですが、今後別の製品ドキュメントも電子書籍リーダで読める形式にしていくとのことですので、ご期待下さい。

2012年9月25日

[misc] GlassFish T-shirt at JavaOne 2012

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

GlassFish Tシャツデザインコンテストに12点応募いただきました。
Create a Design for the GlassFish Community T-shirt
http://java.net/jira/browse/GLASSFISH-18963
Help Design GlassFish T-shirt ? (The Aquarium)
https://blogs.oracle.com/theaquarium/entry/help_design_glassfish_t_shirt
各々のデザインはユニークで非常に考え抜かれていました。とはいえ、1つだけ選ばなければなりません。で、優勝者はこちらのデザインです!

コンテストに参加頂いた皆さん、どうもありがとうございます。Tシャツはお目にかかる時のために皆さんの分を取り置いてあります。

コミュニティによる、コミュニティのためにデザインされたTシャツでコミュニティに提供します。

デザインやコンセプトについてもっと知りたいですか?優勝者のブログをどうぞ。
GlassFish City Revisited (Enterprise Software Development with Java, by Markus Eisele)
http://blog.eisele.net/2012/08/glassfish-city-revisited.html
では、どこでこのTシャツを入手できるのでしょう?これらのTシャツは以下のイベントに参加されるコミュニティメンバーに手渡されます。
Tシャツ以外に、コミュニティイベントへ参加する9つの理由がありますよ。
NINE Great Reasons to Attend the GlassFish Community Event at JavaOne 2012
https://blogs.oracle.com/theaquarium/entry/nine_great_reasons_to_attend
このイベントに参加するためには、JavaOneのパスが必要ですので、コンファレンスへの登録をお忘れ無く。Full Conference Passは必ずしも必要ではなく、ご利用頂ける全てのオプションで参加頂けます。
JavaOne 2012の登録
http://www.oracle.com/javaone/register/packages/index.html
JavaOne Packageの比較
http://www.oracle.com/javaone/register/additional-packages/index.html#tab
Java EEの詳細やJavaOne 2012でのGlassFishのプレゼンスをもっと知りたい方は、以下のリンクをどうぞ。
Overview of the Java EE and GlassFish activities during JavaOne 2012
http://glassfish.java.net/javaone2012/
JavaOneでお会いできるのを楽しみにしています。

[WLS] Wildcard SSL certificate support in Weblogic

原文はこちら。
https://blogs.oracle.com/sravansarraju/entry/wildcard_ssl_certificate_support_in

Weblogic Serverはデフォルトではワイルドカードエントリ(例:*.example.com)を持つSSL証明書を検証しません。 この影響で、こうした種類の証明書を含む全てのSSLハンドシェイクがデフォルトで拒否されます。
これをきれいに解決するには、カスタムホスト名検証を使用して、weblogic.security.utils.SSLWLSWildcardHostnameVerifierクラスを使うように指示することです。
これを実現するには以下の手順を踏みます。
  1. WebLogic Server管理コンソールを開く
  2. 画面の左側の[環境]>[サーバー]をクリック
  3. 管理サーバを選択
  4. SSLタブに移動
  5. ロック&編集をクリック(開発者モードであれば不要です)
  6. スクロールダウンして[詳細]をクリック
  7. [ホスト名の検証]を「カスタム・ホスト名の検証」に変更
  8. [カスタム・ホスト名の検証]の欄に、以下を指定する
    weblogic.security.utils.SSLWLSWildcardHostnameVerifier
  9. WebLogic Serverを再起動

[Exalogic] If you want to learn all about Exalogic in 6 minutes, watch this demo!

原文はこちら。
https://blogs.oracle.com/exalogic/entry/if_you_want_to_learn

最新のExalogicのデモをご覧になったことがないなら、こちらをクリックして下さい!
Oracle Exalogic Elastic Cloudのデモ動画
http://www.oracle.com/pls/ebn/swf_viewer.load?p_shows_id=12641667&p_referred=0&p_width=1000&p_height=675
弊社の優れたマーケティングチームが先頃、新しい6分のFlashデモを作成しました。このデモでは、ExalogicのIaaS管理UIを説明しています。この製品への数年にわたる投資の結果、ラリー·エリソンがOracle OpenWorld 2010で発表した完全なprivate-cloud-in-a-boxビジョンを実現する最終段階に入りました。このFlashのデモ動画で、Exalogicの何がそんなにすごいのか、なぜ我々の業界の変革を推進しようとしているのか、をわかりやすく説明しています。まだご覧になっていない場合は是非ご覧下さい。Exalogicは、非常に魅力的なパフォーマンスだけではないのです。

[ADF] Free Version of Oracle Application Development Framework (Oracle ADF)

原文はこちら。
https://blogs.oracle.com/smuenchadf/entry/free_version_of_oracle_application


ようやくお話することができてうれしいです。お待たせしました、ついにプレスリリースが出ました。
Oracle ADF EssentialsはOracle Application Developement Frameworkからのコアテクノロジーの無料パッケージです。これを使って、ライセンスコストを気にせずにADF Business CompoentやADF Controller、ADF Binding、ADF Faces Rich Client Componentを含むアプリケーションの開発やデプロイが可能です。
Oracle ADF Essentials
http://www.oracle.com/technetwork/developer-tools/adf/overview/adfessentials-1719844.html
Oracle JDeveloperとOracle Enterprise Pack for Eclipseの両方でご利用頂けます。視覚的かつ宣言的な開発体験をどうぞ。Oracle ADF EssentialsはオープンソースのGlassFish Serverにアプリケーションをデプロイするための具体的な手順と証明書が付属していますが、ライセンスはそのサーバに限定されません。
詳細情報やダウンロード(たった20MB)は、OTNのOracle ADF Essentialsのページからどうぞ。

2012年9月24日

[WebCenter] Webcast Q&A: Hitachi Data Systems Improves Global Web Experiences with Oracle WebCenter

原文はこちら。
https://blogs.oracle.com/webcenter/entry/webcast_q_a_hitachi_data

先週木曜日(日本時間の金曜未明)、WebCenter in Action Webcastシリーズの第3回、"Hitachi Data Systems (HDS) Improves Global Web Experiences with Oracle WebCenter"を開催しました。HDSよりSean Mattson、OracleのパートナーであるLingotekからRob Vandenbergを迎え、Oracle WebCenterがHDSの外部向けWebサイトをどうやって動かしているのか、HDSのお客様とのシームレスな体験をどうやって提供しているのか、ということを披露頂きました。
WebCenter in Action Webcast
https://blogs.oracle.com/webcenter/entry/www.webcenterinaction.comHitachi Data Systems Improves Global Web Experiences with Oracle WebCenter
http://www.oraclepartnerevent.com/2012/webcenter-sept-13/
見逃した方のために、以下にQ&Aをまとめました。

Sean Mattson(Hitachi Data Systems) とのQ&A

質問回答
プラットフォームの展開で何か問題になったことはありませんでしたか? Lingotekのオンプレミスインストールの最初の企業の一つということで、いくつか課題がありましたし、WebCenterプラットフォームにはカスタム機能がたくさんあります。はじめは、Lingotekとの取り組みで反復や一進一退が数多くありました。お互いに助け合い、多くのことを学び、最後にはすべての問題を解決し、HDSのための非常に魅力的なソリューションを展開することに成功しました。
エンドユーザの最大のメリットは? グローバルで一元的にコンテンツのライフサイクルを管理し、支配することができ、同時にフィールドで更新やレビューしたり、少ないタッチポイントで増分コンテンツを発行できるため、発行プロセス全体を合理化し、簡素化できました。
ソリューションを実装している際、内部の抵抗勢力がいましたか?もしいたとすれば、どうやって打開しましたか? 懐疑論者を抵抗勢力と言うつもりはありません。実際に自動化された自動発行ソリューションを展開できましたので。解決策が例え素晴らしくても、新しいプロセスの採用が困難な場合がありますし、我々はまだ採用目標を目指しているところです。最も重要な側面の一つは、トレーニングやサポート資料が多く含まれていて、システムの機能のフィールド自身が十分と感じ自信を持ってもらうために、必要に応じて多くの種類のヘルプデスクをサポートとして提供することです。

Rob Vandenberg(Lingotek)とのQ&A

質問回答
サポート対象の言語(カナダ系フランス語、インディアン系フランス語のサポート)について何か制限はありますか? 右から左へ書く言語や、中国語、日本語、韓国語のような2バイト文字まで、Lingotekは全ての言語ペアをサポートしています。
Lingotekのソリューションは新しいWebCenter Sites 11gと統合されていますか? もちろん!実はLingotekはOracle WebCenter Sitesの最初のOVIパートナーです。
翻訳のメモリは機械翻訳の精度を向上するのに役立ちますか? Lingotekを使用する最大の長期的な戦略的利点の一つは、翻訳メモリ、または過去の人間の翻訳の蓄積です。これらの翻訳メモリ(TMs)を使って、統計的な機械翻訳エンジンを "トレーニング"して、さらに高品質にすることができます。この好循環が進行中であり、マシンと人間の翻訳の両方を堅実に改善していくでしょう。
以前共同作業した翻訳サービスプロバイダからの翻訳メモリがいまあるのですが、Lingotekソリューションにインポートして再利用することができますか? はい、Lingotekは標準に準拠しています。TMX、XLIFF形式での翻訳メモリのインポートをサポートしています。
Lingotekをプロフェッショナルな翻訳を実施するためのサービスとして使って、Lingotekのソフトウェアソリューションも使う場合、翻訳メモリを入手して自分たちで将来の追加や変更することはできますか? はい、すべてのデータは常に、あなたのものです。 Lingotekは、統合された翻訳ソフトだけでなく、プロの翻訳サービスの両方を提供することができます。すべてのコンテンツおよび翻訳メモリは、あなたのものです。
コミュニティ翻訳が成功したことを示す例を教えて欲しいのですが。 ここでのキーワードはコミュニティですね。コミュニティがあなたやあなたのコンテンツ、残りのコミュニティをケアしてくれるのであれば、コミュニティによる翻訳は有効でしょう。これまでに製品ユーザグループのコンテンツや、その他のユーザ生成コンテンツ(wikiやブログなど)において有効なユースケースを見てきました。
Webcastを見逃した方に、録画でWebCenterのライブデモをご覧頂けます。


Hitachi Data Systems Improves Global Web Experiences with Oracle WebCenter from Oracle WebCenter

[Exalogic] Exalogic 2.0.1 Tea Break Snippets - Scripting Asset Creation

原文はこちら。
https://blogs.oracle.com/ATeamExalogic/entry/exalogic_2_0_1_tea6

これまでのところ、このシリーズでは、我々はEMOC(Enterprise Manager Ops Center)のBUI(Browser-based User Interface)でのアセットの作成を取り上げてきました。しかし、Exalogic2.0.1のインストールソフトウェアでは、EMOC内で利用可能な一般的な機能のほとんどに代わるものとして、IaaSのCLIを提供しています。IaaSのCLIインタフェースはCloudUserロールを持つBUIログインユーザーに対して利用可能な機能にアクセスを提供しています。

しかしそうは言っても、このような機能がCLIから全て利用できるわけではないので、IaaS CLIはAssetsを特定のアカウント(Tenure)内で作成するために必要な機能を全て提供しています。これらのアクションは一般的でかつ繰り返すことができるので、私は、シンプルな入力ファイルを取り、アセットを作成するという簡単なスクリプトに機能をラップすることにしました。

スクリプトに従えば、私たちにアカウント内に様々なアセットを作成するための手順が表示されるので、手順を説明する以下のスクリプト内の様々な機能を使って処理します。

スクリプト内の様々な手順から、進行中のアクションを完了させるアクション間で停止するように設計されていることに気付くでしょう。このようにしている理由は、一連のアクションの中でEMOCの動作を困難にする可能性があり、我々は行動のvServerやボリュームの作成が完了する前にボリュームを接続しようとしている状況に陥る可能性があるからです。

processAssets()

この関数は、単にどんなアセットを作成する必要があるかを識別するための入力ファイルを読み取ります。入力ファイルの例を以下に記載します。これは、入力ファイルを使って1回の実行で複数のアカウント内に資産を作成できることがわかります。エントリの順序は次のように実行される関数を定義します。

入力コマンド IaaSアクション 引数
Production:Connect
  1. akm-describe-accounts
  2. akm-create-access-key
  3. iaas-create-key-pair
  4. iaas-describe-vnets
  5. iaas-describe-vserver-types
  6. iaas-describe-server-templates
  1. ユーザ名
  2. パスワード
Production:Create|vServer
  1. iaas-run-vserver
  1. vServer名
  2. vServerタイプ名
  3. テンプレート名
  4. vServerが接続するネットワーク名のリスト(コンマ区切り)
  5. 個別のネットワークのIPアドレスのリスト(コンマ区切り)
Production:Create|Volume
  1. iaas-create-volume
  1. ボリューム名
  2. ボリュームサイズ
Production:Attach|Volume
  1. iaas-attach-volumes-to-vserver
  1. vServer名
  2. ボリューム名のリスト(コンマ区切り)
Production:Disconnect
  1. iaas-delete-key-pair
  2. akm-delete-access-key
なし

connectToAccount()

connectToAccount()関数から、アセット作成の前にまず適切なアカウントに接続する必要があることがわかります。これを実現するためには、アカウントに関連付けられているIDが必要になります。akm-describe-accounts CLIコマンドを実行することで入手できます。このコマンドは全てのアカウントとIDをリストとして返します。アカウントIDがわかると、akm-create-access-keyコマンドを使ってアクセスキーを生成し、iaas-create-key-pairコマンドを使ってキーペアを生成します。

この時点で、我々は今、我々は特定の名前のアカウントにアクセスするために必要なすべての情報を持っています。

createVServer()

この関数は入力ファイルから情報を抽出し、iaas-run-vserverというCLIコマンドを使ってcServerを作成します。この関数の中身を読むと、vServerタイプ、テンプレート、ネットワークに対応する様々な入力名をとり、それらを適切なIDに変換することがわかるでしょう。このIaaS CLIはコンポーネント名で直接指示できないため、全てのIDを見つけ出す必要があります。

createVolume()

単にボリューム名とサイズを入力パラメータとし、iaas-create-volumeコマンドを実行してボリュームを作成する関数です。

attachVolume()

いま作成したところのボリューム名を引数とし、 iaas-attach-volumes-to-vserverを使ってボリュームをvServerに割り当てる前にボリュームが適切なIDを識別します。

disconnectFromAccount()

アカウントへの接続が終了すると、単にキーペアをiaas-delete-key-pairで削除し、アクセスキーをakm-delete-access-keyで削除すればよいのですが、もしSSHが必要でその後セキュアでないアクセスを許可するためにSSHDの情報を変更しない場合、キーを保持することが有用な場合があります。デフォルトでは、vServerをコマンドラインから作成する場合は、SSHアクセスのためにキーが必要です。

CreateAssets.sh

export OCCLI=/opt/sun/occli/bin
export IAAS_HOME=/opt/oracle/iaas/cli
export JAVA_HOME=/usr/java/latest
export IAAS_BASE_URL=https://127.0.0.1
export IAAS_ACCESS_KEY_FILE=iaas_access.key
export KEY_FILE=iaas_access.pub
#CloudUser used to create vServers & Volumes
export IAAS_USER=exaprod
export IAAS_PASSWORD_FILE=root.pwd
export KEY_NAME=cli.recreate
export INPUT_FILE=CreateAssets.in

export ACCOUNTS_FILE=accounts.out
export VOLUMES_FILE=volumes.out
export DISTGRPS_FILE=distgrp.out
export VNETS_FILE=vnets.out
export VSERVER_TYPES_FILE=vstype.out
export VSERVER_FILE=vserver.out
export VSERVER_TEMPLATES=template.out
export KEY_PAIRS=keypairs.out

PROCESSING_ACCOUNT=""

function cleanTempFiles() {
rm -f $ACCOUNTS_FILE $VOLUMES_FILE $DISTGRPS_FILE $VNETS_FILE $VSERVER_TYPES_FILE $VSERVER_FILE $VSERVER_TEMPLATES $KEY_PAIRS $IAAS_PASSWORD_FILE $KEY_FILE $IAAS_ACCESS_KEY_FILE
}

function connectToAccount() {
if [[ "$ACCOUNT" != "$PROCESSING_ACCOUNT" ]]
then
if [[ "" != "$PROCESSING_ACCOUNT" ]]
then
$IAAS_HOME/bin/iaas-delete-key-pair --key-name $KEY_NAME --access-key-file $IAAS_ACCESS_KEY_FILE
$IAAS_HOME/bin/akm-delete-access-key $AK
fi
PROCESSING_ACCOUNT=$ACCOUNT
IAAS_USER=$ACCOUNT_USER
echo "$ACCOUNT_PASSWORD" > $IAAS_PASSWORD_FILE
$IAAS_HOME/bin/akm-describe-accounts --sep "|" > $ACCOUNTS_FILE
while read line
do
ACCOUNT_ID=${line%%|*}
line=${line#*|}
ACCOUNT_NAME=${line%%|*}
#               echo "Id = $ACCOUNT_ID"
#               echo "Name = $ACCOUNT_NAME"
if [[ "$ACCOUNT_NAME" == "$ACCOUNT" ]]
then
echo "Found Production Account $line"
AK=`$IAAS_HOME/bin/akm-create-access-key --account $ACCOUNT_ID --access-key-file $IAAS_ACCESS_KEY_FILE`
KEYPAIR=`$IAAS_HOME/bin/iaas-create-key-pair --key-name $KEY_NAME --key-file $KEY_FILE`
echo "Connected to $ACCOUNT_NAME"
break
fi
done < $ACCOUNTS_FILE
fi
}

function disconnectFromAccount() {
$IAAS_HOME/bin/iaas-delete-key-pair --key-name $KEY_NAME --access-key-file $IAAS_ACCESS_KEY_FILE
$IAAS_HOME/bin/akm-delete-access-key $AK
PROCESSING_ACCOUNT=""
}

function getNetworks() {
$IAAS_HOME/bin/iaas-describe-vnets --sep "|" > $VNETS_FILE
}

function getVSTypes() {
$IAAS_HOME/bin/iaas-describe-vserver-types --sep "|" > $VSERVER_TYPES_FILE
}

function getTemplates() {
$IAAS_HOME/bin/iaas-describe-server-templates --sep "|" > $VSERVER_TEMPLATES
}

function getVolumes() {
$IAAS_HOME/bin/iaas-describe-volumes --sep "|" > $VOLUMES_FILE
}

function getVServers() {
$IAAS_HOME/bin/iaas-describe-vservers --sep "|" > $VSERVER_FILE
}

function getNetworkId() {
while read line
do
NETWORK_ID=${line%%|*}
line=${line#*|}
NAME=${line%%|*}
if [[ "$NAME" == "$NETWORK_NAME" ]]
then
break
fi
done < $VNETS_FILE
}

function getVSTypeId() {
while read line
do
VSTYPE_ID=${line%%|*}
line=${line#*|}
NAME=${line%%|*}
if [[ "$VSTYPE_NAME" == "$NAME" ]]
then
break
fi
done < $VSERVER_TYPES_FILE
}

function getTemplateId() {
while read line
do
TEMPLATE_ID=${line%%|*}
line=${line#*|}
NAME=${line%%|*}
if [[ "$TEMPLATE_NAME" == "$NAME" ]]
then
break
fi
done < $VSERVER_TEMPLATES
}

function getVolumeId() {
while read line
do
export VOLUME_ID=${line%%|*}
line=${line#*|}
NAME=${line%%|*}
if [[ "$NAME" == "$VOLUME_NAME" ]]
then
break;
fi
done < $VOLUMES_FILE
}

function getVServerId() {
while read line
do
VSERVER_ID=${line%%|*}
line=${line#*|}
NAME=${line%%|*}
if [[ "$VSERVER_NAME" == "$NAME" ]]
then
break;
fi
done < $VSERVER_FILE
}

function getVServerState() {
getVServers
while read line
do
VSERVER_ID=${line%%|*}
line=${line#*|}
NAME=${line%%|*}
line=${line#*|}
line=${line#*|}
VSERVER_STATE=${line%%|*}
if [[ "$VSERVER_NAME" == "$NAME" ]]
then
break;
fi
done < $VSERVER_FILE
}

function pauseUntilVServerRunning() {
# Wait until the Server is running before creating the next
getVServerState
while [[ "$VSERVER_STATE" != "RUNNING" ]]
do
getVServerState
echo "$NAME $VSERVER_STATE"
if [[ "$VSERVER_STATE" != "RUNNING" ]]
then
echo "Sleeping......."
sleep 60
fi
if [[ "$VSERVER_STATE" == "FAILED" ]]
then
echo "Will Delete $NAME in 5 Minutes....."
sleep 300
deleteVServer
echo "Deleted $NAME waiting 5 Minutes....."
sleep 300
break
fi
done
# Lets pause for a minute or two
echo "Just Chilling......"
sleep 60
echo "Ahhhhh we're getting there......."
sleep 60
echo "I'm almost at one with the universe......."
sleep 60
echo "Bong Reality Check !"
}

function deleteVServer() {
$IAAS_HOME/bin/iaas-terminate-vservers --force --vserver-ids $VSERVER_ID
}

function createVServer() {
VSERVER_NAME=${ASSET_DETAILS%%|*}
ASSET_DETAILS=${ASSET_DETAILS#*|}
VSTYPE_NAME=${ASSET_DETAILS%%|*}
ASSET_DETAILS=${ASSET_DETAILS#*|}
TEMPLATE_NAME=${ASSET_DETAILS%%|*}
ASSET_DETAILS=${ASSET_DETAILS#*|}
NETWORK_NAMES=${ASSET_DETAILS%%|*}
ASSET_DETAILS=${ASSET_DETAILS#*|}
IP_ADDRESSES=${ASSET_DETAILS%%|*}
# Get Ids associated with names
getVSTypeId
getTemplateId
# Convert Network Names to Ids
NETWORK_IDS=""
while true
do
NETWORK_NAME=${NETWORK_NAMES%%,*}
NETWORK_NAMES=${NETWORK_NAMES#*,}
getNetworkId
if [[ "$NETWORK_IDS" != "" ]]
then
NETWORK_IDS="$NETWORK_IDS,$NETWORK_ID"
else
NETWORK_IDS=$NETWORK_ID
fi
if [[ "$NETWORK_NAME" == "$NETWORK_NAMES" ]]
then
break
fi
done
# Create vServer
echo "About to execute : $IAAS_HOME/bin/iaas-run-vserver --name $VSERVER_NAME --key-name $KEY_NAME --vserver-type $VSTYPE_ID --server-template-id $TEMPLATE_ID --vnets $NETWORK_IDS --ip-addresses $IP_ADDRESSES"
$IAAS_HOME/bin/iaas-run-vserver --name $VSERVER_NAME --key-name $KEY_NAME --vserver-type $VSTYPE_ID --server-template-id $TEMPLATE_ID --vnets $NETWORK_IDS --ip-addresses $IP_ADDRESSES
pauseUntilVServerRunning
}

function createVolume() {
VOLUME_NAME=${ASSET_DETAILS%%|*}
ASSET_DETAILS=${ASSET_DETAILS#*|}
VOLUME_SIZE=${ASSET_DETAILS%%|*}
# Create Volume
echo "About to execute : $IAAS_HOME/bin/iaas-create-volume --name $VOLUME_NAME --size $VOLUME_SIZE"
$IAAS_HOME/bin/iaas-create-volume --name $VOLUME_NAME --size $VOLUME_SIZE
# Lets pause
echo "Just Waiting 30 Seconds......"
sleep 30
}

function attachVolume() {
VSERVER_NAME=${ASSET_DETAILS%%|*}
ASSET_DETAILS=${ASSET_DETAILS#*|}
VOLUME_NAMES=${ASSET_DETAILS%%|*}
# Get vServer Id
getVServerId
# Convert Volume Names to Ids
VOLUME_IDS=""
while true
do
VOLUME_NAME=${VOLUME_NAMES%%,*}
VOLUME_NAMES=${VOLUME_NAMES#*,}
getVolumeId
if [[ "$VOLUME_IDS" != "" ]]
then
VOLUME_IDS="$VOLUME_IDS,$VOLUME_ID"
else
VOLUME_IDS=$VOLUME_ID
fi
if [[ "$VOLUME_NAME" == "$VOLUME_NAMES" ]]
then
break
fi
done
# Attach Volumes
echo "About to execute : $IAAS_HOME/bin/iaas-attach-volumes-to-vserver --vserver-id $VSERVER_ID --volume-ids $VOLUME_IDS"
$IAAS_HOME/bin/iaas-attach-volumes-to-vserver --vserver-id $VSERVER_ID --volume-ids $VOLUME_IDS
# Lets pause
echo "Just Waiting 30 Seconds......"
sleep 30
}

function processAssets() {
while read line
do
ACCOUNT=${line%%:*}
line=${line#*:}
ACTION=${line%%|*}
line=${line#*|}
if [[ "$ACTION" == "Connect" ]]
then
ACCOUNT_USER=${line%%|*}
line=${line#*|}
ACCOUNT_PASSWORD=${line%%|*}
connectToAccount

## Account Info
getNetworks
getVSTypes
getTemplates

continue
fi
if [[ "$ACTION" == "Create" ]]
then
ASSET=${line%%|*}
line=${line#*|}
ASSET_DETAILS=$line
if [[ "$ASSET" == "vServer" ]]
then
createVServer

continue
fi
if [[ "$ASSET" == "Volume" ]]
then
createVolume

continue
fi
fi
if [[ "$ACTION" == "Attach" ]]
then
ASSET=${line%%|*}
line=${line#*|}
ASSET_DETAILS=$line
if [[ "$ASSET" == "Volume" ]]
then
getVolumes
getVServers
attachVolume

continue
fi
fi
if [[ "$ACTION" == "Connect" ]]
then
disconnectFromAccount

continue
fi
done < $INPUT_FILE
}

# Should Parameterise this

while [ $# -gt 0 ]
do
case "$1" in
-a) INPUT_FILE="$2"; shift;;
*) echo ""; echo >&2 \
"usage: $0 [-a <asset definition="definition" file="file">] (Default is CreateAssets.in)"
echo""; exit 1;;
*) break;;
esac
shift
done

processAssets

echo "**************************************"
echo "*****  Finished Creating Assets  *****"
echo "**************************************"

CreateAssetsProd.in

Production:Connect|exaprod|welcome1

Production:Create|vServer|VS006|VSTProduction|BaseOEL56ServerTemplate|EoIB-otd-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.223.13,192.168.0.13,10.117.81.67,172.17.0.14
Production:Create|vServer|VS007|VSTProduction|BaseOEL56ServerTemplate|EoIB-otd-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.223.14,192.168.0.14,10.117.81.68,172.17.0.15
Production:Create|vServer|VS008|VSTProduction|BaseOEL56ServerTemplate|EoIB-wls-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.225.61,192.168.0.61,10.117.81.61,172.17.0.16
Production:Create|vServer|VS009|VSTProduction|BaseOEL56ServerTemplate|EoIB-wls-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.225.62,192.168.0.62,10.117.81.62,172.17.0.17
Production:Create|vServer|VS000|VSTProduction|BaseOEL56ServerTemplate|EoIB-wls-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.225.63,192.168.0.63,10.117.81.63,172.17.0.18
Production:Create|vServer|VS001|VSTProduction|BaseOEL56ServerTemplate|EoIB-wls-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.225.64,192.168.0.64,10.117.81.64,172.17.0.19
Production:Create|vServer|VS002|VSTProduction|BaseOEL56ServerTemplate|EoIB-wls-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.225.65,192.168.0.65,10.117.81.65,172.17.0.20
Production:Create|vServer|VS003|VSTProduction|BaseOEL56ServerTemplate|EoIB-wls-prod,vn-prod-web,IPoIB-default,IPoIB-vserver-shared-storage|10.51.225.66,192.168.0.66,10.117.81.66,172.17.0.21

Production:Create|Volume|VS006|50
Production:Create|Volume|VS007|50
Production:Create|Volume|VS008|50
Production:Create|Volume|VS009|50
Production:Create|Volume|VS000|50
Production:Create|Volume|VS001|50
Production:Create|Volume|VS002|50
Production:Create|Volume|VS003|50

Production:Attach|Volume|VS006|VS006
Production:Attach|Volume|VS007|VS007
Production:Attach|Volume|VS008|VS008
Production:Attach|Volume|VS009|VS009
Production:Attach|Volume|VS000|VS000
Production:Attach|Volume|VS001|VS001
Production:Attach|Volume|VS002|VS002
Production:Attach|Volume|VS003|VS003

Production:Disconnect

Development:Connect|exadev|welcome1

Development:Create|vServer|VS014|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.24,10.117.81.71,172.17.0.24
Development:Create|vServer|VS015|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.25,10.117.81.72,172.17.0.25
Development:Create|vServer|VS016|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.26,10.117.81.73,172.17.0.26
Development:Create|vServer|VS017|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.27,10.117.81.74,172.17.0.27
Development:Create|vServer|VS018|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.28,10.117.81.75,172.17.0.28
Development:Create|vServer|VS019|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.29,10.117.81.76,172.17.0.29
Development:Create|vServer|VS020|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.30,10.117.81.77,172.17.0.30
Development:Create|vServer|VS021|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.31,10.117.81.78,172.17.0.31
Development:Create|vServer|VS022|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.32,10.117.81.79,172.17.0.32
Development:Create|vServer|VS023|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.33,10.117.81.80,172.17.0.33
Development:Create|vServer|VS024|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.34,10.117.81.81,172.17.0.34
Development:Create|vServer|VS025|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.35,10.117.81.82,172.17.0.35
Development:Create|vServer|VS026|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.36,10.117.81.83,172.17.0.36
Development:Create|vServer|VS027|VSTDevelopment|BaseOEL56ServerTemplate|EoIB-development,IPoIB-default,IPoIB-vserver-shared-storage|10.51.224.37,10.117.81.84,172.17.0.37


Development:Create|Volume|VS014|50
Development:Create|Volume|VS015|50
Development:Create|Volume|VS016|50
Development:Create|Volume|VS017|50
Development:Create|Volume|VS018|50
Development:Create|Volume|VS019|50
Development:Create|Volume|VS020|50
Development:Create|Volume|VS021|50
Development:Create|Volume|VS022|50
Development:Create|Volume|VS023|50
Development:Create|Volume|VS024|50
Development:Create|Volume|VS025|50
Development:Create|Volume|VS026|50
Development:Create|Volume|VS027|50

Development:Attach|Volume|VS014|VS014
Development:Attach|Volume|VS015|VS015
Development:Attach|Volume|VS016|VS016
Development:Attach|Volume|VS017|VS017
Development:Attach|Volume|VS018|VS018
Development:Attach|Volume|VS019|VS019
Development:Attach|Volume|VS020|VS020
Development:Attach|Volume|VS021|VS021
Development:Attach|Volume|VS022|VS022
Development:Attach|Volume|VS023|VS023
Development:Attach|Volume|VS024|VS024
Development:Attach|Volume|VS025|VS025
Development:Attach|Volume|VS026|VS026
Development:Attach|Volume|VS027|VS027

Development:Disconnect

このエントリの原文は以下のリンクに掲載されていたものです。
Exalogic 2.0.1 Tea Break Snippets - Scripting Asset Creation (The Old Toxophilist)
http://theoldtoxophilist.blogspot.co.uk/2012/09/exalogic-201-tea-break-snippets.html

[Database] Video: Analyzing Big Data using Oracle R Enterprise

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

Oracle R Enterprise を使って発生事象だけでなく、発生した理由まで回答し、新しい分析や新しい価値をビジネスへ提供する方法を習得しましょう。以下のYouTubeのOracle Channelの動画では、Oracle R Enterpriseを使ったビッグデータの分析が他の分析ツールと異なる点を説明しています。
Oracle R Enterprise
http://www.oracle.com/technetwork/database/options/advanced-analytics/r-enterprise/index.html
Big Data Episode 5: Analyzing Big Data (YouTube)


Oracle R Enterprise (ORE)はOracle Advanced Analytics Optionの1コンポーネントですが、R言語の分析パッケージの機能に加えて、Oracle Databaseの性能、スケーラビリティ、セキュリティを組み合わせています。OREは、Oracle Databaseからデータを取り出さずに、データベースのデータに対して透過的にベースのR関数を実行します。データベースの組み込みコンポーネントとして、Oracle R Enterpriseは、組み込みRを介してRスクリプトとオープンソースパッケージを実行することができます。データベースはRエンジンに渡すデータとユーザが制御するデータの多重度を管理します。その結果、より速く、より安全性の高いデータへのアクセスをもたらします。 OREはまた、データベース内分析の全てのスイートと共に動作するため、アナリストに対し統合された結果を提供することができます。

2012年9月22日

[Java] Java EE 6 Pocket Guide from O'Reilly - Now Available in Paperback and Kindle Edition

原文はこちら。
https://blogs.oracle.com/arungupta/entry/java_ee_6_pocket_guide

Java EE 6 Pocket GuideのペーパーバックとKindle EditionがO'Reilly Mediaから出ました。
Java EE 6 Pocket Guide [Paperback]
http://shop.oreilly.com/product/0636920026464.do
http://www.amazon.com/Java-EE-6-Pocket-Guide/dp/144933668X/
発行日: 2012年9月21日
言語: 英語
ページ数: 208
Print ISBN: 978-1-4493-3668-4 | ISBN 10:1-4493-3668-X
Ebook ISBN:978-1-4493-3667-7 | ISBN 10:1-4493-3667-1
Java EE 6 Pocket
Guide
Java EE 6プラットフォームを包括的にまとめてあります。プラットフォームとは異なるテクノロジーの主要な機能を説明し、数多くのサンプルを用意しています。Managed Beans、Servlets、Java Persistence API(JPA)、Enterprise JavaBeans(EJB)、Contexts and Dependency Injection(CDI)、JavaServer Faces(JSF)、SOAP-Based Web Services、RESTful Web Services、Java Message Service(JMS)、Bean Validationに対して専用の章を割り当てています。

Markus EiseleJohn YearyBert Ertmanにレビューや貴重な意見を頂きました。彼らからの広範囲に及ぶフィードバックがなければこの本は完成しませんでした。どうもありがとう。

この本はこれまでのブログエントリ、2日間のワークショップや世界中で実施したハンズオンワークショップの資料をまとめたものです。
Arun Guptaのブログ(Arun Gupta, Miles to go ...)
http://blogs.oracle.com/arungupta

2日間のワークショップの様子(ブログから)
http://blogs.sun.com/arungupta/entry/2_day_java_ee_62
https://blogs.oracle.com/arungupta/entry/2_day_java_ee_63
https://blogs.oracle.com/arungupta/entry/java_ee_6_glassfish_at1

世界中で実施したハンズオンの様子(ブログから)
https://blogs.oracle.com/arungupta/entry/jcertif_2011_university_java_ee
https://blogs.oracle.com/arungupta/entry/jfokus_2012_trip_report
https://blogs.oracle.com/arungupta/entry/spark_it_2011_java_ee
https://blogs.oracle.com/arungupta/entry/devoxx_2011_trip_report_pictures
https://blogs.oracle.com/arungupta/entry/dallas_tech_fest_2011_trip
https://blogs.oracle.com/arungupta/entry/java_ee_6_workshop_delivered
様々なテクノロジーのユーザとのやりとりや、様々なスペックリードとのホワイトボードを使ったディスカッションのおかげで、より一層テクノロジーを理解することができました。いいユーザになるように助力してくれてありがとう。
世界中を駆け回る旅行中の長時間のフライトがコンテンツの編集に役立ちました。電話もメールも、Instant Messagingも届かず、食事は運んでもらえて、電源が用意されているというのは、編集のための最高のレシピですね。;-)
https://blogs.oracle.com/arungupta/entry/javaone_and_oracle_develop_india1
https://blogs.oracle.com/arungupta/entry/java_day_istanbul_may_2012
https://blogs.oracle.com/arungupta/entry/geecon_2012_trip_report
https://blogs.oracle.com/arungupta/entry/jeeconf_2012_trip_report
Markusがこの本のレビューを書いてくれました。彼は原稿レビュアーの一人であり、基調なガイダンスを提供してくれました。彼のエントリから抜粋してみます。
Review: "Java EE 6 Pocket Guide" by Arun Gupta
http://blog.eisele.net/2012/09/javaee6-pocket-guide-by-arun-gupta.html
Java EE 6で知っている必要がある基礎部分を扱っており、すべての関連パートでよいサンプルがついています。
...
これは、包括的に書かれているポケットガイドです。すべてのサンプルを理解できました。全体的にみて良書でした。複雑ではなく、明解な文章で書かれています。
...
そりゃ、「買い」でしょう!おそらくJava EE 6で必要な唯一の本です。包括的で、素晴らしい内容であり、毎日の仕事に必要なものが網羅されています。完全なリファレンスではありませんが、この本は知っておくべきことへの大きな近道を提供してくれます。初心者向けの良いガイドであると共に、上級ユーザー向けの手引き書として使えるものでしょう。
で、最初のTwitterでのフィードバックは…

Jeff Westは発表したまさにそのタイミングで先行予約注文をしてくれました。ありがとう!

@mike_neck は本に関するまさに最初のTweetをしてくれました。ありがとう。

書籍は以下のWebサイトでペーパーバックとKindle Editionをお買い求め頂けます。
(訳注)
日本のAmazonでは9月28日から販売のようです。

ここで、お手伝い頂きたいことが…
JavaOneに参加されるのであれば、10月1日(月)14時〜15時にO'Reillyのブースにお出でになると、無料のコピーを差し上げます。JavaOneブックストアでいつでも購入できます。
楽しく読んで頂きながら、何か新しいことを習得したり、今までのスキルを磨いてもらえれば嬉しいです。いつものように、フィードバックを楽しみ待っています。

[Java] Project Jigsaw: On the next train

原文はこちら。
http://mreinhold.org/blog/on-the-next-train

先頃Project JigsawをJava 8からJava 9に延期することを提案しました。
Project Jigsaw: Late for the train
http://mreinhold.org/blog/late-for-the-train
この提案に対する反応は、「Java 8をProject Jigsawのために遅らせるべき」と「Project JigsawをJava 9に延期するべき」と、その他のあまり現実的でないオプションを取るべきといった意見にほぼ均等に分かれました。
もちろん、最終決定はJava SE 8(JSR 337)の専門家グループ(Expert Group / EG)次第で、熟慮の末、EGの圧倒的多数がこの提案を支持してくれました。
Java SE 8 Platform Umbrella JSR (337)
http://openjdk.java.net/projects/jdk8/spec/
Modularity in Java SE 8
mail.openjdk.java.net/pipermail/java-se-8-spec-experts/2012-September/000021.html
この決定を踏まえ、ハイエンドJava MEプラットフォームとJava SEの収束に向けて、Java 8に邁進することができます。コンパクトなJava SEプラットフォームをビルドしたりデプロイ可能な少数のProfileの定義を検討していることを以前示唆しました。JEP 161ではそういったProfileの具体的な初期提案を計画しています。
Modularity in Java SE 8
http://mail.openjdk.java.net/pipermail/java-se-8-spec-observers/2012-July/000001.htmlJEP 161: Compact Profiles
http://openjdk.java.net/jeps/161
Java 9での完全なモジュール化プラットフォームに向け、Java 8でなされるべき非常に有用な作業もあります。Alan Batemanが投稿したJEP 162は、Java 8で次のような変更を提案しています。それは、スムーズにモジュール化へ移行し、モジュール化への対応に役立つ開発者向けの新しいツールを提供しつつ、モジュール化への大きな障害であるAPI要素を非推奨にして、最終的にJava 9で削除する、というものです。
JEP 162: Prepare for Modularization
http://openjdk.java.net/jeps/162
提案に対し、コメントや質問で反応頂いた皆様に感謝します。はじめに書いた通り、Jigsawの2015年にリリースのJava 9へ延期したことは全く嬉しい決定ではありませんが、取り得る選択肢のうちで最善のものだと思っており、これが開発スケジュールになっています。

2012年9月20日

[SOA/BPM] The curious case of SOA Human tasks' automatic completion

原文はこちら。
https://blogs.oracle.com/ateamsoab2b/entry/the_curious_case_of_soa

Oracle BPM/SOAをお使いの南アジアの大規模な保険業界のお客様がこの事象に出くわしました。以前独力で解決したのですが、これをブログにまとめるつもりはありませんでした。しかし、このナレッジを広く知ってもらうことがよいのでは、と思い、以下にまとめておきます。

現象
適切なユーザにタスクを割り当てているのに、(SOA/BPMプロセスの)ヒューマンタスクが自動的に完了する。スタックトレースや関連する例外がログには現れない。

理由
プロセスを完了させる権限をもつ担当者がないヒューマンタスクの場合はこのように扱うように、製品が設計されているからです。したがって、警告やエラーメッセージがログには残らないのです。

類似の事象
このユースケースの派生として、割り当てられた人がリポジトリに存在しない場合、回復可能なエラーとして扱われます。Enterprise Managerで「保留復帰」のインスタンスから見つけることができるので、担当者を変更してプロセス所有者/管理者としてBPM Workspaceの担当者を変更することで、タスクを再度有効化できます。

しかし、いつタスクが自動で完了するのでしょう。ユースケースに戻ってみます…

発生するタイミング
タスクに割り当てられたユーザー/グループが”空(empty)"またはnullである場合に発生します。この事象はタスク担当者を式で導かれる、すなわち実行時にXPathを使ってタスク担当者を決定するようなタスクの場合にのみ確認されています(タスク担当者がスイムレーンのロールで割り当てられる場合は、この事象は発生しません)。

この事象をEnterprise Managerで見つけるには
したがって、自動完了しているインスタンスの場合は、タスクのoutcome(結果)が空のインスタンスの監査証跡で気づくでしょう。「取得された」要素もまたempty/nullとして表示します。

oracle.soa.services.workflow.*のリグオプションをEnterprise Managerで有効にすると、この事象のより詳細なメッセージを出力できます。

この事象を修復するには
2カ所の修正が必要です。
  1. ヒューマンタスクへの入力
    XSLT / XPathを使ってタスク担当者やプロセスそのものを設定する場合、NULLを処理するように拡張する必要があります。例:データが見つからなかった場合、代替値を担当者に割り当てたり、デフォルト担当者を設定すなど。
  2. ヒューマンタスクからの出力
    さらにアプリケーション·コードで、ヒューマンタスクの結果(outcome)がNULLではないことを確認します。NULLの場合は、ルートタスクを再実行するようルーティングする前に担当者を正しく設定する必要があります。Patch Set 4 Feature Packから、'grab'機能を使ってタスクを取り戻し、再度実行することができます。

[BPM, ADF] BPM ADF Task forms. Checking whether the current user is in a BPM Swimlane

原文はこちら。
https://blogs.oracle.com/bpmbestpractice/entry/bpm_adf_task_forms_checking

Focus
このエントリでは、ADFコンティストからBPMスイムレーンのロールやユーザに着目します。ADFTaskDetailフォームがあり、機能面でリッチでダイナミックにしようとしているところです。一般的な要件として、ワークスペースにログインしたユーザに基づいて、動的に異なる領域を表示する、というものがあります。おそらく、ユーザが属するスイムレーンのロールを知りたいのです。

トリックを知らなければ、思っている以上にこの要件を実現すること難しかったりします。

The Challenge
ここでのトリッキーな箇所はADF Task Detailsフォームが実際のところメインのワークスペースとは別のJava EEアプリケーションである、ということです。そのため、JavaやExpression Languageを使ってログインユーザを取得しようとすると、anonymousしかわからず、期待しているBPMロールは全く取得できません。どうしましょう?

The Magic
まず、BC4J SecurityライブラリをViewプロジェクトに追加します。


その後、JDeveloperを再起動します。

ADF Task DetailsアプリケーションのViewプロジェクトのweb.xmlで、JpsFilterセクションを探し、そこに以下のセクションを追加します。

application.nameOracleBPMProcessRolesApp
これでアプリケーションをBPMワークスペースにリンクします。 その後、ADFフォームの動的な箇所で、BPMワークスペースにログインしたユーザが、任意のBPMプロセスのBPMスイムレーンに属しているか否かをチェックできます。このチェックの最善の方法は、JSFページでExpression Languageを使用することです。ここで単純にレンダリングフラグをtrueまたはfalseに変更すると、それによってセクションを隠したり表示したりします。 おそらく、承認者のスイムレーンと一般ユーザのレーンのタスクに同じフォームを再使用しているでしょう。 それだからこそ、承認者にこのフィールドを見てもらいたいのです。したがって、組み込みの機能を呼び出して、ユーザがBPMスイムレーンのロールに属しているかどうかを調べるのです。ロール名はBPMProject.RoleNameという形である必要があります。

ここまでできたら、ADF Task Formプロジェクトを再デプロイしましょう。

(上の画像の場合)ワークスペースにログインしているユーザがBPMプロジェクトSimpleTaskのUnsecureというスイムレーンのメンバーである場合に限り、Task Detailsフォームにテキストを表示します。

2012年9月19日

[Java] Creating Asynchronous Methods in EJB 3.1

原文はこちら。
https://blogs.oracle.com/javatraining/entry/creating_asynchronous_methods_in_ejb

このOBE(Oracle By Example)では、Enterprise Java Bean(EJB)のクラスや特定のメソッドでの@Asynchronousアノテーションの使い方を説明する、EJB 3.1アプリケーションの作成を取り扱っています。
このチュートリアルでは、Java EE 6 Webアプリケーションを作成し、2つの非同期メソッドを使用したステートレスセッションBeanのコンポーネントを追加します。あなたは、非同期メソッドを呼び出すためのサーブレットを定義し、呼び出しと完了時間を追跡して、メソッド呼び出しの非同期の性質を示します。 index.jspには、送信ボタンを持つフォームが含まれていて、アプリケーションを実行することができます。フォームは、セッションBeanで定義されている非同期メソッドを呼び出すサーブレットに指示し、レスポンスはresponse.jspにリダイレクトされます。その際の非同期処理手続きに関する情報を、ユーザーに表示します。この情報から、ユーザは、invoker thread(呼び出し元スレッド)とcalled asynchronous thread(呼び出される非同期スレッド)が同時に動作していることがわかります。

Oracle Learning Libraryのこの新しいOBE(Creating Asynchronous Methods in EJB 3.1)を是非チェックして下さい。
このOBEは新しい EJB 3.1 New Features Series(EJB 3.1の新機能シリーズ)の一つです。
Creating Asynchronous Methods in EJB 3.1
http://apex.oracle.com/pls/apex/f?p=44785:24:9177499877285:::24:P24_CONTENT_ID,P24_PREV_PAGE:6393,24
EJB 3.1 New Features Series
http://apex.oracle.com/pls/apex/f?p=44785:24:11004630323111::NO:24:P24_CONTENT_ID,P24_PREV_PAGE:6418,2
関連するOBEもありますので、興味あれば是非どうぞ。
Creating a No-Interface View Session Bean and Packaging in a WAR File
http://apex.oracle.com/pls/apex/f?p=44785:24:0::NO:24:P24_CONTENT_ID,P24_PREV_PAGE:6368,2
Creating and Accessing a Session Bean in a  Web Application
http://apex.oracle.com/pls/apex/f?p=44785:24:0::NO:24:P24_CONTENT_ID,P24_PREV_PAGE:6342,2

[Database] Questions and Answers from Today's Upgrade Webcast with Roy Swonger

原文はこちら。
https://blogs.oracle.com/databaseinsider/entry/questions_and_answers_from_today

Oracle DatabaseのアップグレードのエキスパートであるRoy Swongerの本日のライブwebcast、「Oracle Database 11gへアップグレードするための説得力のある3個の理由」に参加いただき、ありがとうございました。今朝は閲覧者数がたくさんでびっくりしました。共有を待つことができなかった40以上ものアップグレードに関する質問に回答いたしました。

今日のライブWebcastを見逃した方も心配なさらずに。オンデマンド版の登録をすればOracle Database 11gのアップグレードに関するベストプラクティスを実際のお客様の事例と合わせて知って頂けます。さらに加えて、データベースを迅速かつ容易にアップグレードするための数多くのすばらしいリソースを用意しています。Webcastのプレゼンテーション資料もダウンロード頂けます。
Q&A
https://blogs.oracle.com/databaseinsider/resource/DBUpgradewebcastAttendeeQuestions.pdf
Webcast(On Demand)
http://event.on24.com/r.htm?e=502521&s=1&k=8A3AC19FDC380F9E5E55808EA473A2F8&partnerref=DB11gupgrade_FUBlog_91812

[Java] PodFodder: JVM Language Summit 2012 Videos

原文はこちら。
http://robilad.livejournal.com/127682.html

As Brian GoetzがTweetしていたように、今年のJVM Language Summitの動画が様々なフォーマットでご利用頂けるようになりました。プレゼンテーションで使われたスライドもご利用いただけます。
ダウンロードは以下のリンクからどうぞ。
JVM Language Summit 2012
http://www.oracle.com/technetwork/java/javase/community/jvmls2012-1840099.html

2012年9月18日

[Big Data] Podcast interview with Michael Kane

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

データサイエンティストにしてYale UniversityのAssociate ResearcherであるMichael Kaneへのインタビューで、統計解析のための言語であるR言語、ビッグデータに関連するコンピュータの課題、そして彼が指揮したデータ解析を含む2つのプロジェクト、2010年5月6日の株式市場の「瞬間暴落(Flash Crush)」と、鳥インフルエンザH5N1の移送ルートの追跡についてMichaelが説明しています。
Understanding big data analysis with the R language
http://streaming.oracle.com/ebn/podcasts/media/11859943_Big_Data_070912.mp3
Michaelは、Oracleと共にOracle R Enterpriseという、Oracle Database Enterprise EditionのAdvanced Analyticsオプションコンポーネントに取り組んでいます。インタビューの終わりで、Michaelはデータアナリストとデータベース管理者の関係、そしてOracle R Enterpriseが提供するセキュアなデータ管理、透過的なデータアクセス、性能が向上したことにより、データアナリストとデータベース管理者の関係が促進することについてコメントしています。

2012年9月17日

[misc] Oracle Spatial renamed Oracle Spatial and Graph

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

2012年7月19日付けのGlobal Price Listで、"Oracle Spatial"が"Oracle Spatial and Graph"に名称変更しました。グラフデータベース機能への需要が増加していることを認識し、Oracle Spatialの既存のネットワークグラフ、セマンティックグラフ機能を強調するためにこの変更を実施しました。Oracle Spatial and Graphの価格や機能はこれまでのOracle Spatialと全く同じで、名称だけの変更です。

2012年9月16日

[SOA/BPM] Storing SCA Metadata in the Oracle Metadata Services Repository

原文はこちら。
http://www.oracle.com/technetwork/articles/soa/fonnegra-storing-sca-metadata-1715004.html

作者について

Nicolás Fonnegra Martinez はOracleのPrincipal Consultantで、主としてOracle Fusion Middleware製品を担当し、Oracle SOA SuiteとService Component Architectureを使ってコンセプトやベストプラクティスを開発しています。
Markus Lohn はOracleのSOA/Integration Architectで特にSOA、Java EEテクノロジーを専門にしています。

対象の読者

この記事は、Service Component Architecture(SCA)コンポジットを実装、設計するソフトウェア開発者、ソフトウェアアーキテクトを対象にしています。読者はサービス指向アーキテクチャ(SOA)の原則、Oracle WebLogic Server、Oracle SOA Suite 11gのことを知っていることを前提とします。

はじめに

SCAはSOA Suite 11gから利用できるようになりました。このテクノロジーはSCAコンポジット内のSOAコンポーネントを組み合わせて統合し、設計、開発、デプロイ、維持管理を容易にしてくれます。SCAデプロイメントはメタデータ駆動です。つまりWSDLやXMLスキーマ、XMLなどといったメタデータアーティファクトがコンポジットの振る舞いを決めます。
コンポジットや各コンポジット間の依存性が増加するにつれて、全てのメタデータを適切に管理する必要が出てきます。この記事ではOracle Metadata Services(MDS)リポジトリをメタデータの中心ストレージとして利用することのメリットをご紹介します。MDSリポジトリはOracle Fusion Middlewareの中心であり、Oracle Application Development Framework (Oracle ADF)やOracle WebCenter、そしてOracle SOA Suiteといった種々のテクノロジーのメタデータを管理します。
この記事は3部に分け、まず第1部ではSCAとMDSの概要を、第2部ではリポジトリ内のSCAメタデータファイルの管理に役立つMDSのタスクについてご説明します。第3部ではSCAコンポジットをMDSリポジトリと組み合わせて開発する方法をお伝えします。

コンセプト

SCA

SCA標準はOracleを含む種々の企業が提唱し、現在ではOASISグループが維持管理しています。SCAはアプリケーションの作成やシステムの連係のためのソフトウェア開発モデルを提供します。SCAコンポジット内では、様々なコンポーネントが定義され、バインドされ、サービスを外部公開しています。SCAモデルの主要目的は複雑な機能、例えばビジネスプロセスを、固有のタスクを持つ小さなSOAコンポーネントに分解し、コンポーネントをコンポジットサービスとして統合して提供する、ということです。図1は開発時のSCAコンポジットの例です。
図1 SCA Composite in Oracle JDeveloper
こうしたSOAコンポーネントをハイレベルの中心コンポジットに構築、統合するフレームワークを提供し、SCAはSOA標準上で構築します。SCAコンポジットの主要な特性の一つは、メタデータ駆動である、ということです。つまり、各コンポーネントの振る舞いは単一のプログラミング言語(Java、C++、.NETランタイム上の言語など)ではなく、XMLファイルのようなメタデータアーティファクトで決まります。この特長により、SCAコンポジットは非常に柔軟になり、簡単にインターフェース定義に基づいた新しいコンポーネントと統合したり入れ替えたりできます。
SCAコンポジットを3部(コンポーネント、外部参照、公開サービス)に分けます。コンポーネント部分はSCAコンポジットの中心部分で、全てのコンポーネントやコンポーネント間の通信(ワイヤリング)を定義しています。Oracle SOA Suite 11gでは、5種類のコンポーネントをSCAコンポジット内で使用することができます。
  • BPEL Process: Business Process Execution Language (BPEL) はビジネスプロセスを定義するための言語です。このプロセスはXMLで定義され、主要な目的は機能サービスを統合することにあります。機能サービスとは、コンポジットの外部サービスもしくは同一コンポジットの別のコンポーネントです。BPELプロセスの主要な機能の一つは、同期統合、相関IDを使った非同期の統合が可能、というものです。BPELプロセスをコンポジット内で使用し、プロセスの形で業務ロジックを定義します。
  • Oracle Business Rules: Oracle Business RulesコンポーネントはSCAコンポジット内のルールリポジトリとして機能します。その主要目的はアプリケーションコードの外でビジネスポリシーを定義する命令を定義することです。これらのルールを定義するための実装言語を技術者以外でも読みやすくすることができ、ルールエンジンを使うことでルールを実行時に変更できます。つまり再コンパイルやアプリケーションを停止しなくてすむのです。ルールはXMLで定義され、文章もしくはデシジョン表の形で導入します。
  • Human Workflow Task: Human Workflow Taskコンポーネントを使うと、SCAコンポジット内でユーザとのやりとりが可能になります。事前定義済みのワークフローが数種類あり、複雑な手作業による介入を手助けしてくれます。通常はBPELプロセスと共に使い人やグループ、事前定義済みのロールが実行するタスクを定義します。認証時にユーザは、他のコンポーネントや他者が割り当てた、利用可能なタスクにアクセスすることができます。これらのタスクを事前定義済みのワークフローアプリケーションを使って閲覧することができます。もしくは、利用可能なJava APIを使ったカスタムアプリケーションからもアクセスできます。
  • Mediator: メディエータがSCAコンポジット内のメッセージディスパッチャとして動作します。mediatorは、コンポジット内の他のコンポーネントとの統合に使います。着信メッセージに基づいて、メッセージをどのコンポーネントにルーティングすべきかを判断します。これとは別に、さまざまなメッセージをルーティングする前に、XSL変換(XSLT)を使用して変換することができるため、様々なコンポーネントを切り離し、各々固有の入出力メッセージを持たせることができるようになります。
  • Spring Contexts: Spring BeanもSCAコンポジット内に含めることができます。これにより、Javaの機能を実行したり、以前に開発したJavaコンポーネントを再利用できるようになります。Springコンテキストコンポーネントは、ふつうのSpring構成ファイルに2つの新しいタグ(SCA-serviceとSCA-reference)を拡張しています。これらのタグにより、Spring Beanは、他のSCAコンポーネントのサービスを利用でき、他のSCAコンポーネントによって利用され得るサービスを公開することができます。

Oracle Metadata Services

MDSを、Oracle Fusion Middlewareの内部の中央リポジトリとして記述することができます。その主目的は、Oracle Fusion Middlewareのコンポーネントがメタデータを維持、管理、アクセスできる集中ストアを提供することです。
メタデータは、データに関するデータとして定義されることがよくあります。言い換えると、他の情報に意味を与え、記述する情報の断片として定義されます。 Oracle Fusion Middlewareコンポーネントが使用するメタデータの典型的な例は、中でもXMLファイル、XMLスキーマファイル、XSL変換、SCAコンポジット、BPELプロセス、WSDL、ビジネス·ルール、Oracle ADFページ、JaveServer Pages(JSP)、Oracle ADFタスク·フローです。これらのリソースは、構成パラメーターやデータ定義だけでなく、複雑なビジネスロジック、インタフェースコントラクト、およびビジネス·ルールをも含みます。したがって、特別な方法で管理することが重要であり、そうすれば、簡単に更新され、外部の世界と共有することができます。
Oracle FormsアプリケーションやJava EEアプリケーションなど、一般的な2階層または3階層アプリケーションでは、ビジネス·データを、通常データベース内に格納して、管理やアクセスを容易にするために集約します。ビジネスコンポーネントは、情報の在処やアクセス方法がわかっているので、必要な情報を探し回る必要はありません。データを異なるアプリケーション間で共有でき、データの変更は、整合性が保証され、一点のみで行われる必要があります。 MDSは、Oracle Fusion Middlewareコンポーネントのメタデータのために同じ考え方を適用します。クラスパスやJARファイル、あるいはデータベース内にいくつかのメタデータリソースを持つのではなく、MDSでリソースを単一の場所で集中保持できます。図2は、Oracle Fusion MiddlewareコンポーネントのMDSとのやりとりです。
図2 Oracle Fusion Middleware and MDS
メタデータ·リポジトリを使用することは多くの正当性があります。まず、XMLファイルまたはXSDスキーマファイルなどのメタデータは、通常、異なるコンポーネント間で共有されます。したがって、すべてのコンポーネントがこれらのリソースに容易にアクセスし、参照できることが必要なだけでなく、一貫性を維持することも重要です。つまり、メタデータの変更は、それを参照しているすべてのコンポーネントに反映されるべきなのです。各メタデータリソースのコピーを1つだけ用意すれば、不要な冗長性を避け、変更が一箇所だけでなされることを保証します。
第二に、機能的なデータと同様に、メタデータにはライフサイクルがあります。つまり、例えば分析、設計、開発、テスト、生産などのさまざまなプロジェクトのフェーズを通して、メタデータの異なるバージョンが存在します。すべてのバージョンを管理する必要があり、フェーズに応じて、簡単に交換できなければなりません。あるバージョンから別のバージョンへの変更したり、以前のバージョンにロールバックしたりして、コンポーネントの整合性や振る舞いを台無しにしてはいけないのです。
第三に、機能的なデータと同様に、メタデータを管理する必要があります。一般的に必要な機能の中では、メタデータの追加、更新、削除、ラベリング、キャッシング、バージョン管理の機能です。1カ所に集中せず、いくつかの場所に格納されていた場合、これらのリソースを維持することは非常に難しいでしょう。
第四に、多くのコンポーネントは、このメタデータを使用するため、ボトルネックを回避し、単一障害点になることを避けるため、可用性と性能が高いことを要求されます。メタデータは、基本的な部分で考慮されるべきクラスタリング、レプリケーション、ロードバランシングなどの機能的なデータやコンセプトと同じ特別な取扱いを必要とします。
MDSリポジトリのいくつかの機能は、メタデータを扱うため非常に堅牢なソリューションになっています。それらを検討する前に、まずは2種類のリポジトリ(ファイルベースとデータベースベース)があり、以下でご説明する機能のほとんどはデータベースベースリポジトリにおいてのみ可能である、ということをお伝えしなければなりません。データベース·ベースのリポジトリは本番環境での利用を意図しているのに対し、ファイルベースの​​リポジトリは、開発環境のためのものです。
  • Customized applications: この機能はどちらのリポジトリでも利用でき、通常はOracle ADFアプリケーションで使われます。カスタマイズされたアプリケーションはベースとなるアプリケーションや複数のカスタマイズ層上に構築されます。カスタマイズ層はMDSリポジトリに格納され、ベースアプリケーションと実行時にマージされます。
  • Query optimization: データベースリポジトリは、データベースの機能を使ってコンテンツのクエリを最適化できます。いくつかの事前設定されたインデックスと、全体的なパフォーマンス向上に役立つパージ機構があります。また、実行時に変更されないメタデータを構成して、高速にアクセスするためキャッシュすることができます。 MDSはメタデータの変更を検知できるので、キャッシュを最新に保つことができます。
  • MDS query API: このAPIはメタデータ属性、メタデータの値、メタデータの型、メタデータのパス、さらにはテキストの内容に基づくクエリーを定義する機能を提供します。
  • Transaction support: データベース·ベースのMDSリポジトリは、データベースのトランザクションを使用して、リポジトリのインポートや更新に失敗した場合に、以前の状態にロールバックすることができます。
  • Versioning: バージョン管理は、データベース·ベースのMDSリポジトリでのみ利用できます。メタデータを単に元のバージョンを上書きするのではなく、異なるバージョンを付けて保存することができます。バージョンは別に保存されており、バージョン履歴を構成し、特定の時点のメタデータを表示することができます。各バージョンにラベルを付けて、特定のバージョンを取得しやすくすることができます。
  • Change isolation: メタデータへの変更を分離し、特定のクライアント向けにのみ適用することができるので、全ての利用者に変更をリリースするまえ にテストを実行することができます。この機能は、データベース·ベースのリポジトリでのみ利用可能です。
  • Change detection: 前述のように、メタデータは異なるコンポーネント間で共有されると想定しています。この機能は、コンポーネントがメタデータの変更をポーリング(もしくは変更を購読)し、共有リソースが変更された際に検知でき、再起動することなく、新しいバージョンを使用することができる、というものです。この機能は、データベースベースのリポジトリでのみ有効です。
  • Shared metadata repository: この機能は、異なるコンポーネント間のメタデータ·リポジトリを共有するものです。共有メタデータリポジトリは、すべてのメタデータを集中管理し、各利用者向けに最新に維持管理します。この結果再利用を促進し、不必要な重複を回避します。変更検知を利用する場合には共有メタデータリポジトリが必要です。
  • Partitions: MDSリポジトリでは、各コンポーネントとアプリケーションは、独自のパーティションを持っています。パーティションを使うとデプロイメントが相互に独立した状態を維持することができます。言い換えれば、パーティションはMDSリポジトリ内の論理的な独立したリポジトリで、一つ以上のアプリケーションと関連づけることができます。この機能は、ファイルベースとデータベース·ベースのリポジトリで利用できます。
  • Label: 各パーティションには、複数のラベルを付けることができます。各ラベルは、パーティション内のメタデータの状態(スナップショット)を表します。図3は、MDS内のラベルを示しています。
図3 MDS Labels and Partitions
  • Namespaces:  MDSリポジトリ内部の名前空間は、リポジトリ内のメタデータのホームパスを定義しています。実行時には、3個の事前定義済みの名前空間(apps、deployed-composites、soa-shared)を使用します。名前空間は、メタデータの場所を指定するためにadf-config.xml ファイル内で利用されます。カスタムXMLファイルを通常名前空間apps内部に配置しますが、コンポジットは名前空間deployed-compositesの中に格納します。標準のSOAアーティファクトは名前空間soa-shared(/soa/shared)の中に格納されています。

MDSリポジトリの管理

既述の通り、MDSリポジトリとして、ファイルベースまたはデータベースベースのリポジトリを使用できます。ファイルベースのリポジトリの意図は、開発者が簡単に開発およびテストで使えるよう、ローカル環境で利用可能な軽量なリポジトリを用意することです。ファイルベースの​​リポジトリは、ファイル参照やカスタマイズといった必要な機能は提供しつつ、開発者が外部データベースの維持管理や構成をしなくてすみます。OS内のディレクトリ構造に類似のディレクトリ構造を定義できるので、これらのリポジトリを簡単に変更したり管理することができます。共通のシェルコマンドやGUIのFile Explorerアプリケーションの類を利用してリポジトリ内を遷移し、変更することができます。ファイルベースの​​リポジトリは、デフォルト構成を使用している場合、通常はOracle JDeveloperホーム(JDEV_HOME/integration)内にありますが、adf-config.xml構成ファイル内で各アプリケーション用に外部ディレクトリを構成することもできます。
対して、データベースベースのリポジトリは、堅牢性が必要とされる本番環境で使用されています。これらのリポジトリは、Oracleから提供されるリポジトリ作成ユーティリティ(RCU)アプリケーションを使って作成します。このユーティリティは、データベーススキーマと、それに対応する表やオブジェクトを作成するのに役立ちます。リポジトリは、後からOracle Enterprise Manager Fusion Middleware Controlのコンソールで登録したり登録解除したりすることができます。図4は、コンソールでのリポジトリ表示の例です。
図4 MDS Repositories in the Oracle Enterprise Manager Fusion Middleware Control Console
ディレクトリ構造も、Oracle JDeveloperを使って遷移したり調査することができます。単一のファイルをOracle JDeveloperで閲覧することができますが、重要なことは、WLSTコマンドを使ったり、新たにファイルこデプロイする以外にはファイルやディレクトリ構成を変更できない、つまりOracle JDeveloperでは変更できない、ということです。
次のセクションでは、データベースベースのMDSリポジトリ向けの基本的な管理コマンドを公開しています。ファイルリポジトリは直接編集できるので、これらのコマンドはファイルベースのリポジトリでは利用できません。

管理

リポジトリの作成と登録
前の章で説明した通り、データベースベースのリポジトリの場合、RCUユーティリティを使って作成する必要があります。MDSリポジトリはOracle SOA Suiteのような製品の前提条件になっているため、そうした製品のためのスキーマを作成した際に自動的にリポジトリを作成します。とは言っても、新たに独立したリポジトリをRCUを使っていつでも作成することができます。新しいリポジトリはOracle Enterprise Manager Fusion Middleware ControlのコンソールもしくはWLSTコマンドを使って登録する必要があり、その上で全ての管理対象サーバもしくは特定の管理対象サーバがリポジトリにアクセスできるようになります。

ファイルの追加
WLSTコマンドの利用もしくはJAR(Javaアーカイブ)、MAR(メタデータ・アーカイブ)をデプロイしてMDSにファイルを追加・更新することができます。Oracle Commonホーム(<MW_HOME>/oracle_common)のWLSTスクリプトではMDSにファイルを追加したり更新するためのimportMetadataコマンドを提供しています。このコマンドを使うと、ドキュメントの完全修飾ドキュメント名やドキュメント名のパターンを使って1個以上のファイルを追加できます。就職使ってことができます。ファイルを追加します ファイルが存在しない場合は追加、リポジトリにファイルが存在している場合は上書きします。特定のラベルにファイルを追加したり、アップロード前にバージョン付けすることができます。SCAとMDSのセクションでimportMetadataコマンドの例を示しています。
Antスクリプト、Oracle JDeveloper、WLSTコマンドのうち1つを使って、メタデータファイルをリポジトリにデプロイすることも出来ます。デプロイプロセスはSCAコンポジットのデプロイプロセスと似ており、実は利用できるAntスクリプトは全く同じです。メタデータファイルのデプロイの第1段階は、JAR(もしくはMAR)ファイル内に所定の構造でファイルを格納することです。ファイルを格納するディレクトリ構造はリポジトリで使ったディレクトリ構造と同一です。そのため、ファイルがディレクトリを持たない場合、直接リポジトリ中のアプリケーションのディレクトリに入れることになります。JARファイルがMdsApp/schemasディレクトリ内にファイルを持つ場合、apps/MdsApp/schemasディレクトリを作成し、ファイルをその中に格納します。MARファイルは通常Oracle ADFアプリケーションがメタデータを格納するために使います。SOA Suiteの世界では、メタデータは通常JARファイルの形でパッケージ化します。
JARファイルを作成したら、SCAバンドルを作成し、JARファイルをその中に格納する必要があります。その上で、このSCAバンドルをMDSリポジトリにデプロイすることができます。AntスクリプトもしくはOracle JDeveloperを使ってメタデータファイルをパッケージ化できます。Antを使うと、zipのターゲットをJARファイルやSCAバンドルファイルを構築するために使います。その後、ant-sca-deploy.xmlファイルからデプロイターゲットを参照してSCAバンドルをデプロイします。
Oracle JDeveloperを使う場合、2個のデプロイメントプロファイルを定義する必要があります。JARファイルは最初のデプロイメントプロファイルで作成され、プロジェクトレベルで定義します。SOAバンドルは2個目のデプロイメントプロファイルで先ほど生成されたJARファイルに含まれなければなりません。このデプロイメントプロファイルはアプリケーションレベルで定義する必要があります。SCAバンドル(もしくはSOAバンドル)を直接Oracle JDeveloperにてant-sca-deploy.xmlファイルを使って、もしくはOracle Enterprise Manager Fusion Middleware Controlのコンソールからデプロイできます。Antタグをラップし、MDSファイルのデプロイのためのわかりやすいタグを定義するAntスクリプトのサンプルもいくつかあります。

ファイルの更新
ファイルを直接更新できません。ファイルを変更するには、エクスポートして上書きするか、再デプロイする必要があります。ファイルを直接Oracle JDeveloperから閲覧することはdけいますが、編集することはできません。一つの方法として、WLSTからexportMetadataコマンドを使ってファイルをダウンロードし、変更した上で、WLSTからimportMetadataコマンドを使ってアップロードするやり方があります。

ファイルの削除、パージ
特定のファイルまたはディレクトリ全体構造をdeleteMetadata WLSTコマンドを使って削除することができます。 exportMetadataimportMetadataと同様に、完全修飾された文書名や文書名のパターンを定義することができます。アプリケーションのバージョンは省略可能です。バージョンが省略されている場合、最新バージョンが削除されます。
ラベルがついていない文書をパージできます。これはpurgeMetadataと呼ばれるWLSTコマンドを使用して行います。このコマンドで指定された値よりも古く、ラベル付けされていないバージョンがデータベースからパージされます。

Java API
Oracle SOA A-TeamがMDSリポジトリへのアクセスや修正もできるJavaクラスを作成しました。これはOracle JDeveloperで使用される機能に基づいています。MDSUtils.javaと呼ばれるこのJavaクラスは、フォルダの作成および削除、リポジトリ内のリソースの検索もできます。さらに、このJavaクラスは、WLSTでアクセスできます。 詳細は以下のエントリからどうぞ。
Full access to MDS Repository (SOA A-Team blog)
https://blogs.oracle.com/ateamsoab2b/entry/full_access_to_mds_repository
https://blogs.oracle.com/ateamsoab2b/
MDS MBeans
MDSリポジトリは、メタデータの管理とリポジトリ自体の管理を可能にする2種類のMBeans(manage beans)を提供しています。どちらのMBeanも、oracle.mds.lcmパッケージ内の"Application defined MBeans"(アプリケーション定義済みのMBean)カテゴリの下に置かれます。MDSDomainRuntime MBeanは、リポジトリを管理するためのオペレーションを提供します。このMBeanを使用すると、いくつかある機能のうち、特にパーティションのリスト表示、リポジトリのリスト表示、パーティションの作成、ラベルの作成、リポジトリの登録、パーティションの削除、を一覧表示することが可能です。
MDSAppRuntime MBeanはメタデータファイルを変更する機能を提供します。MDSリポジトリを使うアプリケーション毎にMDSAppRuntime MBeanがあります。例えば、soa-infra用、composer用、wsm-pm用のMBeanがあります。リポジトリを使う任意のOracle ADFアプリケーションもまたMBeanを取得します。対して、SCAコンポジットはsoa-infraアプリケーション内で実行するため、soa-infraアプリケーションと同じMBeanを使います。これらのMBeansはメタデータの削除、パージ、エクスポート、インポートといった機能を提供します。図5では、Oracle Enterprise Manager Fusion Middleware Controlのコンソール内のMDS MBeanブラウザの表示例です。
図5 MDS MBean Navigator

Oracle JDeveloper内のMDS

Oracle JDeveloperはOracle Fusion Middlewareコンポーネントやアプリケーションを開発するための主要なIDE(Integrated Development Environment/統合開発環境)です。Oracle JDeveloperを使うと、メタデータを格納するMDSリポジトリを参照することができます。この機能のおかげで、開発されたコンポーネントはメタデータの物理位置に依存しせず、簡単に異なる環境にデプロイできます。その際も対応するメタデータ参照を再構成する必要はありません。この機能を使うと、開発者は他の環境(テスト環境、本番環境など)をシミュレートするローカルの開発環境を持つことができます。メタデータリポジトリへの参照をadf-config.xmlファイルに定義します。
先ほど述べたように、Oracle JDeveloperではグラフィカルに様々なMDSリポジトリをナビゲートすることもできます。(ファイルベースでもデータベースベースの)リポジトリにアクセスするには、接続を定義する必要があります。その後、ツリー構造をOracle JDeveloper内で閲覧することができ、 ファイルの更新 の段で説明したオプションを使って、メタデータを編集することができます。
Connections
Oracle JDeveloperでMDSリポジトリの接続を定義するためには1個もしくは2個の手順を踏む必要があります。これはアクセスするリポジトリの種類によって変わります。ファイルベースのリポジトリへの接続を作成する場合、MDSリポジトリのルートパスのみ指定すればよいのです。このルートパスは通常Oracle JDeveloperのホームパス内(JDEV_HOME/integration/apps)にあります。初めての場合、appsディレクトリを手作業でintegrationディレクトリ内に作成する必要がありますが、adf-config.xmlファイル内で設定することができます。
データベースベースのリポジトリ接続を作成するためには、まずmds-schemaにポイントするそれぞれのデータベース接続を定義する必要があります。その後、MDS接続をデータベース接続に基づいて作成することができます。図6はOracle JDeveloperの接続ウィザードです。
図6 Connection Wizard
The adf-config.xml
adf-configファイルは当初Oracle ADFアプリケーションでのみ使われてた設定ファイルですが、現在ではOracle SOA SuiteやOracle WebCenterなどのOracle Fusion Middlewareコンポーネントでも使われています。このファイルは以下のOracle ADFアプリケーションレベルの設定を含んでいます。
  • メタデータの検証
  • リソースバンドルのキャッシュ
  • タスクフローの設定
  • 暗黙的なセーブポイント
  • Oracle ADFビジネスコンポーネントのグローバル設定
  • Oracle ADFセキュリティ
  • シード・カスタマイズ
  • ユーザ・カスタマイズ
  • 変更永続性
  • MDSリポジトリ
こうした設定は通常デプロイ時や実行時に変更します。これらの設定に関する詳細は、以下のドキュメントをご覧下さい。
Oracle® Fusion Middleware Fusion Developer's Guide for Oracle Application Development Framework 11g Release 1 (11.1.1)
http://docs.oracle.com/cd/E15523_01/web.1111/b31974/title.htm
Oracle® Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド 11gリリース1(11.1.1.6.0)
http://docs.oracle.com/cd/E28389_01/web.1111/b52028/title.htm
SCAアプリケーション用に、Oracle JDeveloperは.adf/META-INFディレクトリ内にadf-config.xmlファイルも作成します。このadf-config.xmlファイルを使って、設計時に参照できるいくつかのMDSリポジトリを構成することができます。Oracle JDeveloperはこうした参照を使ってコンポジットを検証し、コンパイルします。以下の例はリポジトリがどのように参照されているかを示しています。
<?xml version="1.0" encoding="windows-1252" ?>
  <adf-config xmlns="http://xmlns.oracle.com/adf/config"
  xmlns:config="http://xmlns.oracle.com/bc4j/configuration"
  xmlns:adf="http://xmlns.oracle.com/adf/config/properties"
  xmlns:sec="http://xmlns.oracle.com/adf/security/config">
     <adf-adfm-config xmlns="http://xmlns.oracle.com/adfm/config">
       <defaults useBindVarsForViewCriteriaLiterals="true"/>
       <startup>
         <amconfig-overrides>
           <config:Database jbo.locking.mode="optimistic"/>
         </amconfig-overrides>
       </startup>
     </adf-adfm-config>
     <adf:adf-properties-child xmlns="http://xmlns.oracle.com/adf/config/properties">
       <adf-property name="adfAppUID" value="MdsApp3.demo.wpmds"/>
     </adf:adf-properties-child>
     <sec:adf-security-child xmlns="http://xmlns.oracle.com/adf/security/config">
       <CredentialStoreContext credentialStoreClass="oracle.adf.share.security.providers.jps.CSFCredentialStore"
 credentialStoreLocation="../../src/META-INF/jps-config.xml"/>
     </sec:adf-security-child>
<adf-mds-config xmlns="http://xmlns.oracle.com/adf/mds/config">
       <mds-config xmlns="http://xmlns.oracle.com/mds/config">
         <persistence-config> 
           <metadata-namespaces>
             <namespace metadata-store-usage="mstore-usage_1" path="/soa/shared"/>             
             <namespace metadata-store-usage="mstore-usage_2" path="/apps/WPMDSDemo2"/>    
             <namespace metadata-store-usage="mstore-usage_2" path="/apps/WPMDSDemo3"/>          
           </metadata-namespaces>           
           <metadata-store-usages>            
             <metadata-store-usage id="mstore-usage_1">               
               <metadata-store class-name="oracle.mds.persistence.stores.file.FileMetadataStore"> 
                 <property value="${oracle.home}/integration" name="metadata-path"/>                 
                 <property value="seed" name="partition-name"/>
               </metadata-store>             
             </metadata-store-usage>            
             <metadata-store-usage id="mstore-usage_2">               
               <metadata-store class-name="oracle.mds.persistence.stores.db.DBMetadataStore"> 
                 <property value="DEV1_MDS" name="jdbc-userid"/>
                 <property value="jdbc:oracle:thin:@localhost:1521:XE" name="jdbc-url"/>                 
                 <property value="soa-infra" name="partition-name"/>                     
               </metadata-store>             
             </metadata-store-usage>           
           </metadata-store-usages>         
         </persistence-config>       
       </mds-config>     
     </adf-mds-config>
</adf-config>
異なるMDSリポジトリを<persistence-config>タグ内で定義します。MDSリポジトリの構成は2個の部分から構成されています。一つは名前空間、一つはメタデータストアです。
名前空間はリポジトリ内のメタデータのホームパスを定義します。実行時にはOracle MDSリポジトリが以下の3個の事前定義済み名前空間を定義します。
  • apps: カスタムアーティファクトを格納するために予約されている名前空間
  • deployed-composites: SCAコンポジットを格納するための名前空間
  • /soa/shared: 標準のSOA Suiteアーティファクトのために予約されている名前空間
namespace タグで定義されているホームパスはOracle JDeveloperがメタデータを探索する起点として利用します。異なる複数のメタデータのホームパスを同一名で定義して、コンポジットが同一ストア内パスを参照できます。
もう一つのパートはリポジトリそのものの構成です。リポジトリはmetadata-store-usageタグ内で定義されます。このタグには先ほどnamespaceタグで定義したmetadata-store-usageに対応する参照も含んでいます。ファイルベースのリポジトリではoracle.mds.persistence.stores.file.FileMetadataStoreクラスを使い、メタデータを物理的に格納する場所を指定するメタデータパスを指定する必要があります。管理の章で述べたように、このパスは通常Oracle JDeveloperのホームディレクトリ内にありますが、OSの環境変数を使いカスタムディレクトリを定義することもできます。そのため、${oracle.home}/integrationの下のメタデータの代わりに、ユーザは${MDS.HOME}/filesディレクトリをメタデータのルートパスとして定義できます(MDS.HOMEをこの作業のために環境変数として定義する必要があります)。データベースベースのリポジトリではoracle.mds.persistence.stores.db.DBMetadataStoreクラスを使い、プロパティを定義してデータベース接続を確立する必要があります。
この章の最初に挙げた例で、2個のリポジトリを定義しました。一つ目はファイルベースのリポジトリで、ルートパスは${oracle.home}/integrationでした。このリポジトリは/soa/sharedをホームパスとして定義しているmstore-usage_1を参照しています。言い換えれば、Oracle JDeveloperはメタデータを${oracle.home}/integration/soa/sharedというパスで探索します。環境変数を使って、上述の通り、${oracle.home}とは異なる場所を指定することができます。例えば、${MDS.HOME}/integration/soa/sharedもしくは${metadata.dir}/integration/soa/sharedといった具合です。
もう一つはデータベースリポジトリで、mstore-usage_2を参照しています。mstore-usage_2が2度定義されているため、Oracle JDeveloperはSCAコンポジットで参照しているメタデータを探索するためのホームパスとして、両方のパス(/apps/WPMDSDemo2/apps/WPMDSDemo3)を使います。

SCAとMDS

これまでのコンセプトを全て公開してやっと、ローカルでメタデータを持たずに外部リポジトリからメタデータを参照するSCAコンポジットを開発する方法を説明することができます。このアプローチを使う主な理由は、コンポーネントのインターフェース定義をその実装から分離することを指示する開発のベストプラクティスに従うことです。図7は、このアプローチを示しています。
図7 SCA Composites and MDS

開発時のメタデータ

たいていの場合はSCAコンポジットの開発時にはローカルファイルリポジトリを使うことを推奨しています。この構成により、開発者は他の開発者に影響せずにローカルの変更をすることが可能になります。その後、SCAコンポジットやメタデータをデータベースベースの集中管理されているMDSリポジトリがインストールされているテスト環境にデプロイできます。
SCAコンポジットをその定義から分離するために、Oracle JDeveloperで少なくとも2個の独立したアプリケーションを持つことを推奨します。一つはメタデータのアプリケーション、もう一つは異なるコンポジットのためのアプリケーションです。出発点は、メタデータ·アプリケーションである必要があります。メタデータファイルも前述のWSLTコマンドを使用してデプロイできますので、メタデータ·アプリケーションは、必須ではありませんが、XMLビジュアルデザインビューと履歴レビューなどの追加のOracle JDeveloperの機能を活用するためにメタデータのプロジェクトを持っているほうがいいでしょう。メタデータ·アプリケーションは、ファイルを対応するフォルダ構造に保存する1つの汎用プロジェクトを含みます。異なるコンポジット間で共有するすべてのXSD、XSLT、WSDL、およびXMLのアーティファクトは、このプロジェクトに存在する必要があります。図8は、サンプルのMDSプロジェクトを示しています。
図8 MDS Project
プロジェクトを作成したら、WSLTコマンドまたはSCA Antスクリプトまたは直接Oracle JDeveloperを使ってデプロイできます。これらのアプローチは、次のセクションで詳細に説明します。
SCAコンポジットは、MDSリポジトリ内のメタデータへの参照を使用して開発されるべきです。通常、コンポジット定義ファイル、メディエータ、BPELプロセス、およびその他のコンポーネントは、ローカルファイルシステムまたは対応するURLを使用してリモートサーバから、他のメタデータファイルを参照します。MDSリポジトリ内のファイルにはリソースアクセスに利用可能なURLがあり、以下のようになっています。
oramds:/apps/directory1/directory2/someFile.wsdl
oramdsというプレースホルダはリソースがMDSリポジトリ内に存在することを示すために使われます。Oracle JDeveloperはadf-config.xmlを探して構成されたリポジトリからリソースを探索します。Oracle SOA Suiteはoramdsキーワードを解釈し、インストールで構成されたリポジトリ内のリソースを探します。メタデータが格納されている標準のパスはappsです。Oracle JDeveloperやSCA Antスクリプトでデプロイする場合、メタデータ構造の全体をappディレクトリに格納します。他のディレクトリやファイルはメタデータプロジェクト自体によって変わります。
Oracle JDeveloperは、リソースを探索したり含めることができるナビゲータ画面を提供しているので、SCAコンポジットのアーティファクトにMDSのURLを含めることが簡単になっています。このナビゲータ画面はIDE接続の中のMDS接続を選択し、SOAリソース·ブラウザから利用できます。MDS接続はリポジトリをナビゲートできる、ということがポイントです。図9は、MDSナビゲータ画面の様子です。
図9 MDS Navigator in Oracle JDeveloper
リソースを選択した後、Oracle JDeveloperはoramds:/apps/...の形でURLを生成します。
ファイルが変更されないので、XML、XSLT、XSDをローカルファイルやリモートサーバでなくMDSリポジトリから含めることが簡単でしょう。WSDLファイルの場合、エンドポイントアドレスの問題があります。エンドポイントアドレスはデプロイに特有の情報であるのに対し、WSDLファイルは汎用的なリソースであるため、MDSリポジトリ内に格納されているWSDLファイルは、エンドポイントアドレスを保持しないようにすべきでです。SCAコンポジットのうちWSDLを参照としてインポートするものはエンドポイントアドレスをcomposite.xmlファイルに定義することができます。このプロパティは構成プランや実行時にOracle Enterprise Manager Fusion Middleware Controlのコンソールから変更できます。このように参照のバインディング内のエンドポイントプロパティを定義することにより実現できます。
<binding.ws port="http://xmlns.oracle.com/bpel/workflow/taskService#wsdl.en
dpoint(TaskService/TaskServicePortSAML)"
location="http://localhost:7001/integration/services/TaskService/
TaskServicePortSAML?ORAWSDL"
soapVersion="1.1">
<property name="weblogic.wsee.wsat.transaction.flowOption"
type="xs:string" many="false">WSDLDriven</property>
<property name="endpointURI"
type="xs:string">http://localhost:7001/integration/services/TaskService/
TaskServicePort</property>
</binding.ws>
このプロパティを後で実行時にOracle Enterprise Manager Fusion Middleware Controlの[サービス]/[プロパティの参照]メニューから変更できます。図10はコンソールの例です。
図10 Endpoints in the Oracle Enterprise Manager Fusion Middleware Control Console

SCAとMDSのデプロイ

メタデータプロジェクトをまずデプロイするのは、SCAコンポジットがメタデータに依存していて、そのままではSCAコンポジットをデプロイできないためです。先ほど述べた通り、メタデータのデプロイには3つの方法(WLSTコマンドの利用、Antスクリプトの利用、Oracle JDeveloperの利用)があります。

WLST Commands
MDSファイルのデプロイ用に2個の異なるWLSTコマンド、importMetadatasca_deployCompositeがあります。 どのコマンドを使う場合でも、Oracle SOA Suiiteのインストール環境(通常 SOA_HOME/common/bin)からWLSTツールを使ってコマンドを実行します。また、importMetadataコマンドはオンラインで実行する必要があるため、最初にconnect()する必要があります。
importMetadataコマンドを使い、一つ以上のファイルをワイルドカードを使ってリポジトリにデプロイできます。このコマンドに3個の必須パラメータがあります。
  • 最初のパラメータは、メタデータをOracle SOA Suiteにデプロイし参照するため、対応する値としてアプリケーション名(soa-infra)を使う
  • 次のパラメータはサーバ名で、Oracle SOA Suiteがインストールされている管理対象サーバ名
  • 3個目のパラメータはドキュメント転送対象のソースディレクトリ。このパラメータをdocsパラメータ(省略可能)と共に使うと、転送対象のファイルをフィルタリングすることができる。このパラメータではワイルドカード(*や**)が利用でき、所望のファイルをフィルタリングすることができる。このパラメータは指定された構造全てをインポートすることに注意すること。そのため、docs='/apps/directory1/*.txt'をパラメータとして指定した場合、txtで終わる全てのファイルがリポジトリの/apps/directory1に転送される。
以下はimportMetadataコマンドの利用例です。
importMetadata(application='soa-infra', server='AdminServer',fromLocation='D:\mywork\WPMDSDemo\MDSFiles',
docs='/apps/WPMDSDemo3/**')
このコマンドは D:\mywork\WPMDSDemo\MDSFiles\apps\WPMDSDemo3 のファイルを全てリポジトリの /apps/WPMDSDemo3 ディレクトリに移送します。このコマンドの詳細はOracle Fusion Middleware WebLogic Scripting Tool Command Referenceをご覧下さい。
Oracle® Fusion Middleware WebLogic Scripting Tool Command Reference 11g Release 1 (10.3.6)
http://docs.oracle.com/cd/E23943_01/web.1111/e13813/toc.htm
sca_deployCompositeコマンドはコンポジットを実際にデプロイするためのコマンドですが、メタデータファイルのデプロイにも利用できます。importMetadataはより汎用的で他のテクノロジー(Oracle ADFなど)でも利用可能であるのに対し、sca_deployCompositeは特にSCAコンポジット向けに開発されているため、このコマンドは使いやすいのです。このコマンドは単一ファイルをデプロイしませんので、全メタデータファイルを一つのJARファイルやSOAバンドルにまとめル必要があります。
sca_deployCompositeコマンドには、ターゲットサーバのURL(Oracle SOA Suiteがインストールされている管理対象サーバ)と、SOAバンドルもしくはJARファイルの場所という、2個のパラメータが必要です。以下はコマンドの利用サンプルです。
sca_deployComposite("http://localhost:7001","D:\mywork\WPMDSDemo
\MDSFiles\deploy\mds.jar")
このコマンドに関する詳細は、Oracle Fusion Middleware WebLogic Scripting Tool Command Referenceをご覧下さい。
Oracle® Fusion Middleware WebLogic Scripting Tool Command Reference 11g Release 1 (10.3.6)
http://docs.oracle.com/cd/E23943_01/web.1111/e13813/toc.htm 
Ant Script
Oracle JDeveloperには、SCAコンポジットの管理を賄う数種類のAntスクリプトが同梱されています。ant-sca-deploy.xmlスクリプトを使うと、コンポジットやメタデータファイルのデプロイが可能です。WLSTのsca_deployCompositeコマンドを使う場合と同様、メタデータファイルをJARファイルもしくはSOAバンドルに事前にパッケージ化しておく必要があります。
以下はant-sca-deploy.xmlスクリプトを使ってメタデータファイルをデプロイするサンプルです。
ant -f ant-sca-deploy.xml -DserverURL=http://localhost:7001 
-DsarLocation= D:\mywork\WPMDSDemo\MDSFiles\deploy\mds.jar)
詳細は以下のドキュメントをどうぞ。
Oracle® Fusion Middleware Developer's Guide for Oracle SOA Suite 11g Release 1 (11.1.1.6.3)
http://docs.oracle.com/cd/E23943_01/dev.1111/e10224/title_soase.htm
Oracle® Fusion Middleware Oracle SOA Suite開発者ガイド 11g リリース1 (11.1.1.6.2)
http://docs.oracle.com/cd/E28389_01/dev.1111/b56238/title_soase.htm
Oracle JDeveloper
他のテクノロジーと同様、JDeveloperはあーティファクトをリモートサーバにデプロイする機能を提供します。メタデータファイルのデプロイは主要な2ステップからなります。第1段階はメタデータプロジェクトをJARファイルにデプロイし、その後、soa-bundleをアプリケーションレベルで作成します。soa-bundleのデプロイメントプロファイルは先ほど作成したJARファイルを含む必要があります。JDeveloperを使ってデプロイする方法に関する詳細は、以下のドキュメントをご覧下さい。
Oracle® Fusion Middleware Developer's Guide for Oracle SOA Suite 11g Release 1 (11.1.1.6.3)
http://docs.oracle.com/cd/E23943_01/dev.1111/e10224/title_soase.htm
Oracle® Fusion Middleware Oracle SOA Suite開発者ガイド 11g リリース1 (11.1.1.6.2)
http://docs.oracle.com/cd/E28389_01/dev.1111/b56238/title_soase.htm
メタデータファイルをMDSリポジトリにデプロイした後にコンポジットを通常通り特段の変更なくデプロイすることができます。

まとめ

メタデータは全てのSCA開発で重要な部分で、インターフェース、参照されるサービス、データ構造、メッセージ、これらのメッセージの変換を定義しています。これらのメタデータファイルの一部を一つのSCAコンポジット内で使用したり、複数のSCAコンポジット内で使用したりする場合があります、特にWSDLファイルの場合、メタデータをコンポジット間で共有する必要があります。
共有メタデータファイルを集中管理されたリポジトリに格納すると、以下の利点があります。
  • Consistency: 全てのコンポーネントは同一バージョンのメタデータを参照し、重複データの結果生まれる不整合がなくなります。
  • Ease of maintenance: メタデータは1カ所のみで維持管理されなければなりません。
  • Ease of change: メタデータの変更は参照する全てのコンポジットに反映されます。
  • Reuse of metadata: 全てのメタデータを一つの集中管理したリポジトリで保持することにより、以前定義した構成の再利用を強制します。
以下の理由により、MDSリポジトリは集中管理したリポジトリにメタデータを格納する最善の選択しです。
  • Oracle SOA Suiteネイティブで、実際に、Oracle SOA Suiteがコンポジットをデプロイする際に自動的に利用する
  • Oracle JDeveloperは、SCAコンポジットを開発する上でMDSリポジトリの使用をサポートしている
  • ファイルベースとデータベース·ベースのリポジトリは両方とも、(開発や本番といった)異なる環境でサポートしている
  • SCAコンポジットは、使用されているリポジトリの種類とその位置から独立しています。コンポジットのデプロイプロセスはメタデータ·ファイルがローカルに格納されている場合と同様。
  • パーティショニングやバージョニング、変更検知などの追加機能が提供されている
  • MDSリポジトリをOracle JDeveloperからグラフィカルに遷移できる
  • Oracle Enterprise Manager Fusion Middleware ControlからMDSリポジトリを簡単に設定できる
集中管理したメタデータリポジトリの利用は、そのメタデータを共有するコンポジットに適しています。 MDSリポジトリは、こうした要求に応えるだけでなく、エンドソリューションに堅牢性を追加するという付加機能を提供します。

参考資料

2012年9月15日

[OSB, Support] Upcoming Customer WebCast: Adapters and JCA Transport in Oracle Service Bus 11g

原文はこちら。
https://blogs.oracle.com/soaproactive/entry/upcoming_customer_webcast_adapters_and

9月19日(訳注:日本時間9月19日23時から)に開催予定のWebcastで、Oracle Service Bus 11gでのJCA Adapterを使用するサービス実装方法をご紹介します。このセッションをご覧になると、Oracle Service Busと関連するサンプルやAdapterのインフォメーションセンターといった既存のリソースを使う上で役立つことでしょう。

このWebcastで取り扱うトピックは以下のようなものです。
  • JCA Transportの概要 / JCA Adapterを使ったInbound/Outboundシナリオ
  • InboundのFile Adapter、OutboundのDatabase AdapterをOracle Service Busで使った、End to Endのユースケース実装
  • OSB 11gの特定バージョンでサポートされているAdapterの情報を知る方法
  • ご利用頂けるOSBおよびSOA向けのAdapter利用例
  • Oracle Service BusでSOA Adapterの利用例を使う方法
  • Oracle Service BusでAdapterの利用サンプルを実装するライブデモ
  • AdapterのInformation CenterとOracle Service Busの情報
Webcast終了後プレゼンテーションの録画が以下のリンクにUpされます。製品カテゴリで「Oracle Fusion Middleware」を選択して下さい。
Advisor Webcasts: Current Schedule and Archived recordings [ID 740966.1]
https://support.oracle.com/rs?type=doc&id=740966.1
将来のWebcastのスケジュールも上記リンクから確認頂けます。

2012年9月14日

[VM] What's New in Oracle VM VirtualBox 4.2?

原文はこちら。
https://blogs.oracle.com/fatbloke/entry/what_s_new_in_oracle

IT業界で1年は長期間ですね。最後のVirtualBoxのリリースはおよそ1年ちょっと前のことです。この間、以下のような状況を目の当たりにしてきました。
  • クールな新しいOS(Windows 8、Chrome OS、Mountaion Lionなど)がリリースされている
  • Oracle Linux 6.3のようなエンタープライズ向けのLinuxディストリビューションや、Ubuntu 12.0.4やFedora 17のようなデスクトップ向けのディストリビューションといった、数多くの新しいLinuxディストリビューションがリリースされている
  • ふつうのPCやラップトップの性能が格段に向上している
こうした出来事の全てが本日リリースした最新のVirtualBoxに影響しています。

Powerful hosts
これまで見てきたトレンドの一つとして、平均的なホストプラットフォームがより強力になっているため、利用者が一貫してより多くのVMを実行している、というものがあります。一部の利用者は様々なビンテージものの大規模なライブラリを持っている一方で、一部の利用者は多階層のソフトウェアソリューションの様々な層(例えばデータベース層、ミドルウェア層、フロントエンド層)を組み合わせて実行するVMグループを持っていたりします。
そんなわけで、こうしたお客様のニーズに対応する、より強力になったVirtualBox Managerをご紹介できることをうれしく思っています。
VirtualBox Manager

VM Groups(VMグループ)
グループを使用すると、意味付けてVMライブラリを整理することができます。例えば、プラットフォームの種類別、プロジェクト別、バージョン別などなど。グループを作成するには、別のVMにあるVMをドラッグするか、または一つ以上のVMを選択し、メニューバーから[仮想マシン]>[グループ]を選択すればOKです。グループを展開したり折りたたんだりして画面表示領域を節約できます。グループを選択しているときに左右の矢印キーを使用して、グループに入ったり出たりすることができます(iPadのナビゲーションをイメージして下さい)。
ただし、グループは受動的なフォルダ以上のものです。というのも、全ての個々のVMではなく、グループに対して操作を実行できるからです。そのため、複数階層のソリューションを持っているばあい、1回のクリックでスタック全体を立ち上げることができます。

Autostart(自動起動)
VirtualBoxユーザの多くはVMで専用サービス(例えばWiki)を実行しています。こうしたタイプのVMのワークロードだと、ホストマシンの起動時にVMを起動したいと思ってらっしゃることでしょう。そんなわけで、4.2では、クロスプラットフォームの自動スタート機構を導入しホストサービスとしてVMを扱うことができるようにしました。
Starting virtual machines during system boot
https://www.virtualbox.org/manual/ch09.html#autostart
Headless VM Launching(ヘッドレスVMの起動)
Webサーバや、Wiki、その他のサーバー·クラスのワークロードをもつVMでは、VMのコンソールが冗長すぎます。これまで、VirtualBoxではこうしたVMのために別の起動メカニズム、すなわちコマンドライン·インタフェースから、VBoxHeadlessまたはVBoxManage startvm ... --type headlessコマンドを提供してきました。しかし4.2では、ヘッドレスVMをVM Managerからも起動できるようにしました。
VM ManagerからVMを起動するときに、単にShiftキーを押しながら起動する…ただそれだけのことです。
では、ヘッドレスVMをどのように停止すればよいのでしょう?4.2ではVM ManagerからVMを停止することができます。(ところで、ゲストVMを正常にシャットダウンするにはACPIシャットダウンを使うのが一番です)。
Shutdown VM
Easy VM Creation(VMの作成が簡単に)
詳しいユーザにとって、新しいVMを作成するためのWizardは少々退屈だったと思います。そんなわけで、たった2クリックでVMを作成できるモードを用意しました。新しいVMを作成する際の説明を隠すことができます。

Powerful VMs
ホストが強力になっているように、ホスト内で動作するゲストも強力になっています。ゲストを収容する4.2の機能をご紹介しましょう。

Virtual Network Interface Cards (仮想NIC)
4.2では、最大36個のNICをVMに割り当てることができます(ICH9チップセットエミュレーション時)。しかし、大いなる力には、大いなる責任が伴う(Obi-Wanがそんなこと言ってませんでしたっけ?)ため、不正なVMがパイプ全体を占有しないよう、帯域幅の制限機能を導入しましています。
Limiting bandwidth for network I/O
https://www.virtualbox.org/manual/ch06.html#network_bandwidth_limit
VLAN tagging(VLANのタギング)
一部のユーザがVLANを広く使っているため、E1000 NICでVLANのタギングをサポートするように機能強化しました。

Processor Performance(プロセッサ性能)
(Intelの世界でEPTと言う)Netsted PagingをサポートするCPU(Core i5やi7のほとんどが対象)を使っている場合、もしくはAMDのBulldozer以後のCPUを使っている場合、こうしたCPU向けに実施した対策によるパフォーマンスの改善に気付くはずです。プロセッサについて言えば、VIAの最新のCPUもサポート対象に追加しました。

Powerful Automation
VirtualBoxはOS上で実行されるので、ゲストVMを動作させるスクリプトを実行するホストの機能を活用することは理に適っています。Guest Automationは以前のリリースで導入されていましたが、4.2でAPIを刷新し、ゲストOSが数多くの強力なオペレーションを可能にしました。VirtualBox Programming Guide and Reference(SDK)のIGuest APIをチェックして下さい。
Oracle VM VirtualBox Programming Guide and Reference Version 4.2.0
http://download.virtualbox.org/virtualbox/SDKRef.pdf
Powerful Platforms
4.2に投入された全てのハードコアエンジニアリングの全てがその目的のために実施されました。その目的とは、仮想化の整合性のために、x86で動作するほぼすべてのOSを実行可能な、高速かつ強力なエンジンを提供することです。そういうわけで、こうしたプラットフォームをサポート対象に追加できることをうれしく思っています。
  • Mac OS X "Mountain Lion" 
  • Windows 8
  • Windows Server 2012
  • Ubuntu 12.04 (“Precise Pangolin”)
  • Fedora 17
  • Oracle Linux 6.3 
以下がその証拠です。
platforms
ゲストOSからオーディオCDの作成のサポート、双方向クリップボード制御、Linuxのゲストへのファイルのドラッグアンドドロップなどといった、細かな改善を説明する時間はないので、Oracleのサイトやコミュニティのサイトからダウンロードしてユーザガイドを垣間見たら、すぐにご利用の皆さんのためにエクササイズとして残しておきます。
ダウンロードサイト
(Oracle)http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html
(コミュニティ)https://www.virtualbox.org/wiki/Downloads
ユーザガイド(英語)
http://download.virtualbox.org/virtualbox/4.2.0/UserManual.pdf
というわけで、全体として、非常にしっかりしたリリースで、新機能や強化された機能を発見して楽しんでもらえると思います。

[Java] Java 7 Adoption at 79%

原文はこちら。
https://blogs.oracle.com/henrik/entry/java_7_adoption_at_79

Jelatsicというクラウドホスティングの会社のブログによると、彼らのプラットフォーム上でのJava 7の採用率は79%に達したということです。この一つのデータで全体を読み取るのはいささか性急ですが、Java 7の勢いが増しているという他の指標、例えばOracleのミドルウェアのお客様が採用したり、ダウンロードの統計やオンラインのアクティビティなどとも一致します。
Jelastic
http://jelastic.com/ (http://jelastic.com/ja/)
Software Stack Market Share, August 2012
http://blog.jelastic.com/2012/09/12/software-stack-market-share-august-2012/
4月のJDK 7採用の急増は、JDK 7u4のリリースと一致していました。このリリースでMac OS Xのサポートを追加されたのと、java.comでJava 7をエンドユーザ向けのデフォルトダウンロード対象としたことためで、この状況は期待通りです。Java 7が成熟していることをコミュニティに示した2個のイベントでした。
Oracle JDK and JavaFX SDK now GA on Mac OS X
https://blogs.oracle.com/henrik/entry/oracle_jdk_and_javafx_sdk
Moving to Java 7 as default
https://blogs.oracle.com/henrik/entry/moving_to_java_7_as
Java 7リリース以来、Oracleは、7個のアップデートをリリースし、Mac OSXおよびLinux/ ARMへのポーティングも行い、すべての一般的なデスクトッププラットフォームにJavaFXを拡大しました。
Oracle releases JDK for Linux ARM, JRE for Mac OS X
https://blogs.oracle.com/henrik/entry/oracle_releases_jdk_for_linux

2012年9月13日

[ADF] ADF is YouTubed

原文はこちら。
https://blogs.oracle.com/onesizedoesntfitall/entry/adf_is_youtubed


ADFをご利用の開発者の方はきっと、ADF Insider Essentialsの録画や、全てADFに関する大小取り合わせたトピックのプレゼンテーションでいっぱいのページをご存知と思います。お客さまの中には、これらの録画でAdobe Flashのアプレットを使っているためにiPadやApple OS Xのデバイスからアクセスできない、と指摘される方がいらっしゃいます。
ADF Insider Essential
http://www.oracle.com/technetwork/developer-tools/adf/learnmore/adfinsider-093342.html

こうしたニーズを満たすため、iPadでもご覧頂けるよう、動画を全てMP4としてADF Insider EssentialsのYouTube Channelにアップロードしました。我々は今、あなたのiPadの観覧の喜びのための私達のADFインサイダーEssentialsのYouTubeチャンネルにMP4sとしてすべての動画をアップロードしました。これで、PCの前に座っているとか、ソファに座りながらiPadを持っているとか関係なく、より専門的なADFのプレゼンテーションの合間にものすごいオージーアクセントを楽しんでいただけます。
新しくアップロードされたコンテンツの通知を受け取れるよう、YouTubeチャンネルを購読してください。
ADFInsiderEssentials's channel
http://www.youtube.com/ADFInsiderEssentials