2014年8月28日

[Java] Java EE 8 Takes Off!

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

Java EEにとって重要な日です。Java EE 8がJCPプロセスを通じ、公式にJSR 366として立ち上がりました。期待されているように、主要な注力領域は、HTTP 2/HTML 5のサポート、CDI/managed beanの整合、クラウドのサポート、Java SEとの整合です。
以下にハイレベルな内容をまとめました。

Web Standards
  • HTTP 2
  • Server-Sent Events (SSE)
  • JSON binding
  • JSFを補完するアクション指向Webフレームワーク
  • Hypermediaのさらなるサポート
  • JSON-P、WebSocket、JAX-RSの機能強化
Managed Bean/CDI Alignment
  • CDI 2
  • EJBスタイルの宣言的セキュリティやスケジューリングのコンテナサービスがManaged Bean/CDIで利用可能
  • MDBスタイルのCDIベースの宣言的JMSメッセージリスナ
  • 古いEJB2/CORBAのAPIのプルーニング
  • CDIとJAX-RSの整合
Cloud
  • 設定
  • マルチテナント
  • 簡素化されたセキュリティ設定
  • 管理・監視用REST API
Java SE
  • 繰り返しのアノテーション、ラムダ式、Date/Time API、Type Annotation、Completable Futuresなどの機能を利用
もちろん、これはただのハイレベルな初期計画であって、他の多くの変更があります。例えば、JSFやJMSのアップデートだけでなく、JCache/データグリッドの追加も含まれます。詳細はjcp.orgのJSRページをチェックしてください。
JSR 366: Java Platform, Enterprise Edition 8 (Java EE 8) Specification
https://jcp.org/en/jsr/detail?id=366
現在が参加したり、少なくとも検討を始めたりする時期です。
プラットフォームJSRのほかに、Java EE 8でのリリースを目指している数多くのAPIもまたリストアップされていて、各々のJSRが立ち上がっていますので、詳細は各JSRのページをご覧下さい。
多くのJava EE8 JSRがすぐに引き続きます。いつものように、事態が進展すればこの場でご連絡しますので、このブログ(The Aquarium)を引き続きチェックしていただき、ご意見を聞かせてください。

2014年8月20日

[Java] Release: Oracle Java Development Kit 8, Update 20

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

Java Development Kit 8, Update 20 (JDK 8u20)がダウンロードできるようになりました。このJavaプラットフォームの最新リリースでは、JDK8に対し、引き続き新機能やセキュリティ、パフォーマンスの最適化を進め、改善しています。例えば、
  • Oracle Java SE Advancedでご利用頂ける、新しいエンタープライズ向け管理機能
  • Javaバージョンの互換性をより細かく制御出来る製品
  • セキュリティアップデート
  • MSI互換インストーラ
といった機能が追加・拡張されています。
ダウンロード
http://www.oracle.com/technetwork/java/javase/downloads/index.html
リリースノート
http://www.oracle.com/technetwork/java/javase/8u20-relnotes-2257729.html
Java SE 8ドキュメント
http://docs.oracle.com/javase/8/
それでは、JDK 8 Update 20での主要な新しいツールや新機能、機能拡張・改善をご紹介しましょう。

Advanced Management Console

http://www.oracle.com/technetwork/java/javaseproducts/advanced-mgmt/index.html
Java Advanced Management Console 1.0 (AMC) がOracle Java SE Advancedでご利用頂けるようになりました。AMCは他の機能と共に配布ルールセット(Deployment Rule Set / DRS)セキュリティ機能を採用しました。これにより、自社のデスクトップやJavaベースのアプリケーションやソリューションを展開するISV向けに、システム管理者がJavaのバージョン互換性やセキュリティアップデートをより細かくしかも簡単に制御できるようになっています。

MSI Enterprise JRE Installer

http://www.oracle.com/technetwork/java/javase/8u20-relnotes-2257729.html#newft
Oracle Java SE Advanced製品で、Windows 64bit/32bitシステムでご利用頂けるMSI互換インストーラを使うことで、システム管理者は、企業内の全てのデスクトップに対し、JREをユーザーインタラクションなしで自動インストールできます。

Performance

  • 文字列の重複をなくし、メモリ使用量を削減しました
  • 長時間実行するアプリケーション用に、改善されたG1 GCをサポートしました

