2012年4月30日

[Database] Distributed transaction on Oracle Real Application Cluster database

原文はこちら。
https://blogs.oracle.com/imc/entry/distributed_transaction_on_oracle_real

このエントリでは、Oracle Real Application Clusters(以下RAC)における分散トランザクションを実装しようとした際に発生した例外の解決方法を説明します。
弊社のパートナーの環境で以下のようなエラーが発生したのですが、その際RAC上の.NETアプリケーションをテストしようとしていました。
Application Error / Event Log
System.Runtime.InteropServices.COMException (0x8004D00A): New
transaction cannot enlist in the specified transaction coordinator.

SQL*Net Trace
ORA-24798: cannot resume the distributed transaction branch on another instance
といった具合です。

開発およびテスト環境
  • Microsoft .NETで開発(訳注:.NET Frameworkのバージョン等の記載は原文にもありません)
  • DatabaseはRAC構成(構成自体に問題はありません)
  • 4個のアプリケーションサーバノード、アプリケーション側で負荷分散が有効
  • アプリケーションは、Microsoft Transaction Transaction Management Serverを利用
  • OraOLEDB.Oracleプロバイダが分散トランザクションを呼び出す

解決方法
各サービスに対する優先インスタンスおよび利用可能なインスタンスを1個以上作成しました。
srvctl add service -d DB_UNIQUE_NAME -s SERVICE_NAME1 -r NODE1 -a NODE2
srvctl add service -d DB_UNIQUE_NAME -s SERVICE_NAME2 -r NODE2 -a NODE1
ここで、
-r "<優先インスタンスのリスト>"
-a "<利用可能なインスタンスのリスト>"
です。
そして、これらのサービスに対し、DTP(Distributed Transaction Processing)をTrueに修正しました。
execute dbms_service.modify_service (service_name => 'SERVICE_NAME1' ,dtp => true);
execute dbms_service.modify_service (service_name => 'SERVICE_NAME2' ,dtp => true);
このサービスアーキテクチャを使用して同じ作業を再度繰り返した結果、エラーは発生しなくなり、期待通りに動作しました。
RAC上の分散トランザクションが原因で発生するエラーのほとんどは、このサービスの設定によって解決できます(訳注:Windowsアプリケーションの場合に限ります)。
最後に、非常に喜ばしいことに、このソリューションは、サポートのNoteとして公開されています。
ORA-24798 Distributed Transaction Exception when Connecting to a RAC Instance from a Windows Application [ID 1443954.1]
https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=1443954.1
[訳注]
アプリケーションを変更して、既存の分散トランザクションに復帰したり、参加しないようにする仕組みを採用できるのであれば、このエラーは発生せず、DTPサービスを作成する必要はありません。

2012年4月29日

[BPM] BPMN2.0 Oracle notations poster from eaiesb

原文はこちら。
https://blogs.oracle.com/soacommunity/entry/bpmn2_0_oracle_notations_poster

パートナーのeaiesb様のおかげで、素敵なBPMN 2.0のポスターをダウンロードできます。
[訳注]
Oracle BPM Suite 11gのアイコンの対応表です。

2012年4月27日

[Java] Java 7 Update 4 and Java 6 Update 32 have released!

原文はこちら。
https://blogs.oracle.com/javase/entry/java_7_update_4_and

Java SE 7u4と、6u32がダウンロードできるようになりました。
Java SE Downloads
http://www.oracle.com/technetwork/java/javase/downloads/index.html
これらのリリースには不具合の修正および性能改善が含まれています。また、7u4でははじめてOracle JDKとしてMac OS X向けのリリースを用意しました。JavaFX 2.1はWindowsとMacのJDKにバンドルされています。詳細はリリースノートをご覧下さい。
Java™ SE 7 Update 4 Update Release Notes
http://www.oracle.com/technetwork/java/javase/7u4-relnotes-1575007.htmlJava™ SE 6 Update 32 Update Release Notes
http://www.oracle.com/technetwork/java/javase/6u32-relnotes-1578471.html

[Java] Oracle JDK and JavaFX SDK now GA on Mac OS X

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

Oracle JDK 7とJavaFX 2.1 SDKがMac OS Xで利用可能になりました。このリリースはOracle JavaをMacで動作させる作業における主要なマイルストンです。これより、Oracle JDK 7とJavaFX 2.1の全てのリリース(以後のリリースを含む)はLinux、Windows、Solarisと同じタイミングでMacでも利用できるようになるでしょう。

質問回答
OS X向けJDKとJavaFX 2.1のダウンロード場所は?java.oracle.comからどうぞ。JDKにはJavaFX SDKも含まれています。
http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u4-downloads-1591156.html
このリリースには何が含まれているの?Java SE 7の完全互換実装、ほとんどのJDK開発ツールおよび完全なJavaFX 2.1 SDKです。オプションツールやデプロイメントテクノロジー(Java PluginやWeb Startなど)のいくつかはまだご利用頂けませんが、将来のリリースで追加される予定です。詳細はJDKとJavaFXのリリースノートをご覧下さい。
Update Release Notes (Java™ SE 7 Update 4)
http://www.oracle.com/technetwork/java/javase/7u4-relnotes-1575007.html
JavaFX 2.1 Release Notes
http://docs.oracle.com/javafx/2/release_notes_2-1/jfxpub-release_notes_2-1.htm
OracleはMacでJDK 7を使っているNetBeansをサポートするの?はい、NetBeans 7.1.2はJDK 7 Update 4と同時にリリースされましたが、これはMac上でのOracle JDKの利用も完全にサポートしています。発表内容とダウンロードは以下のリンクからどうぞ。
Download New NetBeans IDE 7.1.2, Now Supporting Java SE 7u4
http://netbeans.org/community/news/show/1556.html
NetBeans IDE 7.1.2 ダウンロード
http://netbeans.org/downloads/index.html
このリリースの既知の問題は?Mac OS Xは主要な新しいプラットフォームで、長期にわたって追加する最初の新しいプラットフォームです。そのため"1.0"リリースと考えるべきで、既知の問題がたくさんあります。詳細はリリースノートに記載しています。
Update Release Notes (Java™ SE 7 Update 4)
http://www.oracle.com/technetwork/java/javase/7u4-relnotes-1575007.html
JavaFX 2.1 Release Notes
http://docs.oracle.com/javafx/2/release_notes_2-1/jfxpub-release_notes_2-1.htm
新しく問題を見つけたらどうしたらいい?まずはリリースノートで既知の問題かどうかを確認して下さい。適切なメーリングリストやWebのフォーラムでトラブルシューティングや確認の助けを借りることができます。そのあと、我々のバグシステムにレポートを投稿して下さい。
JDK 7 Mailing List
http://java.net/projects/jdk7/lists
Web Forum
https://forums.oracle.com/forums/main.jspa?categoryID=84
バグ登録システム
http://bugreport.sun.com/bugreport/
ソースコードをOS Xにポーティングしていいの?はい、全てのJDKのコードはOpenJDKコミュニティのMac OSXポーティングプロジェクトでご覧頂けます。Java FXは一部OpenJFXプロジェクトでオープンソースになっています。Oracleは残りの部分もオープンソース化することをすすめています。
OpenJDKコミュニティ
http://openjdk.java.net/
Mac OS X Port Project
http://openjdk.java.net/projects/macosx-port/
OpenJFX Project
http://openjdk.java.net/projects/openjfx/
どのハードウェアとOSがサポート対象?OracleのJDKおよびJavaFXは任意のIntel 64bit CPUのMacおよびOS X Lionをサポートします。具体的には、64bit版のみの実装なので、64bitOSが必要です。
古いOS XのバージョンでOracle JDKを使える?多分無理でしょう。根底の問題はOracle JDKがAppleがLionで導入したAPIを必要としているからです。これらの新しいAPIがもたらす機能は古いOS Xのバージョンでも存在はしていましたが、公式のAPIではありませんでした。
32bit JVMが必要な場合、もしくは古いPowerPCベースのMacでのサポートが必要な場合にはどうすればいい?OpenJDKベースのコミュニティの取り組みで、他の構成向けのJDK 7を作成されています。お好みの検索エンジンで簡単にみつかりますよ。これらの取り組みを称賛します。
Mac OS XでのOracle JDKやJavaFXに対する商用サポートはしてもらえるの?これらは標準のOracleのリリースとみなされるため、Java SEのサポートプログラムの下で対応します。ご注意頂きたいのは、Macのサポートは開発用途に限るというものです。例えば、Macでビジネスクリティカルなサーバーサイドのアプリケーションを実行しないようにして下さい。
Java SE Support
http://www.oracle.com/us/technologies/java/standard-edition/support/overview/index.html
ロードマップはどうなっている?Mac上のOracle JDKおよびJavaFXの将来のリリースは通常のJDKリリースと同様、毎年4~6回のリリースを予定しています。次回のメジャーマイルストンはJDK 7 Update 6で、この段階でPluginとWeb Startを追加する計画です。アーリーアクセスビルドは以下のリンクからダウンロードできます。JDK 8でも当然ながらMac OS Xをサポートする予定です。
Java™ Platform, Standard Edition 7 Update 6 Developer Preview Releases
http://jdk7.java.net/archive/7u6-b07.html

2012年4月26日

[Java] Java EE 7 Platform Early Draft Specification Now Available

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

Java EE 7 Platform Expert GroupがJava EE 7仕様の早期ドラフトをリリースしました。Appendix EE. Bにはこのバージョンでの全ての変更が記載されています。
JSR-000342 JavaTM Platform, Enterprise Edition 7
(Close of Early Draft Review: 23 May 2012)
http://jcp.org/aboutJava/communityprocess/edr/jsr342/index.html
関連するWeb Profileの早期ドラフトもリリースされ、Applendix WIP.A.1には以前のバージョンからの変更点が記載されています。

JCP 2.8のTransparancy Ruleに従い、進捗はjavaee-spec.java.netで監視できます。フィードバックはusers@javaee-specで投稿できます。
Java EE Platform Specification
http://javaee-spec.java.net/Users Mailing List(users@javaee-spec.java.net)
http://java.net/projects/javaee-spec/lists/users/archive
以下の個々のコンポーネントの各仕様の早期ドラフトもリリースされています。

2012年4月25日

[Java] Spring to Java EE Migration – Part 4, the Finale

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

David Heffelfingerの一連の投稿の最終回、"Spring to Java EE Migration, Part 4"がOTNにUpされています。この投稿ではSpring FrameworkからJava EEへ簡単に移行できることを説明しています。今回はMVCデザインパターンの実装、データアクセス、トランザクション管理、Dependency Injectionなどについて、Java EEとSpringの機能比較をしています。

