2014年9月29日

[WLS, FMW] WebLogic Server 12.1.3 on JDK 8

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

WebLogic Server 12.1.3がJava SE 8での動作検証が済み、動作が保証されました。2年ほど前にこの検証をはじめましたが、製品コードだけでなく、バイトコード操作のためのASM、Java開発ツールのEclipseといった様々な3rdパーティツールにも変更が必要でした。Windows、Linux、Solarisの64bitプラットフォームで、HotSpot JDK8 Update 20以降の組み合わせでサポートされます。あなたはのMaxPermSizeをコマンドラインで正しく設定しなければならない時代は終わりました(JDK8が無視します)。この動作認定は、WebLogic Server固有のものであって、特に明記しない限り、他のOracleソフトウェアは対象ではありません。

新しいJava SE 8の機能をこのエントリですべて記述しません(知りたい方は以下のリンクをどうぞ)が、これからは人気のある機能、具体的にはLamda式や、JSPを含む、アプリケーションのデフォルトメソッドといったものが使えるようになります。
What's New in JDK 8
http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html
Lambda式を使った簡単なサーブレットのサンプルを以下につけておきます。

Java SE 8には、新しいJDBC 4.2のAPIがあり、JDBC 4.2をサポートするJDBCドライバは、Java SE 8上で動作するWebLogic Server 12.1.3でサポートします。WebLogic Server 12.1.3に同梱されているDerby 10.10ドライバはJDBC 4.2でテストしています(詳細は以下をどうぞ)。
JDBC 4.2-only features
http://db.apache.org/derby/docs/10.10/ref/rrefjdbc4_2summary.html
ベンダーインターフェースのAPIがアプリケーションに対して透過的に見えるよう、WebLogic ServerデータソースはDynamic Proxyを使います。JDK8の新しいデフォルトメソッドとDynamic Proxyの組み合わせによって、WebLogic ServerがJDBC 4,2をサポートする上で変更は不要でした。すべては、JVMとベンダーのJDBCドライバで行われます。今後、JDBC4.2に関する詳細情報を別のエントリでご紹介する予定です。.

統合が必要な領域は、Java EE Concurrency Features(JSR 236)、Java SEでのfork/joinとparallel streams機能です。現時点で、WebLogic Server 12.1.3はfork/joinやparallel streams機能を使うアプリケーションをサポートしないため、WebLogic Serverアプリケーションをビルドする際にはこれらの機能を使わないようにしなければなりません。この制限の理由は、 fork/joinスレッドプールが使うスレッドがWebLogic Serverが管理対象とするスレッドでないからです。セキュリティやトランザクションステートを含め、スレッドの状態が適切に作成されない可能性があるため、これらのスレッドで実行されるワークはすべて、WebLogic ServerやJava EEのファシリティを利用できない可能性があります。さらに、おそらく過度にスレッドを使用するため、これらのスレッドは、WebLogic Serverワークマネージャのスレッド管理機能によって制御されることはありません。
JDK8では数多くのセキュリティ面で機能強化が図られました。無制限強度の新しいJava暗号化拡張ポリシーJCEポリシー・プラットフォーム(Unlimited Strength Java(TM) Cryptography Extension Policy Files for the Java(TM) Platform, Standard Edition Runtime Environment 8)をインストールする必要があるかもしれませんが、JDK8用のJCE Unlimited Strength Jurisdiction Policy Filesは以下からダウンロードできます。
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
開発に際してJDK8の機能を利用したい場合、お気に入りのIDEの最新版にアップグレードしたくなるかもしれません。一般的に、多くのツールがすでにJDK8をサポートするようになっていますが、jarjar(ASM 4の組込み版で、JDK8では動作しません)だけが、まだアップデートされていません。Java 8はEclipse Keplerのアップデート、Eclipse Luna(4.4)で利用いただけます。OracleはOEPEとして知られているOracle Enterprise Pack for Eclipse(12.1.3.1.1、現在12.1.3.2)を出荷していますが、これはLunaをベースとしており、JDK7、JDK8をサポートしています。詳細は以下のリンクをどうぞ。
Oracle Enterprise Pack for Eclipse (12.1.3.2)
http://www.oracle.com/technetwork/developer-tools/eclipse/downloads/index.html)
Oracle製品の開発でEclipseをお使いになる場合、「Oracleのミドルウェア、モバイル、データベースおよびクラウド·プラットフォームを活用できる、Eclipseの開発者のための比類のないデベロッパー・エクスペリエンス」のために、OEPEをお試しください。