その他

  • 新しいDRSの強制機能を使うと、システム管理者はJava Web Start アプリケーションが動作するJREを指定することができます。
    Deployment Rule Set by Example
    https://blogs.oracle.com/java-platform-group/entry/deployment_rule_set_by_example
    この機能により、エンドユーザは実行のためにセキュリティ例外を承認する必要がなくなるため、レガシーアプリケーションを使っている場合には有用です。
  • Java Mission Control 5.4に新たに使い勝手を上げる機能が追加されました。また、ランチャーはEclipse 4.4に統合されています。
    Java Mission Control
    http://www.oracle.com/technetwork/java/javaseproducts/mission-control/index.html
  • ARM上でのJavaFX
  • 初期コンパイル後のバイトコードの永続化(bytecode persistence)により、Nashornのパフォーマンスが向上しています。
詳細情報はリリースノートをどうぞ。
JDK 8u20 Release Notes
http://www.oracle.com/technetwork/java/javase/8u20-relnotes-2257729.html

2014年8月14日

[Coherence] Getting Started With The Coherence Memcached Adaptor

原文はこちら。
https://blogs.oracle.com/OracleCoherence/entry/getting_started_with_the_coherence
[訳注]正しくはAdapterですが、原文のタイトルのままAdaptorを使っています。

Overview

Coherence 12c (12.1.3) でMemcachedクライアントのサポートが追加され、直接CoherenceクラスタにBinary Memcachedプロトコルでデータを格納できるようになりました。このエントリではCoherence Memcached Adapterの設定方法を紹介するとともに、MemcachedクライアントがどのようにCoherenceクラスタへ接続することができるのかを紹介するため、シンプルなPHPのサンプルを用意しました。

Memcached Adapterはプロキシサービスとして構成し、そのプロキシサービスをCoherenceクラスタで実行します。以下はサンプルのCache構成です。
<?xml version="1.0"?>
<cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
  xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config 
  http://xmlns.oracle.com/coherence/coherence-cache-config/1.2/coherence-cache-config.xsd">
  <defaults>
    <serializer>pof</serializer>
  </defaults>
  <caching-scheme-mapping>
    <cache-mapping>
      <cache-name>memcache</cache-name>
      <scheme-name>DistributedCacheScheme</scheme-name>
    </cache-mapping>
  </caching-scheme-mapping>
  <caching-schemes>
    <distributed-scheme>
      <scheme-name>DistributedCacheScheme</scheme-name>
      <service-name>DistributedCacheService</service-name>
      <backing-map-scheme>
        <local-scheme/>
      </backing-map-scheme>
      <autostart>true</autostart>
    </distributed-scheme>
    <proxy-scheme>
      <service-name>MemecachdTcpCacheService</service-name>
      <acceptor-config>
        <memcached-acceptor>
          <cache-name>memcache</cache-name>
          <memcached-auth-method>plain</memcached-auth-method>
          <address-provider>memcached-addr-provider</address-provider>
        </memcached-acceptor>
      </acceptor-config>
      <autostart>true</autostart>
    </proxy-scheme>
  </caching-schemes>
</cache-config>
いくつか注意点を。
<memcached-acceptor>以下の<cache-name>要素は、Memcached acceptorのための分散キャッシュを定義しています。このacceptorに接続するすべてのMemcachedクライアントはこのキャッシュにアクセスします。
必要であれば、<memcached-auth-method>を設定し、クライアント認証を有効にすることができます。現時点ではSASL (Simple Authentication and Security Layer)プレーン認証のみをサポートしています。
<address-provider>要素ではMemcached Adapterが接続を待ち受けるソケットアドレスを定義します。Coherenceのオペレーション構成ファイルで定義します。
以下はaddress-providerの設定を紹介するオペレーション構成ファイルの例です。
<?xml version='1.0'?>
<coherence
 xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config
 http://xmlns.oracle.com/coherence/coherence-operational-config/1.2/coherence-operational-config.xsd">
 <cluster-config>
    <address-providers>
      <address-provider id="memcached-addr-provider">
        <socket-address>
          <address>127.0.0.1</address>
          <port>11211</port>
        </socket-address>
      </address-provider>
    </address-providers>
  </cluster-config>
  <logging-config>
    <destination system-property="tangosol.coherence.log">stdout</destination>
    <severity-level system-property="tangosol.coherence.log.level">9</severity-level>
  </logging-config>
  <security-config>
    <identity-asserter>
      <class-name>memcached.PasswordIdentityAsserter</class-name>
    </identity-asserter>
  </security-config>
</coherence> 
memcached-addr-providerというidを持つアドレスプロバイダはsocket-addressの参照を定義しています。

Authentication