Davidはこのように締めくくっています。
この一連の投稿で、SpringのペットクリニックアプリケーションのJava EEバージョンを開発しました。NetBeansの高度なツールのおかげで、非常に短時間でJava EEアプリケーションを開発できることがわかりました。アプリケーションのJava EEバージョンを構築したのち、Springバージョンと比較したところ、Springバージョンではいくつか依存関係があるのに対し、Java EEバージョンには依存関係がないことがわかりました。、これはJava EEアプリケーションサーバの提供する全てのサービスを利用しているためです。
最後に、MVCやDAOの実装、トランザクション管理、およびDependency Injectionといった機能の実装方法について、SpringとJava EEで比較しました。Springの場合、コードにアノテーションを追加する以外にいくつかのXMLの構成ファイルを用意する必要があります。Java EEは慣例に依存しており、ほとんどの場合、XMLの構成ファイルがなくてもこれらのサービスを実装することができます。
Springの新しいバージョンは以前のバージョンに比べてはるかにXML構成ファイルが減っていますが、とはいえ、ほとんどのSpringのアノテーションが有効に働くよう、DRY(同じことは繰り返さない)​​の原則に反して、ちょっとした設定をXML構成ファイルに追加しなければならず、そうした設定が常にあちこちに存在します。
さらに、TomcatやJettyといった軽量サーブレットコンテナで実行することを意図しており、これらのコンテナは必要な機能を全て提供しているわけではないので、Springアプリケーションはいくつかの依存性を持つ傾向にあります。対照的に、Java EEアプリケーションは、Oracle GlassFish Serverのような本格的なJava EE 6アプリケーションサーバにデプロイされることを意図しています。
これらの理由から、エンタープライズ·アプリケーションの開発には常にSpringよりもJava EEをお勧めします。
投稿はこちらからご覧下さい。
Spring to Java EE Migration, Part 4 (David Heffelfinger)
http://www.oracle.com/technetwork/articles/java/springtojavaee4-1592643.html

[WLS] Oracle WebLogic Server 12c Specialization Exams have arrived

原文はこちら。
https://blogs.oracle.com/cloudappfoundation/entry/oracle_weblogic_server_12c_specialization

[訳注]
このエントリの内容はパートナー様限定です(アカウントが必要です)。
試験は全て英語です。現時点では日本語での試験提供予定は決まっていません。

Oracle WebLogic Server 12cのスペシャリストになるためのまさに最初の一人になりましょう!WebLogic Server Knowledge ZoneにてSpecialization criteriaに移動し、WebLogic Server 12c Specialized Partnerになる方法を入手して下さい。
Oracle WebLogic Server Knowledge Zone
http://www.oracle.com/partners/en/knowledge-zone/middleware/weblogic-server-1505898.html
以下のアセスメント試験に合格して、能力の基準に到達しているか確認してください。
OPNコンピテンシーセンターで、 Specialist Guided Leaning Pathにアクセスし、試験に合格するための製品情報を入手して下さい。
2012年4月21日現在、(1Z1-599) Oracle WebLogic Server 12c Essentials Exam がベータ試験として受験できます。opn-edu_ww@oracle.comにメールをお送り頂くと、この試験の無料バウチャーを先着順でお送りします。

Oracle WebLogic Server 12c Essentials
http://www.oracle.com/partners/en/knowledge-zone/middleware/wls12cexampage-1595582.html

詳細情報は以下からどうぞ。
お問い合わせは、Oracle Partner Enablement チーム(opn-edu_ww@oracle.com)に直接お願いします。

[Java] 7u6 Developer Preview is Available

原文はこちら。
https://blogs.oracle.com/javase/entry/7u4_developer_preview_is_available

Java SE 7 Update 6のアーリーアクセスビルドがダウンロードできるようになりました。
Java SE 7 Update 6 Early Access Build
http://jdk7.java.net/archive/7u6-b07.html
このリリースには、以前の7u4 Mac JDKでは利用できなかったMac向けJava Pluginと、Webstartの機能が含まれています。是非お試し頂いて、フィードバック頂ければと思います。
バグの報告はこちらからどうぞ。
Report a Bug or Request a Feature
http://bugreport.sun.com
コメントはこちらにお寄せ下さい。
Java SE Snapshots: Project Feedback
http://www.java.net/forums/jdk/java-se-snapshots-project-feedback?force=259

2012年4月23日

[Java] Expression Language 3.0 / JSR 341 Early Draft Now Available

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

JSP 2.0以後、Expression Language (EL、式言語) は別の仕様になりましたが、今なお同じJSRに含まれています。JSR 341はELを別の仕様に位置づけています。専門家グループ(Expert Group)はExpression Language 3.0の早期ドラフトを公式レビュー向けに掲載したことを発表しました。
JSR 341: Expression Language 3.0
http://jcp.org/en/jsr/detail?id=341
JSR-000341 Expression Language 3.0
http://jcp.org/aboutJava/communityprocess/edr/jsr341/index.html
このJSRの主要なゴールは、ELContextを分離してコンテキストを解析・評価したり、等式のような演算子や文字列連結などを追加したり、式の評価前・中・後にイベントを生成するようなCDIとの統合することにあります。

ぜひ早期ドラフトをダウンロードして、仕様のアップデートを追いかけて下さい。EL 3.0(JSR 341)の詳細については、java.netのJSRプロジェクトをチェックして下さい。専門家グループの議論のアーカイブは、jsr341-expertsで入手可能ですし、メーリングリストのページでusers@el-specやその他のエイリアスを購読することができます。
Expression Language Specification
http://java.net/projects/el-spec/
Expression Language Specification Wiki
http://java.net/projects/el-spec/pages/Home
Expert Group Mailing List
http://java.net/projects/el-spec/lists/jsr341-experts/archive
Expression Language Specification Mailing Lists
http://java.net/projects/el-spec/lists

[Java] JMS 2.0 Early Draft - Simplified API Sample Code

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

Java Message Service (JSR 343) はJava EE 7の一部として改訂される作業が進んでいます。仕様の早期ドラフトは数週間前から利用可能になっており、オンラインのJavaDocも利用できます。その他の仕様(Java EE 7に含まれるJPA 2.1JAX-RS 2.0EJB 3.2JavaServer Faces 2CDI 1.1など)の早期ドラフトもリリースされています。仕様の一部を以下のリンクで詳細に説明してくれています。
このエントリでは、JMS 2.0早期ドラフトのアップデートをお伝えしたいと考えています。

JMS 1.1は2003年12月にリリースされました。その当時からこれまでに、Javaの世界ではたくさんの変更がありました。annotation、generics、auto-closeable、dependency injection、その他たくさんの変化がありました。Java EEプラットフォーム自体が、それ以来広範囲に進化してきましたが、特にJava EE 6は"ゲームチェンジャー"と呼ぶべき存在です。いまなお開発されている複数のJMS実装があり、開発・デプロイの実績もたくさんあります。
そのすべてを維持しつつ、JMS2.0の主な目標は以下のとおりです。
  • 開発を容易にする変更
  • JMSと他のJava EE仕様間の関係の明確化
  • 新しい必須APIを定義し、任意のJMSプロバイダがJava EEアプリケーションサーバと統合可能にする
  • Java EE 7をサポートする拡張
  • コミュニティより要求があったその他の機能強化
このエントリでは早期ドラフトの11.4からコードサンプルを取り出し、JMS 2.0になるとどれほど簡単に開発ができるようになるかを取り上げます。

以下は既存のJMS APIを使ってメッセージを送信する場合のコード例です。
@Resource(lookup = "jms/connectionFactory")
ConnectionFactory connectionFactory;

@Resource(lookup="jms/inboundQueue")
Queue inboundQueue;

public void sendMessageOld (String payload) {
  Connection connection = null;
  try {
    connection = connectionFactory.createConnection();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    MessageProducer messageProducer = session.createProducer(inboundQueue);
    TextMessage textMessage = session.createTextMessage(payload);
    messageProducer.send(textMessage);
  } catch (JMSException e) {
    // do something
  } finally {
    try {
      if (connection != null)
        connection.close();
    } catch (JMSException e2) {
      // do something else
    }
  }
}
問題なく動作しますが、いくつか問題があります。
  1. メッセージ送信のために複数の中間オブジェクト(ConnectionSessionMessageProducerなど)の作成が必要。こうしたオブジェクトには全て目的があるが、JMSアプリケーションが複雑になってしまう。また、お作法のような決まり切ったコードがたくさん必要になる。
  2. createSessionの引数がわかりづらい。第1引数はセッションがトランザクショナルか否かを指定する。第2引数は、メッセージ受信のセッションの場合、メッセージのACKを返す方法について指定する。これらの2個の引数は独立していないので、第1引数をtrueとする場合、第2引数は無意味になり、第1引数のみが必要。
    その他、このメソッドがEJBに存在する場合トランザクションはコンテナが管理する。Bean-Managed Transactionを使っている場合、トランザクションはJMS APIではなく、UserTransactionで開始し、コミットする。実のところ、EJBの仕様によると、このコードがトランザクション内にある場合、createSessionへの引数は完全に無視されてしまうが、いくつかの引数を指定してコントラクトを満足させる必要がある。
  3. Connectionは明示的にfinallyブロック内でクローズし、サーバ上のリソースを適切にリリースする必要がある。コードにはMessageProducerSessionのクローズがないので、finallyブロックがネストした例外処理で見苦しくなっている。
では、新しいAPIだとどれほどプログラミングモデルを簡単になるか見てみましょう。
@Resource(lookup = "jms/connectionFactory")
ConnectionFactory connectionFactory;

@Resource(lookup="jms/inboundQueue")
Queue inboundQueue;

public void sendMessageNew (String payload) {
  try (JMSContext context = connectionFactory.createContext();){
    context.send(inboundQueue,payload);
  }
}
シンプルでしょう?

大きな変更点は以下の通りです。
  1. 全ての定型コードがなくなっている。その代わりに、ConnectionFactoryを作成し、そこからコンテキストを作成し、コンテキストのsendメソッドを呼び出している。
  2. 送り先(inboundQueue)をMessageProducerではなく、sendメソッドで指定している。
  3. Connectionは自動的にクローズされるので、tryブロックは自動的にクローズする。
  4. 新しいメソッドはランタイム例外を送出するのでコードが非常にすっきりする。
Dependency Injectionを使う場合、コードをもっとシンプルにすることができます。
@Inject
@JMSConnectionFactory("jms/connectionFactory")
private JMSContext context;

@Resource(mappedName = "jms/inboundQueue")
private Queue inboundQueue;

public void sendMessageNew(String payload) {
  context.send(inboundQueue, payload);
}
ここで特記しておくと、Some clean ups to note here are ...
  • アプリケーションによるJMSContextの初期化は不要
  • 同一CDIスコープであれば、injectされた同一のJMSContextを他の場所でも利用可能。
クールでしょ?
次はシンプルになったAPIでメッセージを同期受信する例です。
@Inject
@JMSConnectionFactory("jms/connectionFactory")
private JMSContext context;

@Resource(lookup="jms/inboundQueue")
Queue inboundQueue;

public String receiveMessageNew() {
  JMSConsumer consumer = context.createConsumer(inboundQueue);
  return consumer.receivePayload(String.class);
}
JMS 2.0早期ドラフトの11.4には、標準API(もしくは既存のAPI)とシンプル(もしくは新しい)APIを使ったサンプルがたくさんあります。

JMS 2.0専門家グループが向いている方向を好ましく思っていますか?フィードバックをしたり、貢献したいと思いませんか?

JMS 2.0に関する最新の進捗は以下のリソースから追跡できます。
JMS 2.0を改良し、シンプルかつ使いやすくするために、ユーザメーリングリストに参加頂いて、皆様のお知恵を分けて下さい!

2012年4月20日

[Identity Management, Hardware] Optimized Solution for Oracle Unified Directory

原文はこちら。
https://blogs.oracle.com/sduloutr/entry/optimized_solution_for_oracle_unified