WebLogic Server 12.1.3のドキュメントのWhat’s NewがJDK8サポートに関する詳細情報が記載されるはずです。最新のHotSpot SE 8 JVMをダウンロードし、新機能を試してみてください。

Calculator.java servlet:
import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(
  name = "Calculator",
  urlPatterns = "/calculator"
)
public class Calculator extends HttpServlet implements Servlet {
  protected void doGet(HttpServletRequest request,
  HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
  }

  protected void doPost(HttpServletRequest request,
  HttpServletResponse response) throws ServletException, IOException {
    Integer number1 = Integer.valueOf(request.getParameter("number1"));
    Integer number2 = Integer.valueOf(request.getParameter("number2"));
    String operator = request.getParameter("operator");

    Calculator myCalc = new Calculator();
    IntegerMath multiplication = (num1, num2) -> num1 * num2;
    IntegerMath division = (num1, num2) -> num1 / num2;
    IntegerMath addition = (num1, num2) -> num1 + num2;
    IntegerMath subtraction = (num1, num2) -> num1 - num2;

    Integer result = 0;
    switch(operator) {
    case("+"):
      result=myCalc.operatorBinary(number1,number2,addition);
      break;
    case("-"):
      result=myCalc.operatorBinary(number1,number2,subtraction);
      break;
    case("*"):
      result=myCalc.operatorBinary(number1,number2,multiplication);
      break;
    case("/"):
      result=myCalc.operatorBinary(number1,number2,division);
      break;
    }
    request.setAttribute("result", result);
    request.getRequestDispatcher("calculator.jsp").forward(request, response);
  }

  interface IntegerMath {
    int operation(int number1, int number2);
  }
  public int operatorBinary(int number1, int number2, IntegerMath op) {
    return op.operation(number1, number2);
  }
}

calculator.jsp
<form id="calculator" action="calculator" method="post">
  <p>
  First number <input name="number1" type="text"/>
  <select name="operator">
    <option value="*"> * </option>
    <option value="/"> / </option>
    <option value="+"> + </option>
    <option value="-"> - </option>
  </select>
  Second number <input name="number2" type="text"/>
    <button type="submit"> Calculate </button>
  </p>
  <p> Result: <span id="result">${result}</span></p>
</form>

なお、My Oracle Supportで、ダウンロードが必要かもしれない、2件のバグに対応するパッチが提供されています。
  • Patch 18729264 - JAVA8 JDT GA MAY FAIL WITH JDK8 RUNTIME AND "-SOURCE" / "-TARGET" LESS THAN 1.8
  • Patch 18428696 - EJBGEN HAS REFERENCES TO SUN.MIRROR.APT, WHICH GOES AWAY IN JDK8

2014年9月27日

[Database] Oracle Database 12.1.0.2 for MS Windows is available

原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/oracle_database_12_1_01

ようやく、Microsoft Windows用Oracle Database 12.1.0.2がOTN、Oracle Software Delivery Cloud (eDelivery)、My Oracle Supportからダウンロード頂けるようになりました。

OTNのページへは以下のリンクからどうぞ。
Oracle Database Software Downloads
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html

2014年9月26日

[Cloud] Announcing General Availability of Oracle OpenStack for Oracle Linux

原文はこちら。
https://blogs.oracle.com/virtualization/entry/announcing_general_availability_of_oracle

本日Oracle OpenStack for Oracle Linux 1.0がリリースされたことを発表いたします。
Oracle OpenStack for Oracle Linux Now Generally Available
http://www.oracle.com/us/corporate/press/2298602
この発表とともに、Oracle LinuxおよびOracle VMをご利用のお客様に対し、商用OpenStackのサポートを提供します。OpenStackのサポートはOracle LinuxおよびOracle VMのPremier Supportの範囲でご利用いただけ、追加料金はかかりません。

2013年12月、OracleはOpenStack Foundationに参加し、5月にアトランタで開催されたOpenStack Conference中にHavanaをベースとしたテクノロジープレビュー版をリリースしました。以後、Icehouseをサポートするようテクノロジープレビューを更新し、引き続きインストールプロセスの簡略化やバグ修正などをすすめ、テクノロジープレビューを改善してきました。本日リリースしたこのGA版は、最新のIcehouseをベースとしています。

