JRockit JVMのガベージコレクションのまとめ

JRockit JVMガベージコレクションの仕組みを、公式のドキュメント読んでざっくりまとめてみました。
改めて調べてみると、HotSpot JVM とほとんど変わらないみたいです。既にご存知の方には釈迦に説法ですが、JVM のメモリ管理について初学者の方は、参考にしてみてください。

JRockit JVM が使用するメモリ領域

スタック領域や、パーマネント領域といった分け方もありますが、参照先では以下のような分け方で説明されています。

  • ヒープメモリ
    • 二世代のガベージコレクションが利用される場合、「ナーサリ(若い領域)」と「古い領域」の2つの領域(世代)に分割される *1
    • ナーサリ(若い領域)
      • 新しいオブジェクトの割り当てのために予約されている領域
    • 古い領域
      • 若いコレクションで昇格されたオブジェクトや、大規模オブジェクトが割り当てられる領域
  • ヒープメモリ以外のメモリ領域

若いコレクションと、古いコレクション

二世代のガベージコレクションを利用する場合、ガベージコレクションには、「若いコレクション」と「古いコレクション」とがあります。

  • 若いコレクション
    • ナーサリに保持された古いオブジェクトを、古い領域に「昇格(移動)」する処理
    • 古いコレクション(後述)や一世代のガベージコレクション(ナーサリのないヒープに対するガベージコレクション)よりも、格段に速くメモリ領域を開放できる
    • ナーサリの「保持領域」
      • ナーサリの一部に確保される領域
      • ここに保管されたオブジェクトは、直後の若いコレクションで昇格されない。このことにより、オブジェクトが割り当てられた直後に昇格してしまうのを防止する
  • 古いコレクション

小規模オブジェクトと大規模オブジェクト

JRockit JVM では、オブジェクト割り当て時に小規模オブジェクトと大規模オブジェクトが区別されます。

  • 小模オブジェクトと大規模オブジェクト

    • 通常 2 ~ 128 KB が区別の基準となる
    • 小規模か大規模化は、おおよそ以下の項目により決定される
  • 小規模オブジェクト

    • スレッドローカル領域(TLA)に割り当てられる
    • 二世代のガベージコレクションの場合、TLA はナーサリから確保される
  • 大規模オブジェクト
    • TLA に収まらないオブジェクト
    • 二世代のガベージコレクションの場合、古い領域に割り当てられる
    • 大規模オブジェクトの割り当てには、複数Java スレッド間の、オブジェクトキャッシュの同期を頻繁に行う必要がある *2

ガベージコレクション

二世代のガベージコレクションを利用している場合、ここでの記述内容は、古いコレクションに該当します。 マーク アンド スイープ モデルという、ガベージコレクションアルゴリズムについての説明です。

  • マーク アンド スイープ モデル
    • JRockit JVMガベージコレクションモデル
    • マークフェーズとスイープフェーズからなる
    • マークフェーズの動作
      • 現在使用されているオブジェクトを識別し、マークを付ける
      • 以下のようなオブジェクトが生存状態としてマークされる
        • Java スレッド、ネイティブ ハンドルおよびその他のルートソースから到達可能なオブジェクト
        • 上記のオブジェクトから到達可能なオブジェクト
    • スイープフェーズの動作
      • オブジェクトの木構造をたどることにより、生存状態としてマークされなかったオブジェクトを見つける。そのオブジェクトが配置されていた領域はフリーリストに記録され、新しいオブジェクトの割り当てに利用される。 *3
    • マークフェーズとスイープフェーズの組み合わせ方により、いくつかの方式がある

モースト コンカレント マーク アンド スイープ における処理の詳細

モースト コンカレント マーク アンド スイープ では、マーク処理とスイープ処理において、それぞれ4つのフェーズが順に実行されます。

モーストリ コンカレント マークの4つのフェーズ