Oracle Optimized Solution for Oracle Unified Directoryは完全なソリューションです。まさに、Software and Harware engineered to work togetherというものです。
Oracle Unified DirectoryがOracleのSPARC T4 Serverで動作するディレクトリサービスは、完全なエンタープライズインフラストラクチャおよびエンタープライズアプリケーション向けに高可用性および比類無き高性能を提供します。エンタープライズ環境でシンプルな運用、性能、セキュリティ、コスト削減を実現するために、このソリューションは設計され、最適化し、テストされています。
詳細は以下のURLからどうぞ。
Oracle Optimized Solution for Oracle Unified Directory
http://www.oracle.com/us/solutions/1571310 

[Exadata] Updating Exadata Compute Nodes using ULN and YUM starting 11.2.3.1

原文はこちら。
https://blogs.oracle.com/XPSONHA/entry/updating_exadata_compute_nodes_using

この記事では、Exadata計画メンテナンス(Exadata Compute Node用の新しい11.2.3.1 ULN 更新プロシージャ)に関するアップデートをお知らせします。

すでにご存知かもしれませんが、Oracle Exadata Storage Server release 11.2.3.1以後、 'minimal pack' は非推奨になっています。
今後、(Linux) Compute NodeはYellowdog Updater, Modified (YUM)を使って、RPMパッケージとして新たなアップデートを適用していきます。
これらのRPMパッケージはULNから入手します。RPMパッケージには同じアップデートプロシージャで適用できるファームウェアのアップデートも含む場合があります。

YUMを使ってExadata Compute Nodeを更新するためには、ソフトウェアをダウンロードするリポジトリが必要です。もちろん、Oracleは、お客様にULNへのアクセスを提供しており、これにより本当に簡単に実現できます。しかしそれはCompute NodeからWebへHTTPでアクセスするという要件が、何らかの理由でできない場合がありますが、こうした状況に対して、Oracleは、代替ソリューションを用意しました。

この記事で、お客様のデータセンターにYUMリポジトリをセットアップするというソリューション、を説明したいと思っています。これはULNからアップデートをダウンロードでき、YUMリポジトリとしてULNとCompute Node間の「中の人」のようにCompute NodeのYUMリポジトリとして振る舞うローカルシステムです。

内部/ローカルのYUMリポジトリのセットアップを計画しているものの、まだ11.2.3.1ではない場合、パッチ適用をはじめる前に慎重に検討すべき事柄が2つあります。

README for patch 13741363: Especially chapter 3 "Performing One-Time Setup on Database Servers of Oracle Exadata Database Machine"

ここで記載されている手順は、全てのCompute Nodeが利用するYUMリポジトリサーバを準備および追加する際に1度だけやればよいものです。一番よいのは、YUMリポジトリサーバをOEL4もしくは5が動作する別のLinuxマシンにインストールすることです。基本的な手順は以下の通りです。
  1. ブラウザで http://linux.oracle.com を開く
  2. 登録ステップでは、ハードウェアCSIを利用
  3. YUMリポジトリサーバを登録
  4. 正しいチャネルを購読してリポジトリを追加
ダウンロードが完了したら、リポジトリは"ビルド"されて”ローカル”の状態になっています。Compute Nodeがローカルネットワーク上からダウンロードするために、HTTPで利用できるようにする必要があります。

リポジトリのセットアップ後、V2/X2-2とX2-8のCompute NodeはOne-Timeセットアップが必要です。その後、YUMを利用することができます。One-Timeの手順では、後のセットアップで失敗する原因になる可能性がある一連のパッケージを削除しますが、それだけではなく、YUMを使ってのインストールが成功するように別のパッケージを追加しています。

次のOne-Timeセットアップの重要な手順の一つに十分に注意して下さい。
  • リポジトリ構成ファイル(/etc/yum.repos.d/Exadata-computenode.repo)を編集し、直接ULNにアクセスしないなら、ローカルのYUMリポジトリを参照していることを確認しましょう。
README for 13536739: Especially chapter 6 "Updating Oracle Linux Database Servers in Oracle Exadata Database Machine"

リポジトリの設定が終了し、Compute NodeがYUMを利用できるようになったら、やるべきことが一つあります。それは、YUMをアップデートすることです。このプロセスの重要なステップは、各計算ノードが新しいリポジトリを利用できるということです。この後、いくつかのパッケージ(ofed1)は、インストール内容に応じてダウングレードする必要があり、カーネルのバージョンのチェックが必要です。これが終われば、'yum install'という簡単なコマンドでシステムをアップデートでき、主要なExadata データベースサーバのRPMを依存関係のあるパッケージを全てインストールしていきます。インストールの最後にCompute Nodeは自動で再起動します。

ここで見解および免責事項を…
  • 正確な手順については、1374136313536739のメモを参照してください、私はローカルリポジトリを設定し、それを使用して計算ノードを構成するための全体的な手順を説明するために一部を取り上げたにすぎません。
  • Compute Nodesを直接ULNに接続することができるのであれば、りぽじとりの設定は不要で、関連する手順を飛ばすことが出来ます。
  • X2-2(それ以前のものを含む)とX2-8の場合、OracleのLinuxデータベース·サーバーの更新の手順は少々異なります。
  • Oracleは、もっと簡単にできるよう、上記の手順を 自動化するためのヘルパー'スクリプトを提供しています。
  • この手順は、11.2.2.4.2以降のイメージを持つLinuxのCompute Nodeにのみ適用します(11.2.3.1より前のバージョンへのアップデートの場合、minimal packを使う必要があります)。

2012年4月18日

[Java] WebSockets and Java EE 7: JSR 356 Starting Up

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

JSR 356として知られているJava API for WebSocketが、WebSocketアプリケーションのための標準APIを定義する予定です。専門家グループはRed Hat、Google、Caucho、VMwareおよびJeanFrancois ArcandやJustin Leeなどの個人からなっています。
JSR 356: JavaTM API for WebSocket
http://jcp.org/en/jsr/detail?id=356
GlassFishはすでに、サーバーとクライアントでGrizzlyを使ってWebSocketをサポートしています。JSRはWebSocketアプリケーションを記述するための標準ベースのコードを提供する予定です。
Serverでのサポート > Grizzly 2.2 is here, WebSocket inside! (& more)
http://blogs.oracle.com/theaquarium/entry/grizzly_2_2_is_hereClientでのサポート > Grizzly now with AHC-powered WebSocket client
https://blogs.oracle.com/theaquarium/entry/grizzly_with_async_httpclient
Danny Cowardは websocket-spec をスタートしました。専門家グループのディスカッションをjsr356-expertsからご覧頂けます。
WebSocket-specプロジェクト
http://java.net/projects/websocket-spec
Expert Group Mailing List
http://java.net/projects/websocket-spec/lists/jsr356-experts/archive
User Mailing List
http://java.net/projects/websocket-spec/lists/users/archive
websocket-specのユーザメーリングリストで議論に参加できます。もちろんこれは全て、2013年第2四半期にリリースのJava EE 7の一部として展開されます。
どんなふうにWebSocketを使ってますか?専門家グループに参加してコミュニティに貢献したいと思いませんか?
Expert Nomination for JSR 356
http://jcp.org/en/jsr/egnom?id=356

[Support] New Version of My Oracle Support (HTML) Interface

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

今週、My Oracle Supportの新しいUIがリリースされました。
My Oracle Support (HTML版)
http://supporthtml.oracle.com

FlashベースのUIの代替UIとしてHTMLのUIは存在していたのですが、書き換え、改良しました。この先数ヶ月中にFlashベースのUIを閉鎖し、UIはHTMLベースだけにする予定です。しかし、そのときまで待つ必要はありません。HTML UIへの移行を考慮するなら、少なくとも調査の時間をとってみてください。

詳細を知りたいのであれば、手始めに以下のサポート文書にあたるのがよいでしょう。
The New My Oracle Support User Interface [ID 1385682.1]
https://supporthtml.oracle.com/epmos/faces/ui/km/SearchDocDisplay.jspx?type=DOCUMENT&id=1385682.1
このサポート文書には数多くの動画のリンクが含まれています。時間がないなら、この2本をご覧になるとよいでしょう。

Improving Your Oracle Support Experience

(2分51秒)
http://medianetwork.oracle.com/video/player/1430182522001

My Oracle Support - Basic Overview

(5分05秒)
http://streaming.oracle.com/MOS/Customer_Support/UITraining/MOS2012/overview/overview.html

さらに、より効果的なクイック検索のやり方を説明する短い動画があります。デフォルトでは、右上の隅にあるクイック検索を使うとナレッジベースを検索しますが、サポートコミュニティ、製品マニュアル、バグデータベースなどのソースを含めるように検索対象を拡張したり、変更することができることはご存知ですか?下のスクリーンショットをご覧ください。

クイックサーチオプションのスクリーンショット

実際のクイック検索オプションを表示している動画は次のサポート文書からご覧頂けます。
The New My Oracle Support User Interface [ID 1385682.1]
https://supporthtml.oracle.com/epmos/faces/ui/km/SearchDocDisplay.jspx?type=DOCUMENT&id=1385682.1
ビデオは上記のものほど "スムーズかつなめらか"ではありませんが、わずか3分半で十分にわかって頂けるかと思います。あるいは、単に、上のスクリーンショットを取っておき、次回My Oracle Supportのソリューションを探す際にクイック検索のオプションを調べるというのでもよいかと思います。

[Big Data] Read how the Avengers (tm) use Oracle Big Data Appliance

原文はこちら。
https://blogs.oracle.com/datawarehousing/entry/read_how_the_avengers_tm

Oracle Big Data Applianceの決定的なパワー
(実力のような)生の情報をよい方向に導き、役に立つように変換する必要があります。毎日、S.H.I.E.L.D.は監視ビデオ、衛星、センサ、フィールドレポート、ネットワークトラフィックなど、様々なデータソースからテラバイト級の情報を取得しています。そしてこの大量の、流れの速い、多岐にわたるデータの全てを、Oracle Big Data Applianceが処理し、フィルタリングし、変換、並べ替えるのです。
新しいMarvelの映画 "The Avengers"、Marvelのデータセンター内のシステムと、ここでのBig Dataの利用に関する情報を是非一読下さい。
The Avengers. Marvel. Oracle. Explore the Superpowered Data Center
http://www.oracle.com/us/theavengers/index.html

2012年4月17日

[Security, BPM] Oracle BPM and OWSM - 11g

原文はこちら。
https://blogs.oracle.com/owsm/entry/oracle_bpm_and_owsm_11g

Oracle BPMチームがOracle Web Services ManagerをOracle BPMと組み合わせて使う方法について記事をUpしています。
BPM 11g: Configuring SAML Web Service Clients for Identity Switching without Message Protection
http://docs.oracle.com/cd/E20686_01/English/Technical_Documentation/Oracle_BPM/Configuring_SAML_Web_Service_Clients.pdf
この記事では、具体的にOracle Web Services ManagerのSAMLベースのアイデンティティ切り替えポリシー(以前のエントリでOracle Web Services ManagerのSAMLアイデンティティ切り替え機能について概説しています)の利用方法について具体的に説明していますので、お役に立つことを願っています。

タイトルにTypoがありまして、本当は "BPM 11g: Configuring SAML Web Service Clients for Identity Switching without Message Protection" と言うべきところですが…。