私たちの目標は、OpenStackを、信頼性、セキュリティ、パフォーマンスといったあらゆる要件を満たし、すべてのワークロードタイプに対応する、データセンター全体を運用できるエンタープライズグレードのソリューションにする支援をすることです。私たちは、OpenStackに第一級のソリューションにしてあらゆる規模の顧客のためのクラウドOSになってもらいたいと考えています。それを実現するためにOracleが支援できることの一つとして、テストし、要求の厳しいエンタープライズ·ワークロードをOpenStack上で実行できるようにすることがあります。これらのワークロードが信頼性のあるサポートされた方法でOpenStack上で実行できることを確認することが、OpenStackがエンタープライズグレードの、汎用クラウド管理ソリューションたらしめるための重要なステップです。仮想環境でデプロイし、エンタープライズのワークロードを管理する経験がある弊社は、OpenStackがクラウドOSとなるまでのアクティビティを推進する上で好位置にあり、これこそ、我々が計画していることなのです。

Oracle OpenStack for Oracle Linuxの詳細は以下からどうぞ。
来週はOracle OpenWorldですが、その中でOracle OpenStack for Oracle Linux 1.0をご紹介するとともに、セッションやハンズオンを実施しますので、ご来場をお待ちしております。以下はOpenStackをテーマにしたセッションです。

[Linux] Oracle Linux 5.11 is now available

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

Oracle Linux 5.11という、Oracle Linux 5の11回目かつ最終となるアップデートリリースを発表できうれしく思っています。
[El-errata] Oracle Linux Release 5 Update 11 for x86 (32 bit) and x86_64 (64 Bit) architectures
https://oss.oracle.com/pipermail/el-errata/2014-September/004468.html
Oracle Linux
http://oracle.com/linux
ISOイメージはOracle Software Delivery Cloudからまもなくダウンロードできるようになる予定です。個別のRPMパッケージは既にパブリックyumリポジトリに上がっています。
Oracle Software Delivery Cloud
http://edelivery.oracle.com/linux
Public yum repository
http://public-yum.oracle.com/repo/OracleLinux/OL5/11/
このリリースには、OracleがOracle Linux向けに推奨するカーネルUnbreakable Enterprise Kernel Release 2 (2.6.39-400)が含まれています。その他の詳細は、リリースノートをご覧ください。
Unbreakable Enterprise Kernel Release 2
https://blogs.oracle.com/linux/entry/oracle_unbreakable_enterprise_kernel_release
Release Notes for Unbreakable Enterprise Kernel Release 2 Quarterly Update 5
https://oss.oracle.com/ol6/docs/RELEASE-NOTES-UEK2-QU5-en.html
Oracle Linux 5.11 Release Notes
https://oss.oracle.com/ol5/docs/RELEASE-NOTES-U11-en.html
Oracle Linuxはダウンロード、利用、配布すべてが無料で、アップデートおよびエラータも無料でご利用いただけます。
Free Updates and Errata for Oracle Linux
https://blogs.oracle.com/linux/entry/free_updates_and_errata_for
サポートに関しては、どのシステムにサポートサブスクリプションを必要としているのか、各システムにどのレベルのサポートが必要なのかに応じて自由に決定いただけます。
Oracle Linux Support
http://www.oracle.com/us/technologies/linux/support/overview/index.html
すべての環境を最新に維持し安全に保ちながら、自身で個々のシステムに最適なサポート範囲を決定できるのです。Oracle Linuxは開発、テスト、本番システムのための理想的な選択肢といえるでしょう。

2014年9月23日

[Database] New AQ Background Architecture in Oracle 12c

原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/new_aq_background_architecture_in

Oracle Advanced Queuingを多様いただいているお客様を知っていますが、Oracle Database 12cでは、AQのバックグラウンドのアーキテクチャが変わりました。ドキュメントに詳細が明確に記述されています。
Oracle® Databaseアドバンスト・キューイング・ユーザーズ・ガイド 12c リリース1 (12.1)
基本的なコンポーネント
AQバックグラウンド・アーキテクチャ
http://docs.oracle.com/cd/E49329_01/server.121/b71332/componet.htm#ADQUE3663
Oracle® Database Advanced Queuing User's Guide 12c Release 1 (12.1)
Basic Components
AQ Background Architecture
http://docs.oracle.com/database/121/ADQUE/componet.htm#ADQUE3663
これまでにわかっている範囲では、後方互換性の問題はないはずですが、(いつものように)皆様からフィードバックをいただけるとうれしいです。

AQの変更点、追加機能、強化機能、新機能は以下からどうぞ。

[WLS] JMS JDBC Store Performance on Oracle RAC

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