名前 動作 Java スレッドの停止
初期マーキング 生存しているオブジェクトのルートセットを識別する あり
コンカレント マーキング ルートセットからの参照にしたがって、生存している残りのオブジェクトを検索してマークする なし
プレクリーニング コンカレント マーキング中のヒープの変更を識別し、生存しているオブジェクトを検索してマークする なし
最終マーキング プレクリーニング中のヒープの変更を識別し、生存しているオブジェクトを検索してマークする あり

モーストリ コンカレント スイープ の4つのフェーズ

名前 動作 Java スレッドの停止
スイープ(1回目) ヒープの半分をスイープする。この間、オブジェクトは残り半分のヒープ領域に割り当てられる なし
休止(1回目) 残り半分に切り替えるための休止 N/A
スイープ(2回目) 残り半分のヒープをスイープする。この間、オブジェクトは残り半分のヒープ領域に割り当てられる なし
休止(2回目) 同期、および統計の記録のための休止 N/A

世代別ガベージコレクション(若いコレクション)

二世代のガベージコレクションを利用している場合、ヒープメモリ上にナーサリが存在します。ナーサリの保持領域外のオブジェクトを古い領域に昇格するのが、若いコレクションです。
若いコレクションの間、Java スレッドは停止します。

*1:二世代のガベージコレクションが利用されない場合は、すべてのヒープが古い領域なのと同じことだと思われる

*2:Oracleの公式ドキュメントには、「大規模なオブジェクトの割り当てには Java スレッド間の同期をより頻繁に行う必要があります。」とありますが、たぶんこういうことでしょう。

*3:Oracleの公式ドキュメントには、「生存しているオブジェクト間のギャップを見つけるために、ヒープがトラバースされます。」とありますが、たぶんこういうことでしょう。

*4:コンカレント マーク アンド スイープとの違いは、マーク中のヒープの変更を識別して、選択的にマークし直す機構があることです。

Windows + Cygwin + Vagrant で WebLogic Server を動かす ~ java、WebLogic インストール編

前回の記事に引き続き、VirtualBox 上のゲストOSに、java と WegLogic サーバーをインストールしていきます。
本記事は、Vagrant を使ってゲストOSを構成する記事の続きですが、手順自体は Vagrant に依存するものではありません。LinuxWebLogic サーバーをインストールする際には、広く参考にしていただけると思います。

java のインストール

1. java のダウンロード

Oracle のダウンロードサイトより、最新のJDKを取得します。*1
Linux x64 用の tar.gz アーカイブをダウンロードして下さい(本記事の執筆時点では、jdk-8u60-linux-x64.tar.gz が最新です。以降の手順は、これをダウンロードしたものとして記します)。

2. java の tar.gz アーカイブをゲストマシンに転送

ダウンロードした tar.gz アーカイブを Cygwin のホームディレクトリに配置しておき、以下のコマンドを実行します。

$ scp ~/jdk-8u60-linux-x64.gz wls_ol:~/

このコマンドで、wls_ol の ssh 接続設定を使って、ホームディレクトリ直下にファイルを転送します。
以下のようにコンソールに出力されたら、転送完了です。

jdk-8u60-linux-x64.gz                      100%  173MB  43.2MB/s   00:04

3. java のアーカイブを展開して、PATH を設定

以下のコマンドを順次実行し、java のアーカイブを展開します。

$ ssh wls_ol
$ mkdir ~/java
$ mv ~/jdk-8u60-linux-x64.gz ~/java
$ tar zxvf ~/java/jdk-8u60-linux-x64.gz -C ~/java

続いて、.bashrc に java コマンドへの PATH を通す記述を追加し、再読み込みします。

$ echo export JAVA_HOME=~/java/jdk1.8.0_60 >> ~/.bashrc
$ echo export PATH=\$PATH:\$JAVA_HOME/bin >> ~/.bashrc
$ source ~/.bashrc

java コマンドの動作を確認しておきます。
以下のコマンドで java のバージョン情報が表示されれはOK。

$ java -version

WebLogic サーバーのインストール

1. WebLogic サーバーのダウンロード