[Java] Hitachi Cosminexus v9.0 - 15th Java EE 6 Compliant Server

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

日立uCosminexus Application Server V9.0が新しくJava EE 6製品が加わりました。Java EE 6プラットフォームに完全準拠しています。
uCosminexus Application Server:機能詳細
http://www.hitachi.co.jp/Prod/comp/soft1/cosminexus/apserver/lineup/caps/index.html
この製品の検証構成の詳細を見ると、EclipseLink、Weld、Metroといったコンポーネントが出てきますが、多くの方になじみのあるものかと思います。
Java EE 6 - Tested Configurations, Java EE 6 - Hitachi uCosminexus Application Server v9.0
http://www.oracle.com/technetwork/java/javaee/community/hitachi-compat-1585039.html
この結果、Java EE 6に準拠しているApplication Serverの総数は15個になりました。どのApplication Serverを使ってエンタープライズアプリケーションをデプロイしていますか?

[EM] NEC Corporation demonstrated integration with Oracle Enterprise Manager at Oracle Open World, Japan

原文はこちら。
https://blogs.oracle.com/oem/entry/nec_corpororation_demonstration_in_oracle

以前のエントリで、2012年4月4日、Oracle OpenWorld Tokyoにて、Steve WilsonがOracle Enterprise Manager Ops Center 12cの発表をしたことについて書きました。
Oracle Launches Enterprise Manager Ops Center 12c at OpenWorld Japan
https://blogs.oracle.com/oem/entry/enterprise_manager_ops_center_12c
John Fowlerの基調講演中に発表したことに加え、Oracle Enterprise Manager 12cの概要を説明するOracle Enterprise Managerのゼネラルセッションにて、SteveはOracle Enterprise Manager Ops Center 12cと日本におけるOracleパートナーのソリューションについても発表しました。

One of the highlights of the Oracle Enterprise Managerのゼネラルセッションのキモの一つは、NEC様によるデモンストレーションでした。NEC様のエグゼクティブが概要を説明し、Oracle Enterprise ManagerとNEC様のWebSAMソリューションとの連係をデモいただきました。

NEC Event ConnectorはEnterprise Managerのイベント情報をNEC WebSAMソリューションに統合し、WebSAMユーザがイベントの詳細およびOracle Enterprise Managerからの推奨事項を一目で見ることができます。

[JavaFX] Best Practices for JavaFX 2.0 Enterprise Applications

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

JavaチャンピオンにしてOracleのJavaエバンジェリスト、JavaFXエキスパートのJim Weaverが "Best Practices for JavaFX 2.0 Enterprise Applications (Part One)"と題する投稿JavaFX 2.0でエンタープライズアプリケーションを開発する上でのベストプラクティスをご紹介しています。
Weaver はTweetBrowserという以下の内容を含むサンプルアプリケーションを使ってポイントを説明しています。
  • Twitter REST APIから取得した Tweetを検索するための、TextFieldを含むToolbarや、複数のButtonコントロール
  • Tweetの表示を含むセルを持つListView。各TweetはListCellのサブクラスで表現される、このListCellクラスにはプロファイル画像のためのImageViewとスクリーン名、ハッシュタグ、Webのリンクに遷移できるようにするためのHyperLinkコントロールを含む。
  • 検索中に回転するProgressIndicatorと、  Tweetに含まれるWebリンクに関連するWebページを表示する WebView
この TweetBrowser プロジェクト(ダウンロードできます)には記事を通じて強調している部分のアプリケーションコードが含まれています。TweetBrowserアプリケーションで使われているテクニックやベストプラクティスには以下のようなものがあります。
  • アプリケーションのホームページからJava Web Startを介してアプリケーションを起動するには
  • アプリケーションを1インスタンスのみ起動させることを保証するには
  • UIにモデルをバインドするには
Weaverは、「アプリケーションのホームページからJava Web Startを介してアプリケーションを起動したり、アプリケーションを1インスタンスのみ起動させることを保証したり、UIにモデルをバインドするような実装テクニックのおかげで、ユーザだけでなく開発者にとっても生活が楽になります」とのコメントで投稿をまとめています。

第2部では、TweetBrowserサンプルアプリケーションで使われているテクニックやベストプラクティスをたくさん紹介してくれる予定ですので、乞うご期待。

第1部はこちらからどうぞ。
Best Practices for JavaFX 2.0 Enterprise Applications (Part One)
http://www.oracle.com/technetwork/articles/java/fxbest-1583679.html

2012年4月16日

[EM] Oracle Enterprise Manager version 12c is available on Solaris 11 (SPARC)

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

Oracle Solaris 10および11 on SPARCで、Oracle Enterprise Manager 12cが利用できるようになりました。詳細はダウンロードページからどうぞ。

Enterprise Manager 12c Executive Brief (pdf)
http://www.oracle.com/us/products/enterprise-manager/em12c-executive-brief-1537967.pdf
Oracle Enterprise Manager 12c
http://www.oracle.com/technetwork/oem/enterprise-manager/overview/index.html

[Security, SOA] How To - Securing a JAX-WS with OWSM Message Protection Policy in JDeveloper - 11g

原文はこちら。
https://blogs.oracle.com/owsm/entry/how_to_securing_a_jax

前のエントリでお約束した通り、このエントリでは、シンプルなHelloWorldというJAX-WSアプリケーションをOWSMのメッセージ保護ポリシーでセキュアにする方法、そしてSOAP UIでテストする方法をご紹介します。
Oracle Web Service Manager 11g Message Protection Policy (in WLS) Step-by-Step Instruction Guide
http://www.oracle.com/technetwork/middleware/webservices-manager/message-protection-jdev-1559448.pdf
このHow-Toでは過去にキーストア、資格証明ストア、jps-config.xmlなどの関係および相互作用について記載した絵を再度使っています。お客様やOracle社内の面々からよく伺う要求の一つとして、この他にOWSMをSOAP UIでテストする方法について知りたいというものがあります。SOAP UIは一般にwss10ポリシーで保護されているWebサービスのテストツールとして非常に役に立つツールです。

[Java, Cloud] JavaServer Faces 2.0 for the Cloud

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

新しい投稿がOTNのJavaのコーナーにUpされています。Deepak Vohraの "JSF 2.0 for the Cloud, Part One,"という投稿で、これはJava Server Faces 2.0が、クラウドの仮想化コンピューティングリソースに理想的な機能を提供していることを説明するものです。この投稿では@ManagedBean アノテーション、implicit navigation、そしてリソース処理に着目しています。Vohraは、ポータブルアプリケーションを単一マシンだけでなく、大規模クラスタをも対象にできる、Java EE 7のコンテナベースモデルが、いかにクラウドアーキテクチャに適しているかを説明しています。

以下は投稿からの抜粋です。
JavaServer Faces 2.0(JSF 2.0)が開発された際にはクラウドサービスは考慮していなかったかもしれませんが、JSF 2.0はクラウドにとって最適な機能を提供します。例えば…
  • JSF 2.0のパスベースのリソースの処理により、仮想化リソースの処理がはるかに簡単になり、コンポジットコンポーネントにスケーラビリティを提供します。
  • RESTスタイルのGETリクエストおよびJSF 2.0のブックマーク可能なURLが、クラウドアーキテクチャをサポートしています。 Representational State Transfer (REST) ソフトウェアアーキテクチャは、URIで識別されるリソース表現の転送に基づいています。RESTfulなリソースやサービスは、URIパスとして利用できます。リソースには種々の形式(例えばXML、HTML、プレーンテキスト、PDF、JPEG、およびJSONなど)でアクセス可能です。RESTは、シンプルで軽量、かつ高速という利点を提供します。
  • JSF 2.0でのAjaxサポートにより、インタラクティブなブラウザベースのWebアプリケーションを提供することで、Software as a Service (SaaS)との統合が可能です。
シリーズのパート2では、VohraはこのようなAjaxサポート、ビューパラメータ、プリエンプティブなナビゲーション、イベント処理、およびブックマーク可能なURLなどの機能を分析します。
投稿はこちらからどうぞ。
JSF 2.0 for the Cloud, Part One
http://www.oracle.com/technetwork/articles/java/jsf-2-cloud-part1-1562825.html

2012年4月15日

[Solaris] Using the Support Repository for Solaris 11

原文はこちら。
http://www.c0t0d0s0.org/archives/7459-Using-the-Support-Repository-for-Solaris-11.html

Glynn Fosterの著した "How to Update Oracle Solaris 11 Systems Using Support Repository Updates" はすばらしい記事です。この記事では、Solaris 11のSupport Repositoryの利用方法を説明しています。一読をお勧めします。
How to Update Oracle Solaris 11 Systems Using Support Repository Updates (by Glynn Foster)
http://www.oracle.com/technetwork/articles/servers-storage-admin/o11-018-howto-update-s11-1572261.html

[Hardware] New SPC2 benchmark- The 7420 KILLS it !!!

原文はこちら。
https://blogs.oracle.com/7000tips/entry/new_spc2_benchmark_the_7420

これはかなりいい感じです。新しいSPC2ベンチマークが先週出てきましたが、ZFSSA 7420のスピードスコアが第2位になっただけでなく、MBPSあたりの価格比で第1位になりました。
この表を確認しましょう。10704というZFSSA 7420のスコアは本当に速いですが、これ自体は最良の部分ではありません。1位になるために支払うべき費用がばかげています。結果はこちらからご覧頂けます。
Storage Performance Council: SPC-2 Benchmark Results
http://www.storageperformance.org/results/benchmark_results_spc2
このページ全体でZFSSA 7420を上回る唯一のシステムは、MBPSあたりの価格で2倍以上でした。Oracleにとっては申し分ないですね。
それでは見てみましょう、ZFSSA 7420は価格比で最も高速なストレージです。
ZFSSA 7420は、MBPSあたりの価格が最も安いのです。
ZFSSA 7420には信じられないことに、ビルトイン機能、管理サービス、分析、およびプロトコルが搭載されています。非常に安定しており、クラスタとして単一障害点はありません。今年最高のNASシステムとしてStorage Magazine賞を受賞しました。
クリックすると拡大します
マーケットで第1位のNASシステムになるまでにどれぐらい時間がかかるでしょうか。ZFSSAの普及が進まない最大のハードルは何でしょうか。思うに、以下の3点かと。
  1. 管理者が古いレガシーシステムで十分と考えている
  2. 政治的な背景
  3. Oracleサポートの過去の問題
これらの問題は全て定期的に登場してくるのを知っています。1番目の課題は時間と教育でよいでしょう。3番目の課題は、我々の新しい、より優れた成長したサポートチームになるための時間が必要です。多くの場合Oracleが原因であり、ソフトウェアの垂直統合モデルからハードウェアのサポートまで実施する上での成長の痛みでした。
2番目の課題はトリッキーではありますが、お客様内部の政治を打破し、お客様にOracleのハードウェアシステムの価値を見てもらうよう支援するのは営業チームの仕事です。このような場合、ベンチマークが有効でしょう。

2012年4月14日

[Java] EclipseLink Moxy Provider for JAX-RS and JAX-WS

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

EclipseLink MOXy はGlassFish 3.1.2にバンドルされているJAXBプロバイダです。JAXB リファレンス実装に加え、XPathベースのマッピングJPAエンティティのサポートネイティブJSONバインディング、その他多くの機能を提供しています。MOXyとJAXBのサンプルについて詳細はWikiからどうぞ。