JMS周りのパフォーマンステストの多くは、Oracle Real Application Clusters上のJDBCストアを使って行われてきました。この記事の目的は、いくつかの既存のドキュメントを参照しつつ、WebLogic Server 12.1.3の新しい関連機能をご紹介し、さまざまなアプローチをまとめることにあります。

まず、JMSバッキングストアに使っているOracle Databaseの表の最適化に関する提案です。現在のJMSのマニュアルでは”I/Oマルチスレッディング”を有効化する場合にはリバース・インデックスの利用を提案しています。これらは高負荷時にのみ推奨しています。Oracle DatabaseのPartitioningオプションを利用できる場合には、表に対しグローバル・ハッシュ・パーティション・インデックスを利用することができます。これを使うとインデックス競合の削減や、グローバル・キャッシュ・バッファの待機を削減し、アプリケーションの応答時間を劇的に改善することができます。パーティショニングはすべてのケースにおいて有効に働きますが、リバース・インデックスを使った場合には顕著な改善が見られない場合があります。詳しくは以下の記事をご覧ください(この記事にはプールサイズやキャッシュサイズに関して、興味深いコメントも掲載されています)。
Oracle FMW 11g R1 SOA with Oracle Database Real Application Clusters Assessment
Oracle Maximum Availability Architecture White Paper
November 2011
http://www.oracle.com/technetwork/database/availability/maa-fmw-soa-racanalysis-427647.pdf
二つ目におすすめするのは、セキュアファイルを使って性能を改善し、ストレージをより効率的かつ容易に管理する、というものです。これは、一般に、メッセージのサイズが大きい場合や、データベースへのネットワーク接続が遅い場合に、JDBCストアのスループットを改善するために推奨されるものです。セキュアファイルに関する詳細は、以下のホワイトペーパーをご覧ください。
Oracle FMW SOA 11g R1: Using Secure Files
Oracle Maximum Availability Architecture White Paper
September 2012
http://www.oracle.com/technetwork/database/availability/oraclefmw-soa-11gr1-securefiles-1842740.pdf
両者を組み合わせることで、JMSバッキングストアのスキーマは次のようになります。
CREATE TABLE JMS1.JMSWLSTORE (
        ID INT NOT NULL,
        TYPE INT NOT NULL,
        HANDLE INT NOT NULL,
        RECORD BLOB NOT NULL,
        PRIMARY KEY (ID) USING INDEX GLOBAL PARTITION BY HASH (ID) PARTITIONS 8
        TABLESPACE JMSTS
   )
   LOB (RECORD) STORE AS SECUREFILE (TABLESPACE JMSTS ENABLE STORAGE IN ROW); 