java と同じく、Oracle のダウンロードサイトより、最新の開発者用zipアーカイブを取得します(本記事の執筆時点では、wls1213_dev.zip が最新です。以降の手順は、これをダウンロードしたものとして記します)。

2. WebLogic サーバーの zip アーカイブをゲストマシンに転送

ダウンロードした zip アーカイブを Cygwin のホームディレクトリに配置しておき、以下のコマンドを実行します。

$ scp ~/wls1213_dev.zip wls_ol:~/

3. unzip のインストール

今回使用している Oracle Linux には、unzip が入っていないので、yum で取得します。 以下のコマンドを実行してください。

$ ssh wls_ol
$ sudo yum install unzip

途中、インストールしてもOKか確認するメッセージが表示されますので、y + [Enter] を入力します。
以下のようにコンソールに出力されればOKです。

Resolving Dependencies
--> Running transaction check
…
Installing : unzip-6.0-15.el7.x86_64                                   1/1
Verifying  : unzip-6.0-15.el7.x86_64                                   1/1

Installed:
unzip.x86_64 0:6.0-15.el7

Complete!

4. zip アーカイブを展開して、PATHを設定

以下のコマンドを順次実行し、WebLogic サーバーの zip アーカイブを展開します。

$ ssh wls_ol
$ mkdir ~/wls
$ mv ~/wls1213_dev.zip ~/wls
$ unzip wls1213_dev.zip -d ~/wls

続いて、環境変数に MW_HOME(WebLogic サーバーのホーム)を追加します。.bashrc に環境変数を設定する追加し、再読み込みします。

$ echo export MW_HOME=~/wls/wls12130 >> ~/.bashrc
$ source ~/.bashrc

5. WebLogic Server のインストール

いよいよ WebLogic Server を実際にインストールしていきます。

$ cd $MW_HOME
$ source $MW_HOME/configure.sh
…
Do you want to configure a new domain?  [y/n]? n

ドメインはこの後で作成するので、ドメインを作成するかどうか聞かれたら、n + [Enter] とします。

続いて WebLogic サーバー用の環境設定を行います。

$ source $MW_HOME/wlserver/server/bin/setWLSEnv.sh
…
Your environment has been set.

最後に、ドメインの作成です。

$ mkdir ~/domain
$ cd ~/domain
$ java $JAVA_OPTIONS -Xmx1024m -XX:MaxPermSize=256m weblogic.Server
…
No config.xml was found.
Would you like the server to create a default configuration and boot? (y/n): y

config.xml を使用せずにデフォルトの構成でドメインを作成するので、y + [Enter] とします。

Enter username to boot WebLogic server:weblogic
Enter password to boot WebLogic server:
For confirmation, please re-enter password required to boot WebLogic server:

WebLogic サーバーの管理ユーザーのユーザー名、パスワードを聞かれるので、設定したい値を入力します。

以下のようにコンソールに出力されたら、無事にインストールが完了し、WebLogic サーバーの管理コンソールが起動しています。

<07/09/2015 2:10:36 PM AEST> <Notice> <WebLogicServer> <BEA-000360> <The server started in RUNNING mode.>
<07/09/2015 2:10:36 PM AEST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.>

"http://localhost:8001/console" にアクセスすると、管理コンソールのログイン画面が表示されるはずです。
前回の記事で、Vagrant 上にゲストOSを構成するときに 8001 -> 7001 のポートフォワードの設定をしていますので、左記のURLにアクセスすると、ゲストOSの7001番ポートにリクエストを投げていることになります。

f:id:charlier_shoe:20150907133514p:plain

6. Weblogic Serverの停止/起動

WebLogic Server を停止するには、WebLogic サーバーを起動させているコンソールで、[Ctrl] + c を入力します。 また、起動するには以下のコマンドを実行します。

$ ~/domain/startWebLogic.sh

VirtualBox 上のゲストOSに java と WegLogic サーバーをインストールする手順は、以上です。

*1:wgetコマンドで、ゲストOS上に直接ダウンロードする方法もあります: Linuxでjdkをwgetする方法