Blaise Doughanが自身のブログで、MOXyを使ってJAX-WSサービスを作成する方法をまとめています。それによると、 sun-jaxws.xml の data-binding 属性を用意すれば、全てのXPathベースのマッピングをJAXB beansに指定できます。
GlassFish 3.1.2 is Full of MOXy (EclipseLink JAXB)
http://blog.bdoughan.com/2012/02/glassfish-312-is-full-of-moxy.html
JAX-RS JSONプロバイダとして、MOXyをサーバサイドクライアントサイドでも利用できます。あなたのアプリケーションでは、MOXyをどのように使っていますか?

[Big Data] Oracle R Enterprise 1.1 Download Available

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

OracleはOracle R Enterprise ver.1.1の最新のアップデートをリリースしました。このリリースには(オープンソース R ver.2.13.2ベースの)Oracle R Distribution が含まれており、サーバインストールなどが改善されています。主要な新機能は以下の通りです。
  • サポート対象の拡大
    新たにWindows 32/64bitサーバをサポートします。Linux 64bit環境は継続してサポートします。
  • 機能向上したインストーラ
    Linux 64bitサーバのインストーラに、堅牢なステータスの更新機能や前提条件のチェック機能が付属しました
  • 性能の向上
    組み込みRスクリプトの実行計算の性能が向上しました
    Introduction to ORE Embedded R Script Execution
    https://blogs.oracle.com/R/entry/analyzing_big_data_using_the1
さらに、アップデートされた ROracle パッケージ(Oracle R Enterpriseと共に利用)は日付データを文字列に変換することによって読みとります。
New Release of ROracle posted to CRAN
https://blogs.oracle.com/R/entry/oracle_advanced_analytics_option_and
ぜひ、Oracle Technology NetworkからOracleソフトウェアをダウンロードして評価して下さい。R関連のソフトウェアのリンクは以下の通りです。
Oracle R Enterprise
http://www.oracle.com/technetwork/database/options/advanced-analytics/r-enterprise/ore-downloads-1502823.htmlOracle R Distribution
http://www.oracle.com/technetwork/indexes/downloads/r-distribution-1532464.htmlROracle
http://cran.r-project.org/web/packages/ROracle/index.htmlOracle R Connector for Hadoop
http://www.oracle.com/technetwork/bdc/big-data-connectors/downloads/index.html
いつも通り、質問やコメントはOracle Rフォーラムにどうぞ。
Oracle R Forum
https://forums.oracle.com/forums/forum.jspa?forumID=1397

2012年4月11日

[B2B] Tuning B2B Server Engine Threads in SOA Suite 11g

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

背景
B2B 11g には数多くのパラメータがあり、これらを使ってB2Bエンジンが大量のメッセージを処理できるようにチューニングすることができます。これらのパラメータは、B2Bサーバーのプロパティとして知られており、EMコンソールを介して管理します。
このエントリでは、チューニング作業の一つの側面を取り上げ、B2Bサーバのパフォーマンスのチューニング時に設定できる種々のスレッドについて説明します。

症状
B2Bエンジンをチューニングする必要が出てくる最も一般的な指標は、B2Bサーバ内の内部JMSキューのメッセージの定常的な蓄積に反映されます。このキューは B2B_EVENT_QUEUE と呼ばれ、WebLogic Server管理コンソールから監視できます。このような状況が見られた場合には、結果として性能の劣化が現れます。

改善方法
B2Bサーバの性能劣化の背景には、様々な要素が絡んでいますが、標準状態からサーバを調整するにあたり、最初にやるべきことは、デフォルトの設定からB2Bサーバに割り当てられている内部エンジンのスレッドの数を変更することです。
B2Bサーバエンジンのスレッドのデフォルト構成では大量のメッセージに対応できる設定ではありませんので、Enterprise Manager Fusion Middleware Controlから適切なB2Bサーバプロパティを指定し、3種類のスレッドの個数を増やす必要があります。それぞれのプロパティとスレッドは以下の通りです。
  1. Inbound - b2b.inboundThreadCount
  2. Outbound - b2b.outboundThreadCount
  3. Default - b2b.defaultThreadCount
これらのスレッドの機能は読んで字のごとくです。言い換えれば、インバウンドスレッドが外部のエンドポイントからB2Bサーバに入ってくるインバウンドメッセージを処理します。同様に、アウトバウンドスレッドは、B2Bサーバから送信されるメッセージを処理します。デフォルトスレッドは、ある種のB2Bサーバー固有の特殊なタスクに対応します。インバウンド/アウトバウンドスレッドの個数が指定されていない場合には、デフォルトのスレッド数からインバウンドとアウトバウンドのスレッドの総数を決定します。
あらゆるチューニング作業にあるように、これらのスレッドの最適化は、反復プロセスを通じて到達することが通常です。スレッド数の最適な組み合わせは、システムインフラやトラフィックの負荷、その他の環境要因に直結しています。

[SOA/BPM] SOA Suite 11g Database Growth Management

原文はこちら。
https://blogs.oracle.com/soacommunity/entry/soa_suite_11g_database_growth

Oracle SOA Suite 11g Database Growth Management というホワイトペパーには、SOA 11gで利用するデータベースの増大を管理するための適切な戦略を検討する必要性がまとまっています。

An Oracle 11g Fusion Middleware SOA White Paper January 2012
SOA 11G Database Growth Management Strategy
http://www.oracle.com/technetwork/database/features/availability/soa11gstrategy-1508335.pdf

[訳注]
既に過去のエントリでもご紹介しています。

[SOA/BPM] 11g purging white paper
http://orablogs-jp.blogspot.jp/2012/02/11g-purging-white-paper.html
[SOA/BPM] SOA Suite 11g Purging Guide
http://orablogs-jp.blogspot.jp/2012/04/soa-suite-11g-purging-guide.html

このホワイトペーパーに記載されているアドバイスにより、データベースおよびホストの要件を計画する際に、SOA管理者とデータベース管理者間でより良い会話が促進されることでしょう。

なお、2012年4月11日(水)23時(日本時間)から、"Oracle SOA Suite 11g Database Growth Management" というアドバイザWebcastが開催されます(おそらく録画もされるはずです)。このWebcastでは、インスタンスデータのパージ等の戦略について、先ほどのホワイトペーパーの筆者がご説明します。

ADVISOR WEBCAST: SOA 11g Database: Guide for Administrators
https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&doctype=ANNOUNCEMENT&id=1422913.1

[Data Integration] Self-Study course on ODI Application Adapter for Hadoop

原文はこちら。
https://blogs.oracle.com/datawarehousing/entry/self_study_course_on_odi

Oracle Data Integrator(以下、ODI)とODIのHadoop連係機能を使いたい人向けに、Oracle Universityから自習コースが新たにリリースされました。以下のリンクからコースをご覧頂けます。

Oracle Data Integrator Application Adapter for Hadoop (Oracle Learning Library)
https://apex.oracle.com/pls/apex/f?p=44785:24:0::NO:24:P24_CONTENT_ID,P24_PREV_PAGE:6130,29

何かフィードバックがあれば、ログインしてOracle Universityに送信して下さい(そうすれば、そうした情報のビッグデータ解析を存分にやることができますんでね)。

2012年4月10日

[Java] JPA and NoSQL using EclipseLink - MongoDB supported

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

EclipseLink 2.4 はNoSQLデータベース(MongoDBとOracle NoSQL)に対するJPAサポートを追加しました。他のNoSQLデータベースに対するサポートはEclipseLink EISPlatformクラスとJCA Adapterの追加によって拡張していきます。

@NoSQLアノテーションもしくは<no-sql>というXML要素を使って、JavaのクラスをNoSQLデータソースにマッピングすることができます。JPQLのサブセットやCriteria APIをもサポートしていますが、これはNoSQLデータベースのクエリサポートに依存します。接続プロパティは"persistence.xml"で指定します。
JPAアノテーションのマッピング方法や@NoSQLアノテーションの使い方に関する完全なサンプルはこちらにあります。

EclipseLink/Examples/JPA/NoSQL
http://wiki.eclipse.org/EclipseLink/Examples/JPA/NoSQL

MongoDBを使ったサンプルのソースコードもSVNリポジトリからチェックアウトできます。

MongoDB版JPAアノテーションのサンプル
http://dev.eclipse.org/svnroot/rt/org.eclipse.persistence/trunk/examples/org.eclipse.persistence.example.jpa.nosql.mongo/

EclipseLink 2.4はEclipse Junoと同時に2012年6月にリリースされる予定です。サポートする機能群がWikiに記載されています。マイルストンやnightly buildは既にご利用頂けます。

Juno/Simultaneous Release Plan
http://wiki.eclipse.org/Juno/Simultaneous_Release_Plan
EclipseLink/Development/2.4.0
http://wiki.eclipse.org/EclipseLink/Development/2.4.0
Milestone Builds
http://www.eclipse.org/eclipselink/downloads/milestones.php
Nightly Builds
http://www.eclipse.org/eclipselink/downloads/nightly.php

GlassFishで試して発表したくありませんか?

[VM, EM, Database] New Database assemblies are available now to simplify cloud deployment via Oracle Enterprise Manager 12c Self-Update

原文はこちら。
https://blogs.oracle.com/oem/entry/new_database_assemblies_via_oracle

クラウドへのアプリケーションデプロイは大きなチャレンジです。アプリケーションの各種コンポーネントを個々にデプロイし、手でそれらを接続していくことが一般的です。あるベンダーでも、VMの束をデプロイすることができますが、それでも、個々の点を接続するハードかつ苦痛な作業が残ります。デプロイに関する他の制約を考え始めると、この問題はさらに悪化します。その制約とは、例えば、コンポーネントの共存が必須であったりなかったり、アプリケーションのネットワークトポロジがどうあるべきか(すなわち、データベースとミドルウェアが異なるネットワークセグメントに配置すべき)とか、どのコンポーネントがスケールアウトできるかとか、もしスケールアウトするならどのようなスケールアウトが起こるか、とか…。
Oracle Virtual Assembly Builder(OVAB)とOracle Enterprise Manager 12cがこの問題を解決します。OVABを使って、アプリケーション開発者やアーキテクトは、アプリケーションのトポロジをグラフィカルにモデリングでき、すべての依存関係および配置制約を定義でき、アプリケーションアセンブリと呼ぶ形式でアプリケーション全体をパッケージできます。これらのアセンブリを、Enterprise Managerで一元管理されているソフトウェア·ライブラリにアップロードし、セルフサービスデプロイメントを実現することができます。

昨年のOracle Enterprise Manager12cの発表時に、Oracleは自社製品の全てについてアセンブリを提供する計画があることをお伝えしていました。このアセンブリを使えば、ボタンのクリックで、弊社の製品(パッケージアプリケーションを含む)をデプロイすることができます。Enterprise ManagerにはOracleに戻るライブリンクがあり、そのリンクが新しいアセンブリが利用可能になったことを通知し、もし興味があれば、ダウンロードします。

先週、Oracle Enterprise Manager 12cのセルフアップデート経由で新しいデータベースアセンブリが利用可能になりました。アセンブリのリリースにより、お客様はOracle VMサーバのゾーンを作成し、これらのアセンブリをEnterprise Manager 12cセルフサービス·インタフェースからこれらのアセンブリをデプロイすることができます。以下はOracle Enterprise Manager 12cのセルフアップデートインターフェイスのスクリーンショットです。