認証のため、カスタムIdentityAsserterを実装でき、そのIdentityAsserterをオペレーション構成ファイルで宣言できます。上記オペレーション構成ファイルのサンプルから、関連する部分だけ抜き出してみます。
…
<security-config>
    <identity-asserter>
      <class-name>memcached.PasswordIdentityAsserter</class-name>
    </identity-asserter>
 </security-config>
…
Memcached AdapterはIdentityAsserterの実装を呼び出し、トークンとしてcom.tangosol.net.security.UsernameAndPasswordオブジェクトを渡します。

以下はIdentityAsserterのサンプルです。
package memcached;
import com.tangosol.net.Service;
import com.tangosol.net.security.IdentityAsserter;
import com.tangosol.net.security.UsernameAndPassword;
import javax.security.auth.Subject;
public class PasswordIdentityAsserter implements IdentityAsserter {
  public Subject assertIdentity(Object oToken, Service service)
  throws SecurityException {
    if (oToken instanceof UsernameAndPassword) {
      UsernameAndPassword secToken = (UsernameAndPassword) oToken;
      String sPwd = new String(secToken.getPassword());
      if (secToken.getUsername().equals("username")
          && sPwd.equals("password")) {
        return new Subject();
      }
    }
    throw new SecurityException("Access denied");
  }
}

PHP Memcached client


PHPのmemcachedクライアントであるMemcacheとMemcachedは非常に人気があります。Memcachedはより新しいもので、Binary MemcachedプロトコルとSASL認証を両方ともサポートしています。MemcachedとSASLを有効にするためには、以下の設定をphp.iniファイルに設定する必要があります。
    extension=memcached.so
    memcached.use_sasl = 1
次のPHPコードはPHP Memcachedクライアントライブラリを使ってCoherenceクラスタに接続し、エントリを追加し、エントリを再度読み出しています。
<?php
  $m = new Memcached();
  $m->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
  $m->setSaslAuthData("username", "password");
  if (!count($m->getServerList())) {
    // List of Coherence proxy service nodes
    $m->addServer('127.0.0.1', 11211);
  }
  print_r($m->getVersion());
  $m->set('test', 'test_string');
  print_r('Cache value: ' . $m->get('test'));
?>

Putting it all together


これは簡単に試すことができます。まずはCoherence、PHP、PHP Memcachedクライアントライブラリをダウンロードしてインストールしましょう。続いて、テスト用ディレクトリに、先ほど説明したtangosol-coherence-override.xmlという名前のオペレーション構成ファイルを作成します。同様に、Memcachedクライアントのためのキャッシュ構成を指定するcoherence-cache-config.xmlという名前のキャッシュ構成ファイルを作成します。最後に、テスト用ディレクトリにmemcachedというディレクトリを作成し、先ほどのコードを含むPasswordIdentityAsserter.javaというファイルを作成します。

PHPで、先ほどのPHPのサンプルコードをtest.phpとして保存しましょう。これでテストの準備は完了しました。

Coherenceを立ち上げるために、Coherenceライブラリを参照する必要があります。簡単のために、Coherenceのインストールディレクトリを環境変数COH_HOMEと定義しましょう。以下ではLinuxやOS X環境を想定していますが、Windowsでも同様です。

テストディレクトリ内で以下のコマンドを実行し、PasswordIdentityAsserterをビルドします。
javac –cp $COH_HOME/lib/coherence.jar memcached/PasswordIdentityAsserter.java
それでは、Coherenceキャッシュサーバを起動し、Memcachedクライアントのデータを保存します。
java -cp .:$COH_HOME/lib/coherence.jar com.tangosol.net.DefaultCacheServer
最後に、PHPクライアントがCoherence Memcached Adapterを使って安全に接続、データの格納および読み出しができることを確認しましょう。
php test.php
出力結果は以下のようになるはずです。
 Array
 (
     [127.0.0.1:11211] => 12.1.3
 )
 Cache value: test_string
PHPクライアントがCoherenceにインサートした値であるtest_stringの読み出しに成功したことを示しています。

2014年8月10日

[Data Integration] OWB to ODI 12c Migration in action

原文はこちら。
https://blogs.oracle.com/dataintegration/entry/owb_to_odi_12c_migration