Windows + Cygwin + Vagrant で WebLogic Server を動かす ~ ゲストOSセットアップ編

Window 上に Vagrant のゲストOSを立てて、WebLogic Server の開発環境を作成しようとしています。2回の記事に分けて手順を紹介する予定で、今回はVagrant でゲストOSをセットアップするまでの手順をまとめてみました。

前提

Cygwin のインストール時の注意

ssh と scp を利用するので、Cygwin のインストール時に、インストールウィザードの [Select Package] で、openssh の Bin を選択しておく必要があります。

f:id:charlier_shoe:20150904101038p:plain

ゲストOSのセットアップ手順

1. ゲストOSの起動まで

Cygwin を起動し、以下のコマンドを順次実行します。

$ vagrant box add oraclelinux-7.1-x86_64 http://cloud.terry.im/vagrant/oraclelinux-7-x86_64.box
$ mkdir vagrant
$ cd vagrant

カレントディレクトリに "Vagrantfile" という名前のファイルを作成し、以下の内容を記述します。

    Vagrant.configure(2) do |config|

        # VM settings
        config.vm.define :wls_ol, primary: true do |wls_ol|
            wls_ol.vm.box = "oraclelinux-7.1-x86_64"
            wls_ol.vm.network "forwarded_port", guest: 7001, host: 8001
        end

        # VM provider settings
        config.vm.provider "virtualbox" do |vb|
            vb.name = "wls_ol"
            vb.cpus = "2"
            vb.memory = "2048"
        end

    end

後々インストールする WebLogic サーバーの管理画面は、ゲストOSの7001番ポートで動作しますので、ポートフォワーディングの設定で 8001 -> 7001 となるようにしています。

続いて先ほどまで操作していた Cygwin ターミナルで、以下のコマンドを実行します。

$ vagrant up wls_ol

コンソールに以下のようなメッセージが表示され、仮想マシンが起動します。

Bringing machine 'wls_ol' up with 'virtualbox' provider...
==> wls_ol: Importing base box 'oraclelinux-7.1-x86_64'...
==> wls_ol: Matching MAC address for NAT networking...
==> wls_ol: Setting the name of the VM: wls_ol
==> wls_ol: Clearing any previously set network interfaces...
==> wls_ol: Preparing network interfaces based on configuration...
    wls_ol: Adapter 1: nat
==> wls_ol: Forwarding ports...
    wls_ol: 7001 => 8001 (adapter 1)
    wls_ol: 22 => 2222 (adapter 1)
==> wls_ol: Running 'pre-boot' VM customizations...
==> wls_ol: Booting VM...
==> wls_ol: Waiting for machine to boot. This may take a few minutes...
    wls_ol: SSH address: 127.0.0.1:2222
    wls_ol: SSH username: vagrant
    wls_ol: SSH auth method: private key
    wls_ol: Warning: Connection timeout. Retrying...
    wls_ol:
    wls_ol: Vagrant insecure key detected. Vagrant will automatically replace
    wls_ol: this with a newly generated keypair for better security.
    wls_ol:
    wls_ol: Inserting generated public key within guest...
    wls_ol: Removing insecure key from the guest if it's present...
    wls_ol: Key inserted! Disconnecting and reconnecting using new SSH key...
==> wls_ol: Machine booted and ready!
==> wls_ol: Checking for guest additions in VM...
    wls_ol: The guest additions on this VM do not match the installed version of
    wls_ol: VirtualBox! In most cases this is fine, but in rare cases it can
    wls_ol: prevent things such as shared folders from working properly. If you see
    wls_ol: shared folder errors, please make sure the guest additions within the
    wls_ol: virtual machine match the version of VirtualBox you have installed on
    wls_ol: your host and reload your VM.
    wls_ol:
    wls_ol: Guest Additions Version: 4.3.24
    wls_ol: VirtualBox Version: 5.0
==> wls_ol: Mounting shared folders...
    wls_ol: /vagrant => C:/cygwin64/home/user/vagrant