今後もEnterprise Managerをチェックして下さい。

Oracle Enterprise Manager
http://www.oracle.com/jp/products/enterprise-manager/index.html
http://www.oracle.com/us/products/enterprise-manager/index.html

[WSM, Security] Keystore and Credential Store interplay in OWSM - 11g

原文はこちら。
https://blogs.oracle.com/owsm/entry/keystore_and_credential_store_interplay

お客様がよく直面する問題の1つに、キーストアの利用があります。キーストアは資格証明ストアと共に作用します。以下に両者の関係を説明する図を用意しました(クリックすると拡大します)​​。この図では、関係を記述する上でいくつか前提を置いています。その仮定は、次のとおりです。
  1. 署名や暗号化のために使われる鍵は同じである
  2. キーストアは複数の鍵を持つことができ、各々の鍵は独自のエイリアスを持つ。この図では"orakey"というエイリアスを持つ一つの鍵について示している。
  3. ここで説明しているキーストアはJKSキーストアである。キーストアの種類によって事情が異なる場合がある。
私は、詳細なHow-Toで大きな図を提供し、これらの関係を示したいと思っています。この図はそのHow-toの関連で作成されました。しかし、単体でもこの図は役に立つと思ってくれる人がいると考えています。なお、<serviceInstance>は、jps-config.xml内にあるエントリです。

[ADF, Application] ADF and Oracle E-Business Suite Integration Series: Displaying Read-Only EBS data on ADF

原文はこちら。
https://blogs.oracle.com/jruiz/entry/adf_and_oracle_e_business

久しぶりのエントリですが、プロジェクトや新しい発見が起こっていなかったということではなく、単に投稿が遅れただけです。日常生活に再度取り込むつもりです。では本題に入りましょう。

過去数ヶ月間取り組んでいた領域の一つは、E-Business Suiteのお客様が、モバイルインターフェイス、レポート、セキュリティなどのような要件を実装するためのADFを使いはじめるための様々なアプローチを模索していたのです。一連のエントリを通して、これらのシナリオをカバーし、うまくいけば今後カバーすべき追加のユースケースにどのようなものがあるか、ということについてフィードバックを得たいと思っています(はい、読者のあなたからです)。

この最初の記事では、基礎から開始するつもりです。シンプルではあるけれどもとても一般的なユースケース、EBSのデータをADF Facesリッチクライアントコンポーネントを使用して、EBSのデータをどのように表示できるか、という点について説明します。データの可視化や、データを表示のためのよりよいルック&フィールを使ってレポートを作成したいと思っているなら、このユースケースはよい例になるでしょう。

免責事項:次のサンプルでは、EBSのインストール·メディアから入手可能であるOracle E-Business Suiteのデータベースのビジョンデモを使用しています。

Part 1 – データアクセス
Oracle E-Business Suiteは、独自のセキュリティ実装とそのセキュリティ·モデルを利用するAPIとインターフェースを介してビジネスデータにアクセスするためのさまざまな方法を提供しています。これらは、EBSのデータにアクセスするのに好ましい方法であり、今後のエントリでこれらについてご紹介する予定です。

このユースケースでは、データベース全体へのアクセス権を持つAPPSユーザーを使用してデータベースに直接アクセスしようとしていますが、これが読み取り専用でEBSにアクセスする必要がある理由の一つです。データを直接変更すると、E-Business Suiteのデータ情報が破損する可能性があるため、データの直接の変更をしないことを強く推奨します。

データベース接続を確立後、私は、データベースクエリに基づく読み取り専用のビュー·オブジェクトを作成し、UIにこのデータを公開します。また、ビュー内で、ADFのデータフィルタリング機能を使ってデータを表示するため、バインド変数ベースの、検索句を作成します。

アプリケーションモジュールを実行してビジネスモデルをテストできます。


Part 2 – UIの作成
ビジネスサービスのテストが完了したら、ADFのUIを作成し、データをブラウザで表示できます。例えば、データ可視化グラフを使ってインタラクティブなダッシュボード/レポートや位置情報を表示する地図を作成することができます。モバイルでも利用できるページを作成して、iPadのようなデバイス向けにマルチジェスチャアクションをサポートすることもできます。

サンプルアプリケーションは以下のリンクからダウンロードできます。アプリケーションの実装の手順をご紹介する動画も以下に用意しておきました。

サンプルアプリケーション
https://blogs.oracle.com/jruiz/resource/samples/ADF-EBS_s1.zip

[Database] Oracle is #1 in the RDBMS Sector for 2011

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

Gartner 2011 Worldwide RDBMS Market Share Reports 48.8% revenue share for Oracle(*)

Gartnerはソフトウェア売上ベースの2011年の市場シェアを発表しました。
Gartnerによると、Oracleは…
  • RDBMSソフトウェア売上シェアで世界第一位
  • 競合7社の売上の合計以上の売上シェアを保持
  • 業界平均(16.3%)、第2位の競合の成長率をも上回る、 18.0%の成長
(*) 出典:Market Share: All Software Markets, Worldwide 2011 by Colleen Graham, Joanne Correia, David Coyle, Fabrizio Biscotti, Matthew Cheung, Ruggero Contu, Yanna Dharmasthira, Tom Eid, Chad Eschinger, Bianca Granetto, Hai Hong Swinehart, Sharon Mertz, Chris Pang, Asheesh Raina, Dan Sommer, Bhavish Sood, Marianne D'Aquila, Laurie Wurster and Jie Zhang. - March 29, 2012

[訳注]
プレスリリースも出ています。

Oracle is #1 in the RDBMS Market Segment for 2011
http://www.oracle.com/us/corporate/press/1582122

2012年4月9日

[BI] OBIEE 11.1.1 - BI Design Best Practices Whitepaper V1.2

原文はこちら。
https://blogs.oracle.com/pa/entry/obiee_11_1_1_bi3

  • Oracle BIの原則
  • リポジトリ設計のベストプラクティス
  • ダッシュボードやレポートの設計のベストプラクティス
  • 10gからのアップグレードでの考慮点
この新版には40以上のスライドを追加し、11gの新しいベストプラクティスや10gからアップグレード時の新しい情報をふんだんに盛り込みました。
以下のリンクを右クリックしてダウンロードして下さい。

BI Design Best Practices (Nicolas Barasz - Oracle BI EPM Product Assurance)
https://blogs.oracle.com/pa/resource/ProductAssuranceBIDesignBestPracticesV1.2.pdf

2012年4月7日

[Java] Diagnosis of a JRockit Deadlock

原文はこちら。
https://blogs.oracle.com/poonam/entry/diagnosis_of_a_jrockit_deadlock

最近、興味深いJRockit JVMのデッドロックに出くわしました。私はのための修正まで、役に立つかもしれないデッドロックの詳細、その診断方法、デッドロックの回避方法を共有します。この内容は将来のJRockitのリリースで修正されるまでお役に立つかと思います。

このデッドロックはアプリケーションのJavaスレッドとJVMのコード生成スレッドの間で発生しました。両スレッドの呼び出しのトレースは、以下のようになっていました。
"[ACTIVE] ExecuteThread: '0' for queue:  'weblogic.kernel.Default (self-tuning)'" id=15 idx=0x54 tid=27249 prio=5 alive, native_waiting,daemon
at <unknown>(???.c)@0xffffe410
at eventTimedWaitNoTransitionImpl+79(event.c:90)@0xf7c910a0
at syncWaitForSignalNoTransition+81(synchronization.c:28)@0xf7e0d8a2
at innerNativeDoWait+894(nativelock.c:614)@0xf7d9e8cf
at nativeWait+71(nativelock.c:721)@0xf7d9ec28
at cbrCompileInCodeGenThread+451(compilerqueue.c:339)@0xf7c71b94
at dispatch_compile_request+78(compilerbroker.c:511)@0xf7c64eaf
at cbrGeableCodtRunneInfo+154(compilerbroker.c:580)@0xf7c6516b
at stubsCallJava+77(stubcall.c:112)@0xf7e061ce
at stubsCallJavaV+344(stubcall.c:276)@0xf7e065c9
at javaInvokeStaticVoidMethod+39(javacalls.c:178)@0xf7cd6098
at clsEnsureInitialized+485(class.c:256)@0xf7c4c446
at check_flags_and_clinit+28(compilerbroker.c:302)@0xf7c641fd
at cbrGetRunnableCodeInfo+37(compilerbroker.c:564)@0xf7c650f6
at stubsCallJava+77(stubcall.c:112)@0xf7e061ce
at javaInvokeMethod+280(javacalls.c:1128)@0xf7cd62a9
"(Code Generation Thread 1)" id=4 idx=0x30 tid=27235 prio=5 alive,native_waiting, daemon
at <unknown>(???.c)@0xffffe410
at eventTimedWaitNoTransitionImpl+79(event.c:90)@0xf7c910a0
at syncWaitForSignalNoTransition+81(synchronization.c:28)@0xf7e0d8a2
at innerNativeDoWait+894(nativelock.c:614)@0xf7d9e8cf
at nativeWait+71(nativelock.c:721)@0xf7d9ec28
at clsEnsureInitialized+334(class.c:219)@0xf7c4c3af
at check_flags_and_clinit+28(compilerbroker.c:302)@0xf7c641fd
at compileit+273(compilerbroker.c:317)@0xf7c64992
at cbrCompileRequest+16(compilerbroker.c:537)@0xf7c651b1
at cg_thread+876(compilerqueue.c:223)@0xf7c7168d
at thread_stub+318(lifecycle.c:808)@0xf7d5205f
at start_thread+225(:0)@0x64a832
at __clone+93(:0)@0x5cee0e
上記のスタックトレースとコア·ダンプ·ファイルの検査の結果、Javaスレッド(TID=27249)はクラスの初期化中で、そのクラスの "clinit'メソッドを呼び出す途中であったことがわかりました。メソッド 'clinit'はコンパイルされていなかったので、そのメソッドをコンパイルするdispatch_compile_request() を呼び出し、コード生成スレッドにコンパイル要求を送信していましたが、コード生成スレッドがその要求を受け入れ、完了するために'clinit"のクラスの初期化が完了するのを待っている時にスタックしてしまいました。関数dispatch_compile_request()は、コード生成に利用可能なスタック領域がスレッドに十分ある(>64K)かどうかをチェックし、十分にスタック領域があれば、同じスレッドでメソッドをコンパイルしますし、そうでない場合は、コード生成(コンパイラ)スレッドにコンパイル要求を渡します。
if (!enough_stack) {
...
res = cbrCompileInCodeGenThread(req, TRUE);
} else {
res = compileit(req, req->method);
}
このケースでは、Javaスレッド(TID=27249)で使用可能なスタックの領域は63K前後だったことが問題の原因でした。ここで発生したことをまとめます。
  1. メソッドのコンパイル時に、コード生成スレッドがそのメソッドのクラスの初期化を期待する。初期化されない場合は、クラスが初期化されるのを待つ。
  2. コンパイルするのに十分なスタック領域がないため、クラスの初期化中のJavaスレッドがコード生成スレッドに当該クラスのメソッドをコンパイルするよう指示し、コード生成スレッドがコンパイル終了するのを待つ。