パーティションのサイズが一様になるよう、パーティションの個数は2のべき乗である必要があります。パーティションの推奨個数は、予想されるテーブルやインデックスの成長度合いによって変動するため、時間をかけてDBAが分析し、調整する必要があります。関連するパラメータは、以下のOracle Database VLDB and Partitioning Guideをご覧ください。
Oracle® Database VLDBおよびパーティショニング・ガイド
12c リリース1 (12.1)
http://docs.oracle.com/cd/E49329_01/server.121/b71291/toc.htm
Oracle® Database VLDB and Partitioning Guide
12c Release 1 (12.1)
http://docs.oracle.com/database/121/VLDBG/toc.htm
カスタムJMS JDBCストアテーブルを使用する場合には、カスタムDDL機能をご覧ください。
Administering Server Environments for Oracle WebLogic Server
Using the WebLogic Persistent Store
Using Custom File Stores and JDBC Stores
http://docs.oracle.com/middleware/1213/wls/CNFGD/store.htm#i1160628
Real Application Clustersに対してマルチデータソースもしくはActive GridLinkを使っているいずれの場合でもこうした改善の恩恵を受けることができます。
新しいトリックが、WebLogic Server 12.1.3のJMSに性能向上のためののパフォーマンスの飛び道具として追加されました。データベースを使用するすべてのアプリケーションと同様に、アプリケーションからデータベースまでのラウンドトリップすべてにオーバーヘッドがあります。JMS JDBCストアのコードでは、それをサポートするデータベースを用いたバッチ処理を使用しています。設定したバッチサイズ(すなわち、DeletesPerBatchMaximumとInsertsPerBatchMaximum)と、トランザクション内のオペレーションの数に応じて、バッチ実行のための1回以上のラウンドトリップと、1回のコミットのためのラウンドトリップでトランザクションが構成されます。新しい構成オプションであるOraclePiggybackCommitEnabledは、Oracle Thinドライバの場合のみ、バッチ操作にコミットも乗せてしまうというものです。小さなトランザクションでは、1回のラウンドトリップで、バッチを実行し、コミットします。つまり、ラウンドトリップの数の半分にします。
多くの研究が、マルチデータソースとActive GridLinkの両方について、全体的なパフォーマンスをチェックする多くの検証が行われてきました。WebLogic Server 12.1.2での接続アフィニティの強化以後、(ラウンドロビンではなく)フェールオーバーするよう構成されたマルチデータソースのパフォーマンスは、Active GridLinkとほぼ同じです。マルチデータソースのフェイルオーバアルゴリズムでは、接続アフィニティを有しているため、失敗するまで1つのインスタンスですべての接続を保持します。WebLogic Server 12.1.1以前では、Active GridLinkは単一インスタンスへの接続アフィニティを持たないため、フェールオーバを有効にしたマルチデータソースは、Active GridLinkよりもパフォーマンスに優れていました。管理性やフェールオーバを含む多くの領域で、より優れたRACサポートを提供しているため、マルチデータソースでActive GridLinkを使うことをおすすめします。詳細は以下のドキュメントをご覧ください。
Administering JDBC Data Sources for Oracle WebLogic Server
Using Active GridLink Data Sources
Comparing AGL and Multi Data Sources
http://docs.oracle.com/middleware/1212/wls/JDBCA/gridlink_datasources.htm#BABHGDJH
ただし、Active GridLinkの利用にはWebLogic SuiteもしくはExalogic Elastic Cloud Software(EECS)が必要です。最後に、パフォーマンスを出すための鍵は、(想像されている通り)ワークスレッドの個数だけではなく、同時に利用するプロデューサやコンシューマの個数です。10個を下回るプロデューサやコンシューマの場合、前述の通りハッシュ・パーティションを使ったインデックスやLOB用のセキュアファイルを伴う通常の複数RACインスタンス上のサービスを使ってください。(9個以上のプロデューサやコンシューマがいるような)より高い同時実行性を求める場合、シングルトン・データベース・サービスを使うとより効率がよいでしょう。優先インスタンスや高可用性のためのフェールオーバ・インスタンスを使って構成しておくべきです。
JMS JDBCストア用途で利用する場合、WebLogic Serverデータソースをチューニングしておくと、JMSのスループットおよび当該JMSを利用するアプリケーションのパフォーマンスを劇的に改善することができます。パフォーマンス調査にあたっては、ご自身のアプリケーションやデータを使って実施する必要があります。

2014年9月22日

[Java, Cloud, WLS] WebLogic Encrypt Tool Script for Remote and Cloud Servers

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

Oracle Java Cloud Serviceでは、クラウドでOracle WebLogic Serverのインスタンスを完全に管理できるようになります。
Oracle Java Cloud Service
https://cloud.oracle.com/java
このサービスを使うと、お客様が完全なWebLogic Serverインスタンスを好きなように管理することができます。しかし、作業を実施するために、お客様はSSHを使ってサーバに接続しなければなりません。セキュリティは弊社にとって重要と考えているので、WebLogic Serverは本番モードで実行している場合、WLSTスクリプトを実行したり、平文の機密情報を含むJDBCリソースのようなアーティファクトをデプロイする際に、開発者や運用管理者はデフォルトでは平文のテキストパスワードを使えなくなっています。

簡単に暗号化できるよう、以下のようなスクリプトを作成しました。クラウド運用管理者や開発者にとってだけでなく、オンプレミス環境で、スクリプトやXMLファイルに平文テキストパスワードを保存してはいけない状況下でデプロイする場合にも、きっと有用だと確信しています。
encrypt-password-on-remote-wls-domain.sh
https://gist.github.com/brunoborges/e0236a55fe42f2d1cb62
#!/bin/sh
# Util script to encrypt a password on a remote WebLogic domain through SSH

REMOTE_DOMAIN_HOME=/home/bruno/Work/tools/oracle/mw1212/user_projects/domains/base_domain

DIR="$( cd "$( dirname "$0" )" && pwd )"

PRIVATE_KEYFILE=~/.ssh/id_rsa

ssh bruno@localhost -i $PRIVATE_KEYFILE DOMAIN_HOME=$REMOTE_DOMAIN_HOME PASSWORD=$1 '/bin/bash -s' <<'ENDSSHSESSION'
  cd $DOMAIN_HOME/bin
  source setDomainEnv.sh
  java weblogic.security.Encrypt $PASSWORD
ENDSSHSESSION
フィードバックをお待ちしています!