ここで、ssh でゲストOSに接続してみます。vagrantssh 接続するには、以下のコマンドを実行します。

$ vagrant ssh wls_ol

vagrant up で仮想マシンを起動した時点で、ssh 接続の構成が行われていますので、上記のコマンドだけで接続が可能です。

2. SSH 接続の設定

今後の作業では、Vagrant のコマンドを使わずに ssh 接続できた方が便利ですので、通常の ssh 接続をするための手順を行います。 exit で現在の ssh 接続から抜けてから、以下のコマンドを実行します。

$ vagrant ssh-config >> ~/.ssh/config
$ vi ~/.ssh/config

~/.ssh/config に、仮想マシン wls_ol に接続するための設定情報が出力されていると思います。これだけで、通常の ssh 接続で "vagrant" ユーザーで仮想マシンにつなぐことができます。

$ ssh wls_ol

例えば "root" ユーザーなどで接続したい場合は、"vagrant" ユーザーの設定を同ファイルの末尾にコピーして、必要な部分を "root" ユーザー用に変更します。 以下、記述例です。

Host wls_ol
    HostName 127.0.0.1
    User vagrant
    Port 2222
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no
    PasswordAuthentication no
    IdentityFile C:/cygwin64/home/user/vagrant/.vagrant/machines/wls_ol/virtualbox/private_key
    IdentitiesOnly yes
    LogLevel FATAL

Host wls_ol-root
    HostName 127.0.0.1
    User root
    Port 2222
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no
    PasswordAuthentication yes
    IdentityFile C:/cygwin64/home/user/vagrant/.vagrant/machines/wls_ol/virtualbox/private_key
    IdentitiesOnly yes
    LogLevel FATAL

変更を保存して、以下のコマンドを実行すると、"root" ユーザーで仮想マシンに接続する事ができます。"root" ユーザーのパスワードは "vagrant" なので、パスワードの入力を求められたら、それを入力してください。

$ ssh wls_ol-root

参考までに、セットアップ後のスクリーンショットを。
まずは、Cygwin の画面

f:id:charlier_shoe:20150904102321p:plain

続いて、VirtualBoxの管理画面

f:id:charlier_shoe:20150904102405p:plain

ゲストOSのセットアップは以上です。次回の記事では、ゲストOSに javaWebLogic サーバーのインストールを行っていきます。

Developer Cloud Serviceのビルド成果物をMavenリポジトリに公開する

Developer Cloud Service(以下、DevCS)は、Gitリポジトリ、バグトラッカーなどの開発ツール群を一括で提供する、Oracle社のクラウドサービスです。

DevCSでは、HudsonベースのCI(継続的インテグレーションツールMavenビルドをおこない、さらに成果物をDevCS上のMavenリポジトリに公開することができます。
今回は、DevCSのMavenリポジトリを使って、以下の機能を実現する方法をご紹介します。

  1. ビルド成果物をDevCSのMavenリポジトリに公開する
    1. で公開された成果物に依存するMavenプロジェクトを作成する

1. ビルド成果物をDevCSのMavenリポジトリに公開する

1-1. MavenリポジトリのURLを確認する

DevCSでビルドしたいプロジェクトのHomeにアクセスすると、画面右に、GitリポジトリMavenリポジトリのURLが表示されています。 ここでMavenリポジトリの [HTTP] を選択し、URLをテキストエディタ等にコピーしておきます。

f:id:charlier_shoe:20150825140205p:plain

1ー2. pom.xmlにデプロイ用の設定を記述する

pom.xmlに記述する内容は、通常の記述と同様です。 jackrabbitプラグインと、デプロイ先リポジトリの情報を記述します。

distributionManagement > repository > urlのタグには、1-1で控えておいたリポジトリのURLを記述します。

以下、pom.xmlのサンプルです。

    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                            http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.charleysdiary</groupId>
        <artifactId>HelloWorld</artifactId>
        <version>0.0.1-SNAPSHOT</version>

        <!-- Build Settings -->
        <build>
            <extensions>
                <extension>
                    <groupId>org.apache.maven.wagon</groupId>
                    <artifactId>wagon-webdav-jackrabbit</artifactId>
                </extension>
            </extensions>
        </build>

        <!-- Environment Settings -->
        <distributionManagement>
            <repository>
                <id>com.charleysdiary.HelloWorld</id>
                <name>Sample HelloWorld Project</name>
                <url>dav:https://developer.us2.oraclecloud.com/profile/developer00000-sampledomain00000/s/sampledomain-sampledomain00000_HelloWorld/maven/</url>
            </repository>
        </distributionManagement>

    </project>

この例では、ビルド環境と同じDevCSプロジェクトのMavenリポジトリに、成果物を公開します。このような場合、Mavenリポジトリにアクセスする際の認証情報等の設定は不要です。 
pom.xmlの修正だけで作業完了です。

1-3. Cyberduckで確認してみる

CyberduckWebDAVクライアント)で、公開された成果物を確認してみます*1