上記のシナリオが原因で、デッドロックが発生します。

このような状況を回避するための簡単な解決法は、アプリケーションのJavaスレッドのスタックサイズを増やして、常に同一スレッドでコンパイルが可能になるよう、十分なスタック領域を確保しておくけば、少なくとも初期化されていないクラスのコンパイルの指示をコード生成スレッドに渡さなくてよくなります。

このバグの修正が現在進行中であり、将来のJRockitのパッチリリースで利用できるようになります。

[訳注]
このデッドロックの症状はJRockit R28.2.4で修正されています。

JRockit hang fix (Poonam Bajaj)
https://blogs.oracle.com/poonam/entry/jrockit_hang_fix

[Java] Object Query Language Help

原文はこちら。
https://blogs.oracle.com/poonam/entry/object_query_language_help

Object Query Language と呼ばれるクエリ言語をJHatとJavaヒープから情報を取り出すためのServiceability Agentと共に利用することができます。この言語のヘルプはJHat ツールから利用できます。OQLに関するこの便利なヘルプドキュメントをクイックリファレンスのためにこちらに用意しました。

Object Query Language (OQL)
https://blogs.oracle.com/poonam/resource/OQL.htm

2012年4月5日

[EM] Oracle Launches Enterprise Manager Ops Center 12c at OpenWorld Japan

原文はこちら。
https://blogs.oracle.com/oem/entry/enterprise_manager_ops_center_12c

4月4日の朝、Oracle OpenWorld Tokyo 2012で、OracleのSenior Vice PresidentであるJohn FowlerとSystems ManagementのVice PresidentであるSteve Wilsonが、Oracle Enterprise Manager Ops Center 12cをお披露目しました。

Oracle Enterprise Managerにはサーバ、OS、x86/SPARCサーバの仮想化ソリューション、ファームウェア、ストレージ、ネットワークファブリックの管理機能がOracle Enterprise Manager Ops Centerに統合されています。 Ops Center Anywhere Program の一環で、追加費用なしでご利用頂けます。このOracle Enterprise Manager Ops Center 12cを使うと、企業内でのミッションクリティカルなクラウド展開を促進し、初のクラウドOS、Solaris11のパワーを解き放ち、シンプルにOracleのEngineered Systemsを管理できます。

Ops Center Everywhere Program
http://www.oracle.com/us/corporate/features/opscenter-everywhere-program-1567667.html

新しい Oracle Enterprise Manager Ops Center 12cに関するリソースをまとめました。
是非、4月12日9時(アメリカ太平洋夏時間、日本時間では4月13日1時)から開催するローンチWebcastにご参加下さい。その中で、Oracle Enterprise Manager Ops Center 12cについて、Oracle のSenior Vice PresidentであるJohn Fowler、OracleのSystems ManagementのVice PresidentであるSteve Wilson、及びOracleのエグゼクティブからご紹介いたします。

視聴登録はこちらからどうぞ。

Oracle Launch Webcast: Total Cloud Control for Systems
http://www.oracle.com/go/?&Src=7255746&Act=21&pcode=WWMK11010922MPP006

[BPM] Handling HumanTask attachments in Oracle BPM 11g PS4FP+ (I)

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

HumanTaskに添付を付ける機能はOracle HWF(Human Workflow)に10gのころから存在していますが、11gでは、たくさんの改善が施されていますので、このエントリではその内容をまとめたいと思います。
Oracle BPM 11g 11.1.1.5.1 (PS4 Feature Pack もしくは PS4FP) では次の2台機能が追加されました。
  • TaskスコープもしくはProcessスコープで添付ファイルを関連づけることが可能
    • "Task" の添付ファイルは、タスクのスコープ(ライフタイム)内でのみ閲覧可能です。つまり、冒頭にHuman Taskにアサインしたメンバーが添付ファイルを操作(追加、レビュー、削除)します。しかし、タスクが完了した後、その後のHumanTaskではそれらの添付にアクセスすることはできません。これは添付ファイルが無くなったことを意味しているのではありません。Human Taskが完了すると、添付ファイルを取り出して、Content Serverにチェックインしたり、新しいHuman Taskや別のHuman Taskに注入したりできます。

[注意] 再度開始したHuman Taskは、履歴と(必要に応じて)ペイロードと共にコメントや添付ファイルを継承します。詳細は以下のリンクを参照してください。

Oracle® Fusion Middleware Developer's Guide for Oracle SOA Suite 11g Release 1 (11.1.1.6.0)
28.17.4.6 Including the Task History of Other Human Tasks
http://docs.oracle.com/cd/E23943_01/dev.1111/e10224/bp_hwfmodel.htm#BABDCFEJ (英語)

    • "Process" の添付ファイルはプロセスのスコープ内で閲覧可能です。つまり同じプロセスにある後続のHuman Taskで添付ファイルにアクセスできます。
  • Oracle WebCenter Content (以前はOracle UCMとして知られていました)を、HWFデータベースの代わりに添付ファイルのバックエンドとして利用できるようになりました。この機能はあらゆるコンテンツサーバドキュメントライフサイクル機能をHuman Workflowの添付ファイル(バージョン管理、ロールベースアクセス制御、メタデータ管理など)に付加します。現時点では、Oracle WebCenter Contentのみがサポートされていますが、BPMスコープ内でのドキュメント管理に利用する場合に限り、  Oracle BPM SuiteにはOracle WebCenter Contentの制限付きライセンスを含んでいます。
ここで上記機能を利用するコード例をご紹介しましょう。

アップロードした添付ファイルを取り出す(WebCenter Contentを使わない場合)
Human Taskが完了してから、WebCenter Contentを使わない場合の添付ファイル(10gの時代からある標準的なもので、現状ではHWFデータベースに格納します)を取り出すことができます。まず、添付ファイルがHuman Taskにアップロードされていることを確認する必要がありますが、2種類の方法で確認できます。
  • XPath関数を使う方法

  • execData/attachment[]構造体を確認します。以下は例です。

1つ以上の添付ファイルがHuman Taskにアップロードされたことを確認したら、添付ファイルを取得しましょう。この例では、添付ファイル名とファイルのペイロードを取得しようとしています。

[注意] Oracle HWFは2種類の添付ファイル(デスクトップドキュメントとWeb URL)をアップロードできます。この例ではデスクトップドキュメントに特化しています。アップロードしたWeb URLを取り出す場合は、execData/attachment[]構造体から直接取得することができます。

添付コンテンツ(ペイロード)をgetTaskAttachmentContents() XPath関数で取得できます。

この例では、Human Taskにアップロードされたドキュメントの数だけ取得し、File Adapterを使ってサーバに書き出す方法をご紹介します。

サンプルプロセスの抜粋は以下の通りです。

"HumanTask1" Human Taskを使うダミーのUserTaskの後に、添付ファイルを取り出す組み込みサブプロセスが続きます(少なくとも一つの添付ファイルがアップロードされていると想定しています)。

添付ファイルを取り出した後、それぞれをFile Adapterサービスを使ってサーバにファイルを書き戻します。