OWB(Oracle Warehouse Builder)からODI(Oracle Data Integrator) 12cへの移行ユーティリティを使うと、簡単にOracleの戦略データ統合ツールを使い始めることができます。このユーティリティはOWBとODIを開発した同じグループが設計、ビルドしました。
以下のスクリーンショットは録画したWebcastから取得したもので、OWBで表示しているプロジェクトがODI 12cでどのように見えるのかを示しています。
移行ユーティリティを実際に使っている様子を見ることができる有用なWebcastがあります。このWebcastでは、OWBでの実装と移行ユーティリティを使ったODI 12cへの移行を取り扱っています。
Partner Webcast - OWB to ODI MIgration Utility
http://oracleconferencing.webex.com/oracleconferencing/ldr.php?RCID=df8729e0c7628dde638847d9511f6b46
Stewart Brysonが投稿した技術記事がOTNにあがっており、その中でOWBをご利用のお客様が移行する上で知っておいて欲しいODIの機能やオプションの概要を説明しています。この記事は、一読の価値があります。
Making the Move from Oracle Warehouse Builder to Oracle Data Integrator 12c
http://www.oracle.com/technetwork/articles/datawarehouse/bryson-owb-to-odi-2130001.html
是非ご覧いただき、フィードバック戴ければと思います。

[Mobile] Required Field Validation in Oracle MAF

原文はこちら。
https://blogs.oracle.com/shay/entry/required_field_validation_in_oracle

Oracle MAF (Mobile Application Framework) で入力フィールドの検証を実現する方法をご紹介しましょう。例として、ボタンをクリックして操作を実行する段階で、値が入っていなければならないフィールドがあるとします。
検証を実現するには、フィールドのrequired属性とshowRequired属性を以下のように設定しましょう。
<amx:inputText label="label1" id="it1" required="true" showRequired="true"/>
では、ページを開き、フィールドが空の状態で別のページへ遷移するボタンをクリックしてみたところ......エラー表示が出ないことに気づくことでしょう。これは、AMXページに検証の実行を指示していなかったためです。

検証を追加するため、amx:validationGroup タグを使います。これで検証したいフィールドを囲みます。具体的には以下のような感じです。
<amx:validationGroup id="vg1">
  <amx:inputText label="label1" id="it1" required="true" showRequired="true"/>
</amx:validationGroup>
amx:validateOperation タグをナビゲーションボタンに追加すると、以前定義したグループ(この例ではvg1)を検証するように指示することができます。
<amx:commandButton id="cb2" text="go" action="gothere">
  <amx:validationBehavior id="vb1" group="vg1"/>
</amx:commandButton>
これで、ページを実行し、フィールドが空の状態でページ遷移ボタンをクリックすると、次のような検証エラーが出るようになります。

2014年8月9日

[WLS] Setting V$SESSION for a WLS Datasource

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

全てのOracleデータベース接続は、セッションと呼ばれるデータベースプロセスと関わって動作します。v$sessionビューにはアクティブなデータベースセッションに関するたくさんの情報が含まれています。デフォルトでは、Oracle Thin Driverを使うと、v$session.programに"JDBC Thin Client"という値が設定されます。SQL*Plusや数多くのデータベースのバックグラウンドプログラムとJavaアプリケーションを区別しますが、付加情報がないため、Javaのすべての接続が同じように見えてしまいます。Oracle Thinドライバにある接続プロパティを使って、簡単にv$sessionにこの情報と別の値を設定することができます。次の接続プロパティをサポートしています。
  • v$session.osuser
  • v$session.process
  • v$session.machine
  • v$session.terminal
  • v$session.program
これらを設定すると、データベース側のセッションに対応する値が設定されます。これらの値は、V$SESSIONビューから使用できるようになります。

固定値をデータソースに関連づけたいならば、通常の接続プロパティに値を直接設定するのが簡単です。ランタイムで値が動的に変わる場合にはもっと興味深いのです。例えば、複数のサーバが一つのドメインで動作しており、その情報がサーバで固有のものでなければならない場合、1個の固定値を使った通常のクラスタ展開では役に立たず、各サーバ個別にDataSourceを展開し、これらのプロパティに対し一意の値を持つよう記述子(Descriptor)を手で編集するというやり方では管理できません。このような場合には、システムプロパティを使用して簡単に取り扱うことができます。指定された値は、アプリケーション·サーバーのコマンドラインで設定されたJavaシステムプロパティであると解釈されます。この値はSystem.getProperty()を使用して取得し、接続プロパティの値として設定されます。WebLogic Server 12.1.3にはEncrypted Propertyという新しいプロパティがありますが、それについては別のエントリで説明する予定です。