まずは、Cyberduckをダウンロード&インストールします。

続いて、Cyberduckを起動し、[新規接続]をクリック

f:id:charlier_shoe:20150825140214p:plain

[新規接続]ダイアログで、以下の画像のように入力します。 [Server]は1-1で控えておいたURLのホスト名、[Path]は同URLのPath部分、ユーザー名とパスワードにはDevCSにログインするときのものを入力します。

f:id:charlier_shoe:20150825140221p:plain

[Connect]をクリックすると、Mavenリポジトリにデプロイされた成果物を確認することができます。

2. 1. で公開された成果物に依存するMavenプロジェクトを作成する

2-1. pom.xmlに依存関係を記述する

依存元のプロジェクトのpom.xmlで、repositoryとdependencyの配下に、依存先のリポジトリとモジュールの情報を記述します。

以下、記述例です。

    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                            http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.charleysdiary</groupId>
        <artifactId>HelloWorldClient</artifactId>
        <version>0.0.1-SNAPSHOT</version>

        <!-- Environment Settings -->
        <dependencies>
            <dependency>
                <groupId>com.charleysdiary</groupId>
                <artifactId>HelloWorld</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>

        <repositories>
            <repository>
                <id>com.charleysdiary.HelloWorld</id>
                <name>Sample HelloWorld Project</name>
                <url>https://developer.us2.oraclecloud.com/profile/developer00000-sampledomain00000/s/sampledomain-sampledomain00000_HelloWorld/maven/</url>
            </repository>
        </repositories>

依存先のプロジェクトが、DevCSの同一アイデンティティドメイン上のプロジェクトの場合、必要な作業はこれだけです。

2-2. settings.xmlに参照先リポジトリの認証情報を記述する

依存元のプロジェクトが、依存先リポジトリアイデンティティドメイン外にある場合(e.g. ローカルでビルドするとき)、依存先リポジトリにアクセスするための認証情報を、settings.xmlに記述します。

username、passwordには、アイデンティティドメインにログインするときに使用する値を設定します。

以下、記述例です。

    <?xml version="1.0" encoding="UTF-8"?>
    <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0
        http://maven.apache.org/xsd/settings-1.1.0.xsd"
        xmlns="http://maven.apache.org/SETTINGS/1.1.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

        <servers>
            <server>
                <id>com.charleysdiary.HelloWorld</id>
                <username>sample@charleysdiary.com</username>
                <password>password</password>
            </server>
        </servers>
    </settings>

DevCSのMavenリポジトリに成果物を公開し、それを利用する方法は、以上です。

OracleのID管理系製品群を整理してみた

Oracle社のID管理製品について学ぶ必要が出てきたのですが、似たような名前で複数の製品が出ているので、それぞれの役割の違いを整理してみました。