詳細
  • 添付ファイル(の名前とペイロードの両方)を保持するXMLスキーマ構造体を定義しました。

  • この要素(attachmentCollection)に基づいてBusinessObjectを作成し、このBusinessObject型の変数(変数名はattachmentBPM)を作成することができます。
  • また、HumanTask出力のexecData構造体のコピーを保持する必要があります。したがって、TaskExecutionData型の変数を作成する必要があります。





  • HumanTaskの出力execDataを先ほど定義した変数にコピーします。






  • それでは、組み込みサブプロセスにて、添付ファイルのペイロードを取り出しましょう。まず、XSLT変換を使って各要素名を attachmentBPM 変数に渡し、ペイロードに空の値を設定しておきます。


  • XSLTの for-each ノードを使って必要なだけのターゲット構造体を作成していること、 payload 変数には Empty というテキストを設定していることに着目して下さい。このようなことをしている理由は、<payload></payload> タグを作成するためです。XML変数に後ほどペイロードをマッピングする際に必要なのです。

    [注意] ここではUCMドキュメント以外の添付ファイルを取り出すことを想定していますが、現実には取り扱っている添付ファイルの種類を確認したいという要件もあります。 execData/attachment[]/storageType にはUCMタイプの添付であれば "UCM" という値が入っています。 UCM以外であれば、"TASK"が、Web URLであれば "URL" が入っています。こうした値は列挙値 "Ext.Com.Oracle.Xmlns.Bpel.Workflow.Task.StorageTypeEnum" に含まれています。





  • 既に attachmentsBPM 構造体を渡し、添付ファイル各々の名前が含まれているので、次は反復処理してペイロードを取得する段階です。そこで attachmentsBPM/attachment[] 要素を繰り返し処理する MultiInstance タイプの新しい組み込みサブプロセスを使用することにします。


  • 繰り返し毎にScriptアクティビティを使って対応する payload 要素とXPath関数 getTaskAttachmentContents() の結果をマッピングします。ターゲットの配列要素が事前定義済み変数 loopCounter でどのようにインデックス付けされているかに着目し、配列の反復処理中に適切な要素に入力していることを確認する必要があります。

    使用しているXPath関数は以下のようです。
    hwf:getTaskAttachmentContents(bpmn:getDataObject('UserTask1LocalExecData')/ns1:systemAttributes/ns1:taskId,
    bpmn:getDataObject('attachmentsBPM')/ns:attachment[bpmn:getActivityInstanceAttribute('SUBPROCESS3067107484296','loopCounter')]/ns:fileName)

    ここで、入力パラメータは以下の通りです。
    taskId :いま完了したHumanTaskのTaskID
    添付ファイル名 :配列のインデックス (loopCounter 事前定義済み変数) からペイロードを取り出す

    [注意] execData/attachment[]構造体を組み込みサブプロセスで反復処理、つまりXSLTとfor-eachノードを使わない理由は、getTaskAttachmentContents()XPath関数が、現在XSLTマッピングでは使用できないためです。そのため、将来のリリースで修正/強化されるまで、すべてこの例では、回避策として考慮する必要があります。





  • この組み込みサブプロセスが終了すると、 attachmentsBPM 変数の全ての添付ファイル(名前とペイロード)を取得します。これがこのサンプルのゴールの一つですが、全てが正常に動作することをテストするため、このサンプルで全ての添付ファイルをファイルに書き出します。そのために、最後の組み込みサブプロセスで attachmentsBPM/attachment[] の各要素を同時に反復処理するようにしています。







  • 反復処理の中で、サービスアクティビティを使い、File Adapterのwriteサービスを呼び出しています。ここで、2個の重要なパラメータを設定しています。一つはペイロードそのものです。File Adapterはバイナリデータをbase64フォーマット(文字列)で期待しています。単純にマッピングすると、Stringがbase64バイナリの有効なターゲットとして認識されないため、XPath関数を使ってマッピングする必要があります。


  • 2個目は、ターゲットの filename をService Propertiesダイアログボックスで指定します。

    再度、組み込みサブプロセスの反復処理にて、インデックス変数 loopCounter を使って適切な要素を取得していることに着目して下さい。
    UCMの添付ファイル処理は別のエントリで取り上げます。エントリをUpした後に、サンプルプロジェクトをjava.netにUpする予定にしています。

    Oracle BPM 11gサンプルコード
    http://java.net/projects/oraclesoasuite11g/pages/BPM

    [BPM, WebCenter] Handling HumanTask attachments in Oracle BPM 11g PS4FP+ (II)

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

    アップロードした添付ファイルを取り出す -UCMのドキュメントの場合-
    前のエントリでお伝えした通り、Oracle BPM 11g 11.1.1.5.1 (PS4FP) では、Oracle WebCenter Content(以前はOracle UCMとして知られていました)をHuman Taskの添付ドキュメントのリポジトリとして利用できるという新しいクールな機能が導入されました。この機能の使い方や機能を有効にする方法の詳細は以下のリンクをご確認下さい。

    Oracle Fusion Middleware Oracle Business Process Managementモデリングおよび実装ガイド
    11g リリース1(11.1.1.6.0)
    27.7.2 タスクの添付を格納するようにOracle UCMリポジトリを構成する方法
    http://docs.oracle.com/cd/E28389_01/doc.1111/b61409/designing_human_tasks_bpmpd.htm#CIHBBFBE (日本語)

    Oracle Fusion Middleware Modeling and Implementation Guide for Oracle Business Process Management 11g Release 1 (11.1.1.6.0)
    27.7.2 How to Configure Oracle UCM Repository to Store Task Attachments
    http://docs.oracle.com/cd/E23943_01/doc.1111/e15176/designing_human_tasks_bpmpd.htm#CIHBBFBE (英語)

    添付ファイルのスコープ(TASKもしくはPROCESS)はUCM添付ファイルにおいても有効です。しかし、この他の機能を使っていても、UCMの添付ファイルを使用している場合には一つの疑問、「プロセス内からどうやって取り出すことができるのか」という疑問が浮かぶかもしれません。

    最初の答えは、以前のエントリで説明した同じgetTaskAttachmentContents() XPath関数を使用することです。実際に、これがあるべき姿です。しかし、Oracle BPM11g 11.1.1.5.1(PS4FP)および11.1.1.6.0(PS5)では、バグのせいで使えません。UCMの添付ファイルに対して、この関数を呼び出す場合は、NULLコンテンツの応答を受け取ることになるでしょう (bug#13907552)。添付ファイルが正常にアップロードされた場合でも同様です。
    このバグが修正されるまでの間、UCMの添付ドキュメントをBPMプロセスから取り出す次のような回避策をご紹介しましょう。また、サンプルでは、BPMのプロセス内からWebCenterContent APIと対話する方法もご紹介します。

    [注意]Human Taskの添付ファイルに関する前回のエントリをご覧になっていることを前提としています。execData/attachment[]構造体なども使います。


    サンプルプロセス
    次のようなサンプルプロセスを使います。

    "HumanTask2" Human Taskを使うダミーの UserTaskに続いて、添付ファイルのペイロードを取り出す組み込みサブプロセスが続きます。この場合、WebCenter Content Web Service API (IDC) を使うところがこの例のキーポイントです。

    添付ファイルを取り出したら、それぞれをFile Adapterを使ってサーバにファイルとして書き戻します。

    詳細
    • 前回のエントリと同じ、 attachmentCollection XMLスキーマと BusinessObject 定義を使いますが、別の変数名を付けます( attachmentUCM )。
    • We will still need to keep a copy of the HumanTaskの出力 execData 構造体のコピーを保持しておく必要があるので、 TaskExecutionData 型の新しい変数を作成します(この TaskExecutionData  型はUCMを使わない添付ファイルで使っているものとは異なります)。

    • UCMを使わない添付ファイルの場合と同様、 UserTaskのマッピングのoutputタブで、 execData 構造体をコピーしておきます。

    • では、組み込みサブプロセスにて、添付ファイルのペイロードを取り出しましょう。まず、XSLT変換を使って、 attachmentUCM 変数に以下の情報を格納します。
      • 各添付ファイルの名前( execData/attachment/name 要素から)
      • アップロードされた添付ファイルのWebCenter Content ID。この情報は execData/attachment/URI 要素に ecm://<id> の形式で保存されています。数値の <id>だけが必要なので、protocol prefix、つまり ecm:// を取り除く必要があります。そのためには、以下のようなXPath関数を使います。

    これらの2個の関数をそれぞれ呼び出しています。



    • 前回のエントリと同様、ターゲットのペイロード要素に空文字を設定して <payload></payload> タグを作成します。
    完全なXSLT変換は以下のようになります。XSLTの for-each ノードを使って必要なだけのターゲットの構造を作成していることを覚えておいて下さい。

      • attachmentsUCM 構造体に値を設定されると、各添付ファイルの名前がWebCenter ContentのユニークなID (dID) と共に入っていますので、反復処理をしてペイロードを取り出しましょう。そのため、新しく MultiInstance タイプの組み込みサブプロセスを使って attachmentsUCM/attachment[] 要素を反復処理します。

      • 各反復処理にて、サービスアクティビティを使いWebCenter ContentのAPIをWebサービス経由で呼び出します。以下の手順で必要なパートナーリンクを作成・設定します。
        • WebCenter Contentのコンソールに管理者(weblogic)としてログインします。管理メニュー(Administration)に移動して、"Soap Wsdls"のリンクをクリックします。今回は GetFile サービスを使って dID に基づくファイルを取り出します。そのため、このサービスのWSDL定義が必要で、GetFile のリンクをクリックすればダウンロードできます。JDeveloperのプロジェクトフォルダにWSDLファイルを保存します。

      • In the BPMプロジェクトのコンポジットビューで、Webサービスアダプタをドラッグアンドドロップし、先ほど取り込んだGetFile.wsdlを元にして新たに外部参照を作成し、名前を UCM_GetFile としておきます。
      • WebCenter ContentサービスはベーシックHTTP認証で保護されていますので、作成した参照が使えるよう、以下の設定をしておきます。
        • 参照を右クリックして、WSポリシーの構成を選択
        • 「セキュリティ」セクションで "+" をクリックして "oracle/wss_username_token_client_policy" ポリシーを追加

      • 最後に、セキュリティポリシーの資格証明を設定します。サンプルとして、WebCenter Contentの管理ユーザ(weblogic/welcome1)を使うことにします。composite.xml ファイルを開き、ソースビューを選択します。
      • UCM_GetFile エントリを検索し、以下のXMLのうち、赤で強調した要素を追加します。
      <reference name="UCM_GetFile" ui:wsdlLocation="GetFile.wsdl">
          <interface.wsdl interface="http://www.stellent.com/GetFile/#wsdl.interface(GetFileSoap)"/>
          <binding.ws port="http://www.stellent.com/GetFile/#wsdl.endpoint(GetFile/GetFileSoap)" location="GetFile.wsdl" soapVersion="1.1">
            <wsp:PolicyReference URI="oracle/wss_username_token_client_policy"
                                 orawsp:category="security" orawsp:status="enabled"/>
            <property name="weblogic.wsee.wsat.transaction.flowOption"
                      type="xs:string" many="false">WSDLDriven</property>
            <property name="oracle.webservices.auth.username"
                      type="xs:string">weblogic</property>
            <property name="oracle.webservices.auth.password"
                      type="xs:string">welcome1</property>
          </binding.ws>
        </reference>
      • これで外部参照が完成です。

        • 外部参照が作成できたので、BPMプロセスより使えるようになっているはずです。しかしここで問題があります。WebCenter Contentの GetFile サービスのオペレーションを使おうとしていますが、GetFileByID は入力パラメータとしてこれと類似の構造を受け入れるのですが、全ての要素タグが必須ではないのです。
        <get:GetFileByID xmlns:get="http://www.stellent.com/GetFile/">
           <get:dID>?</get:dID>
           <get:rendition>?</get:rendition>
           <get:extraProps>
              <get:property>
                 <get:name>?</get:name>
                 <get:value>?</get:value>
              </get:property>
           </get:extraProps>
        </get:GetFileByID>
        そして、 <get:dID> タグ要素のみ埋めたいのですが、WebCenter Contentの制限もしくは不具合のために、残りのタグ要素を送信してはいけません。それは空要素(つまり、 <get:rendition></get:rendition> や <get:rendition/> )であってもです。 dID でのみ問い合わせを実行するリクエストのサンプルは以下のような形式で記述する必要があります。
        <get:GetFileByID xmlns:get="http://www.stellent.com/GetFile/">
           <get:dID>12345</get:dID>
        </get:GetFileByID>
        簡単なBPMでのマッピングでは以下のような結果のサンプルのように空タグを作成するところに問題があります。
        <get:GetFileByID xmlns:get="http://www.stellent.com/GetFile/">
           <get:dID>12345</get:dID>
           <get:rendition/>
           <get:extraProps/>
        </get:GetFileByID>
        上記の構造は完全に妥当ではありますが、WebCenter Contentは受け入れないので、この問題を回避する必要があります。回避策は数多ありますが、今回は、単に入力データをBPMからコピーするというMediatorコンポーネントをBPMプロセスとサービス間に配置し、空タグを取り除きます。以下の手順に従ってMediatorコンポーネントを構成します。
        • Mediatorコンポーネントをドラッグアンドドロップしてコンポジットに貼り付けます。
        • 「SOAPバインディングの作成」のチェックを外し、「WSDLからインターフェースを定義」のテンプレートを使って、既存の GetFile.wsdl を選択します。

        • Mediatorコンポーネントをダブルクリックして編集します。 GetFileByID オペレーションへの静的ルーティングルールを追加して、サービスタイプから References/UCM_GetFile/GetFileByID をターゲットのサービスに指定します。

        • リクエストとリプライのXSLTマッパーを作成します。

        リクエストでは dID 要素のみマッピングします。

        レスポンスは全体を自動マッピングします。

        • ようやくサービスアクティビティをBPMプロセスに追加し設定することができます。組み込みサブプロセスにドラッグアンドドロップして NormalizedGetFile サービスと getFileByID オペレーションを選択します。

        • 入力と出力両方をマッピングします。



        • 組み込みサブプロセスの作業が終了したら、全ての添付ファイル(名前とペイロード)が attachmentsUCM 変数に入っていることになり、このサンプルの主要な目的が完了します。しかし、全てが良好に動作することを確認するため、サンプルに添付ファイルをファイルに書き出させましょう。その目的のために最後に組み込みサブプロセスを追加して同時に各 attachmentsUCM/attachment[] 要素を反復処理させます。


        • 各反復処理にて、サービスアクティビティを使ってFile Adapterのwriteサービスを呼び出します。ここで設定すべき2個の重要なパラメータがあります。一つはペイロードそのものです。File Adapterはbase64形式(文字列)のバイナリデータを期待しているため、XPathを使ってマッピングする必要があります(単純なマッピングだとbase64バイナリの妥当なターゲットとして文字列が認識されません)。

        もう一つは、ターゲットの filename をサービスプロパティダイアログボックスを使って設定する必要があります。

        組み込みサブプロセスの反復処理にて、インデックス変数 loopCounter を使って適切な要素を取得していることに着目して下さい。

        添付ファイルに関するエントリの最後として、ドキュメントをBPMプロセスからHuman Taskに注入する方法をご紹介します。また、異なるUser Task間で添付ファイルを共有する方法についても取り上げます。
        添付ファイルに関連するエントリが全て終了したら、サンプルプロジェクトをjava.netにUpする予定にしています。

        Oracle BPM 11gサンプルコード
        http://java.net/projects/oraclesoasuite11g/pages/BPM