bin/startWebLogic.shを使ってサーバを起動する場合、コマンドラインで -Dweblogic.Name=${SERVER_NAME} としますが、v$session.program システムプロパティの接続プロパティを"weblogic.Name"に設定すると、セッションプログラムの値は、接続しているWebLogic Serverに一致します。
接続プロパティはWebLogic Server管理コンソールの[接続プール]タブで、データソース構成を編集することで設定できます。プロパティは[プロパティ]と[システム・プロパティ]テキストボックスで設定します。
[訳注]
以下はWebLogic Server 12.1.3のプロパティ値設定画面のスクリーンショットです。

仮にテキスト値に4個の値を設定したとしましょう。一つはシステム・プロパティです。以下はディスクリプタの例です。
<property>
  <name>v$session.osuser</name>
  <value>test1</value>
</property>
<property>
  <name>v$session.process</name>
  <value>test2</value>
</property>
<property>
  <name>v$session.machine</name>
  <value>test3</value>
</property>
<property>
  <name>v$session.terminal</name>
  <value>test4</value>
</property>
<property>
  <name>v$session.program</name>
  <sys-prop-value>weblogic.Name</sys-prop-value>
</property>
もしくは、これらの値をオンライン、もしくはオフラインのWLSTで設定することもできます。以下はオフラインWLSTスクリプトの例です。
cd('/JDBCSystemResource/myds/JdbcResource/myds')
cd('JDBCDriverParams/NO_NAME_0')
cd('Properties/NO_NAME_0')
create('v$session.program','Property')
cd('Property')
cd('v$session.program')
set('SysPropValue', 'weblogic.Name')
$SERVER_NAME がmyserverである場合、クエリをかけると、以下のような応答が返ってきます。
SQL> select program, osuser, process, machine, terminal
  from v$session where program = 'myserver';
myserver test1 test2 test3 test4
サーバー名が明らかでない場合は、v$session.programに WebLogic Server$ SERVER_NAME を設定することができます。-Djdbc.process=<PID>を設定して、特定のWebLogic Serverのサーバプロセスに接続を紐付けることもできます。WebLogic Serverのデータソース名をv$session.programの値に追加したいと思うかもしれません。Javaの値 user.name を osuser に設定することができます。

システムプロパティを使用すると、特に大規模な構成では、接続ソースに関する情報を追跡する上で、強力な機能になることでしょう。

2014年8月7日

[OSB, BPM] Deploying OSB in a 12C Domain with BPM

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

OSB 11gからOSB 12cへ移行した場合に、次のようなWSDLデプロイのエラーが発生することがあります。
Unknown protocol: servicebus
このエラーは通常、BPMがOSBと同じドメインにインストールされている場合に発生します。このエラーを修復するには、以下の手順を踏む必要があります。

  1. WebLogic Server管理コンソールにログイン
  2. 画面左側のナビゲーション・ツリーで、サービスを拡大し、OSGIフレームワークをクリック
  3. bac-svnserver-osgi-frameworkのリンクをクリック
  4. [ロック]をクリックして編集
  5. 一番下の初期化プロパティのテキストフィールドに、以下の設定を追加(末尾に空白を入れないように注意しましょう)
  6. felix.service.urlhandlers=false
  7. [保存]をクリックして変更を有効化した上で、WebLogic Serverを再起動

[訳注]
このやり方では、確かにOSBは動作するようになりますが、BPM Composerが動作しないことがあります。
原因は、OSGiフレームワークを構成した場合に com.bea.wli.sb.resources.url プロトコルがロードされず、Felix(Apache Felix)がプロトコルハンドラリストで com.bea.wli.sb.resources.url プロトコルを見つけられないためです。このOSGiフレームワークは、BPM12cの新機能Process Asset Manager (PAM) で使っているsubversionで利用していますが、元々管理対象サーバ (soa_server) でだけ動作していれば良いので、以下の手順で設定を変更しておきましょう。
  1. WebLogic Server管理コンソールの[ドメイン構造]でドメイン名>[サービス] >[OSGiフレームワーク]を開く
  2. [ターゲット]タブでAdminServerのチェックを外す
  3. [保存]をクリックして設定を保存

もし、管理サーバに全部載せしているような場合(IntegratedServerの場合などに該当)は、上記の方法では対応できないので、以下のように、setStartupEnv.shの -Djava.protocol.handler.pkgs に com.bea.wli.sb.resources.url を追加します。

[例]
JAVA_OPTIONS="${JAVA_OPTIONS}
-Djava.protocol.handler.pkgs=oracle.mds.net.protocol|oracle.fabric.common.clas
sloaderurl.handler|oracle.fabric.common.uddiurl.handler|oracle.bpm.io.fs.proto
col|com.bea.wli.sb.resources.url"