ここに上げた以外にも多くの製品があるようですが、代表的と思われるものに絞ったつもりです。

  • OUD

  • OAM

    • Oracle Access Manager
    • 認証、認可周りの一連の機能を提供する
      →HP IceWallとかと同じカテゴリの製品かな?
    • SSO、認証/認可、ポリシー管理、セッション管理、etc...
  • OIF

    • Oracle Identity Federation
    • パートナー間のフェデレーション機能を提供
    • Oracle Access Managementプラットフォームの共有サービス
      Oracleのサイトより。よく意味が分からないが、OAMと連携してSAMLの構成をつくるのが、やり易いということっぽい
  • Webgate

    • OAMを使ってエージェント型のSSOを構成するときに使用する、SSOエージェント

以上。

Oracle Stream Explorer サーバーのインストール手順

Oracle Stream Explorerは、Oracle社が提供しているCEP(Complex Event Processing)製品です。
今回は、Windows 環境に、Stream Explorer サーバーをインストールする手順を紹介します。

インストール手順

0. JDKをインストールする

JDKをおなじみの手順でインストールしますが、インストール先のディレクトリのパスにスペースが含まれると、パッチ適用でエラーになってしまいます^^;
標準のインストール先ですと"Program Files"フォルダにスペースが入ってしまうので、インストール先を変更して、入れておく必要があります。

本記事では、JDKのインストール先を"%JAVA_HOME%"と記述します。

1. インストーラとパッチをダウンロードする

ダウンロードサイトはこちら

  • Stream Explorer 12.1.3 Runtime(本体)
    • ofm_sx_generic_12.1.3.0.1_disk1_1of2.zip
  • Stream Explorer 12.1.3 User Experience(パッチ)
    • ofm_sx_generic_12.1.3.0.1_disk1_2of2.zip

ダウンロードしたzipファイルは解凍しておきます。以下、本体、パッチのzipを解凍してできたフォルダのパスを、それぞれ"%INSTALLER_HOME%"、"%PTACH_HOME%"と記します。

2. 本体をインストールする

2-1. 管理者権限でコマンドプロンプトを起動する

[スタート] > [アクセサリ] の順に選択し、[コマンド プロンプト] を右クリックします。展開したコンテキストメニューで、[管理者として実行] を選択してください。

2-2. インストールを実行する

2-1. で起動したコマンドプロンプトで、以下のコマンドを実行します。

> %JAVA_HOME%\bin\java.exe -jar %INSTALLER_HOME%\fmw_12.1.3.0.0_oep.jar

あとは、インストールウィザートにしたがって、インストールを進めてください。

途中、ORACLE_HOME(インストール先となるフォルダ)のパスを聞かれますが、以降このパスを "%ORACLE_HOME%"と記述します。

3. パッチを適用する

3-1. 管理者権限でコマンドプロンプトを起動する

2-1. と手順は同じです。

3-2. インストールを実行する

3-1. で起動したコマンドプロンプトで、以下のコマンドを順次実行します。

> cd %PATCH_HOME%\ofm_sx_generic_12.1.3.0.1_disk1_2of2\20636710
> %ORACLE_HOME%\OPatch\opatch.bat apply -jre %JAVA_HOME%\jre

以下のようなメッセージが表示されるので、"y"をタイプしてリターン

ローカル・システムにパッチを適用する準備ができましたか。[y|n]

最後に"OPatch succeeded."と表示されれば、パッチ適用は完了です。


Oracle Stream Explorer サーバーのインストール手順は以上です。

ロジクールのマウスM510のチルトボタンに、ウィンドウスナップを割り当てる

ロジクールのマウスは、SetPointというアプリケーションにより、各ボタンの機能をカスタマイズすることができます*1

しかし、中にはSerPointでも割り当てられない機能があって、例えばウィンドウを画面の右/左半分に寄せる、ウィンドウスナップが該当します。
本記事では、SetPoint拡張メモ:拡張手順の概略を参考にさせていただきながら、ウィンドウスナップをマウスのボタンに割り当てられるようにSetPointをカスタマイズする手順を紹介します。

マウスからウィンドウスナップをできるようにしておくと、アプリケーションを起動してウィンドウを配置を調整する一連の操作がシームレスにできるので、とても便利ですよ。

手順

筆者は、M510というチルト機能のあるマウスを使っています。M510の左右チルトに、左右のウィンドウスナップを割り当ててみます。

1. M510のデバイスファイルを特定する

SetPoint拡張メモ:拡張手順の概略の、1. 及び2. の手順にしたがってデバイスファイルのファイルパスを特定します。
M510の場合、デバイスファイルの絶対パスは"C:\ProgramData\Logishrd\SetPointP\Devices\PointingDevice\10000A9\10000A9.xml"となります。

2. デバイスファイルを編集する

デバイスファイルでは、マウスの各ボタンで割り当て可能な機能のセット(HandlerSetとHandlerSetGroup)が指定されています。 この記述により、SetPointの画面でマウスのボタンを選んだときに表示される選択肢が決まります。
ここをうまく編集して、SetPointで左右チルトを選んだときに、ウィンドウスナップが指定できるようにすればよいわけです。

デバイスファイルを開いたら、Button Number="7"、Button Number="8"となっているタグを見つけてください。それぞれ左チルトボタン、右チルトボタンに対応しています。このタグの配下の、TriggerState Nameタグの属性を以下のように変更します。

ボタン 属性 変更前 変更後
左チルト HandlerSet HorzScrollLeftSet SnapLeft
HandlerSetGroup ScrollLeftFloresGroup SmrkndSnapLeft
右チルト HandlerSet HorzScrollRightSet SnapRight
HandlerSetGroup ScrollRightFloresGroup SmrkndSnapRight

変更後のデバイスファイル(抜粋)は、以下の様な感じです。

    <!--
    <Button Number="7" Name="6"> 
        <Trigger Class="ButtonPress">
            <PARAM Button="7" Type="Tilt" /> 
            <TriggerState Name="ButtonDownUp" HandlerSet="HorzScrollLeftSet" HandlerSetGroup="ScrollLeftFloresGroup"/>
        </Trigger>
    </Button>
    -->
    <Button Number="7" Name="6"> 
        <Trigger Class="ButtonPress">
            <PARAM Button="7" Type="Tilt" /> 
            <TriggerState Name="ButtonDownUp" HandlerSet="SnapLeft" HandlerSetGroup="SmrkndSnapLeft"/>
        </Trigger>
    </Button>
    <!--
    <Button Number="8" Name="7"> 
        <Trigger Class="ButtonPress">
            <PARAM Button="8" Type="Tilt" /> 
            <TriggerState Name="ButtonDownUp" HandlerSet="HorzScrollRightSet" HandlerSetGroup="ScrollRightFloresGroup"/>
        </Trigger>
    </Button>
    -->
    <Button Number="8" Name="7"> 
        <Trigger Class="ButtonPress">
            <PARAM Button="8" Type="Tilt" /> 
            <TriggerState Name="ButtonDownUp" HandlerSet="SnapRight" HandlerSetGroup="SmrkndSnapRight"/>
        </Trigger>
    </Button>

3. SetPointで、ウィンドウスナップを割り当てる

デバイスファイルの編集ができたら、SetPointを再起動してください。
タスクトレイに常駐しているSetPointのアイコンをクリックすると、「終了」を選択することができます。その後、スタートメニューから「マウスおよびキーボードの設定」を探して起動します。

正しくカスタマイズされていると、以下の様な画面となります。左右チルトに、ウィンドウスナップが割り当てられるようになっています。

f:id:charlier_shoe:20150813115631p:plain

上の画像を見るとお気づきになるかと思いますが、本記事の方法では、ウィンドウスナップ以外の機能を選択することはできなくなります。他の機能を含めて選択できるようにするには、SetPoint拡張メモ:拡張手順の概略と、他一連の記事を参照し、SetPointの各種設定ファイルを使いこなしてください!

最後に、改めて、元記事を作成してくださった@did2memo様に感謝いたします。

ウィンドウスナップをM510のチルトボタンに割り当てる手順は、以上です。

*1:最近リリースされたいくつかのマウスは、Logicool Optionsという新しいアプリケーションに変わっているため、本記事で紹介する手順は利用できません