brew install docker docker-machine
docker-machine create --driver virtualbox mqdev
eval $(docker-machine env mqdev)
docker run --env LICENSE=accept --env MQ_QMGR_NAME=QM1 \
--volume /mnt/sda1:/var/mqm --publish 1414:1414 ibmcom/mq
building blocks
2016年12月9日金曜日
DockerでMQ環境を作る
DockerHubのibmcom/mqを使う。ファイルシステムとしてtmpfsは使えないのでこれを参考に/mnt/sda1に置き換える。
2016年4月26日火曜日
Bloggerでシンタックスハイライト(Prism)
このブログはBloggerを使っているがソースコードを読みやすく表示したくて、色々調べた結果、SyntaxHighlighterが割と有名っぽいのだが、Prismというのが見た目もかっこいいし良さそう。
使い方は、テンプレートからHTMLの編集を選んで、2行追加すればOK。
</head>のすぐ上に
本文には
</head>のすぐ上に
<link href='https://cdnjs.cloudflare.com/ajax/libs/prism/1.4.1/themes/prism.min.css'
rel='stylesheet'/>
</body>のすぐ上に
<script src='https://cdnjs.cloudflare.com/ajax/libs/prism/1.4.1/prism.min.js'/>
と書くだけ。本文には
<pre><code class="language-css">p { color: red }</code></pre>
のように書けば良い。cssの部分が言語になるのだが、ハイライトしてくれる言語はこちら。2016年3月6日日曜日
ハロウィーン問題
WikipediaのHalloween Problemとこのブログの要約。
ハロウィーン問題はデータベースの更新処理をによって更新されたレコードのデータベース上の位置が変更されることによって、同じレコードが何度も更新されてしまう問題を指す。こんな名前なのは、ハロウィーンに発見された歴史的経緯から。
ポイントとなるのは、
ハロウィーン問題はデータベースの更新処理をによって更新されたレコードのデータベース上の位置が変更されることによって、同じレコードが何度も更新されてしまう問題を指す。こんな名前なのは、ハロウィーンに発見された歴史的経緯から。
ポイントとなるのは、
- テーブルやインデックスのスキャン
- そのスキャンによって読み込まれるレコードを変更すること
- 変更によってレコードの位置をこれからスキャンされる位置に移動させること
結果として、スキャンによって更新されたレコードがまたスキャンで読み込まれてしまい再度更新されるという結果になってしまう。
具体的にはカーソルを使った照会と更新を行うときに問題が発生しうる。JDBCを使っている場合もそうだが、カーソルを使った更新をするときには、カーソル更新の結果が照会に反映されるか注意が必要である。
この問題を避けるためには、更新が照会に影響を及ぼさないようにすれば良い。
DB2 9.7.2以降を使っている場合は、カーソルを使用する際には、INSENSITIVE指定をすることで、スキャンの開始時点で照会結果が確定されるので、この問題を避けることができる。
2015年11月27日金曜日
StrongLoopを使ってみる(LoopBack)
StrongLoopは、Node.js, Expressに対してProcess Manager, LoopBack, Enterprise Connectors, API Gateway, Arc Console, Monitoring, Profiling, Tracingという機能を加えたもの。今回は中心となるLoopBackを使って、RESTアプリケーションを作ってみる。
StrongLoopのインストール方法はこちら。今回試してみる手順はこちら。
1. コマンドを実行するとYeomanを使って雛形が生成される。
2. モデルを作る。
3. モデル名を入力してオンメモリDB(memory)とPersistedModelを選択する。REST公開はY、plural formはそのままEnter, common modelを選択する。
4. プロパティーはstring型のnameと言う名前で定義する。
5. 稼動させる。localhost:3000/explorerにアクセスするとAPI一覧を見ることができる。
StrongLoopのインストール方法はこちら。今回試してみる手順はこちら。
1. コマンドを実行するとYeomanを使って雛形が生成される。
$ slc loopback
2. モデルを作る。
$ slc loopback:model
3. モデル名を入力してオンメモリDB(memory)とPersistedModelを選択する。REST公開はY、plural formはそのままEnter, common modelを選択する。
4. プロパティーはstring型のnameと言う名前で定義する。
5. 稼動させる。localhost:3000/explorerにアクセスするとAPI一覧を見ることができる。
$ node .
$ curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" \
-d '{"name":"foo"}' "http://localhost:3000/api/CoffeeShops"
$ curl -X GET --header "Accept: application/json" "http://localhost:3000/api/CoffeeShops"
対応しているデータソースに接続する方法はこちら。2015/11時点の最新版でslc loopback:datasourceを実行したところ以下が出力された。
- In-memory db (supported by StrongLoop)
- Email (supported by StrongLoop)
- MySQL (supported by StrongLoop)
- PostgreSQL (supported by StrongLoop)
- Oracle (supported by StrongLoop)
- Microsoft SQL (supported by StrongLoop)
- MongoDB (supported by StrongLoop)
- SOAP webservices (supported by StrongLoop)
- REST services (supported by StrongLoop)
- Neo4j (provided by community)
- Kafka (provided by community)
- SAP HANA (provided by community)
- Couchbase (provided by community)
2015年11月22日日曜日
EclipseLinkを使った実装例
このExampleを動かしてみる。DBをRESTで公開するというもの。
http://wiki.eclipse.org/EclipseLink/Examples/JPARS/Simple
https://wiki.eclipse.org/EclipseLink/Release/2.4.0/JPA-RS
実装については最後の方で説明する。まずはサンプルを動かしてみた記録。
基本的にこのページに書いてある通りに進めていくがせっかくなので最新版を使いたい。GlassFishは最新版のバージョン4系を使いたかったが、JDBCコネクションプールの作成でこのエラーが起きて先に進めないので諦めた。代わりにPayaraというサーバーをはじめて使ってみる。
①Payaraのインストール
今回は、4.1.1.154 Full JavaEEをインストールする。$GLASSFISH_HOME/glassfish/modulesのjarの置き換えは不要だった。
②Examplesをgit clone
③Payaraのデータソース、JDBCリソースの設定
http://wiki.eclipse.org/EclipseLink/Examples/JPARS/Simple
https://wiki.eclipse.org/EclipseLink/Release/2.4.0/JPA-RS
実装については最後の方で説明する。まずはサンプルを動かしてみた記録。
基本的にこのページに書いてある通りに進めていくがせっかくなので最新版を使いたい。GlassFishは最新版のバージョン4系を使いたかったが、JDBCコネクションプールの作成でこのエラーが起きて先に進めないので諦めた。代わりにPayaraというサーバーをはじめて使ってみる。
①Payaraのインストール
今回は、4.1.1.154 Full JavaEEをインストールする。$GLASSFISH_HOME/glassfish/modulesのjarの置き換えは不要だった。
②Examplesをgit clone
git clone git://git.eclipse.org/gitroot/eclipselink/examples.git
コンソール画面から、Resources > JDBC > JDBC Connection Poolsと進んでいき設定。GlassFishのバグが修正されており、先に進むことができる。$GLASSFISH_HOME/glassfish/domains/<your_domain_folder>/lib/extにはJDBCドライバーjarを配置しておく。その他設定値は以下の通り。driverType=4を忘れないように。DB2環境はこちらを使った。環境構築時の記録はこちら。
- Resource Type=javax.sql.DataSource
- Datasource Classname=com.ibm.db2.jcc.DB2DataSource
- serverName=localhost
- portNumber=50000
- databaseName=任意(SAMPLEでもOK)
- serverName=任意
- password=任意
- driverType=4
④EclipseでMavenプロジェクトのインポート
⑤Eclipseでサーバーの追加
PayaraはGlassFishとの互換性があるとのことなので、GlassFish4サーバーとして追加する。
⑥student.webのデプロイ
Eclipse上から普通にデプロイする
⑦Google ChromeにPostmanをインストールしてリクエストを送信
http://localhost:8080/student.web/persistence/v1.0/jpars_example_student/metadata
POSTするときはContent-Type=application/jsonを付けること
以上で、サンプルが動くところまでは無事確認できた。この後は実装についてだが、てっきりJAX-RSのアノテーションが出てくるのかと思いきや存在せず、student.webプロジェクトはWeaverBeanというクラス1つだけと大変シンプル。
説明としては、こちらが分かりやすかった。
http://blog.bdoughan.com/2013/04/introducing-eclipselink-jpa-rs.html
ドキュメントをほとんど見つけられなかった。
⑦Google ChromeにPostmanをインストールしてリクエストを送信
http://localhost:8080/student.web/persistence/v1.0/jpars_example_student/metadata
POSTするときはContent-Type=application/jsonを付けること
以上で、サンプルが動くところまでは無事確認できた。この後は実装についてだが、てっきりJAX-RSのアノテーションが出てくるのかと思いきや存在せず、student.webプロジェクトはWeaverBeanというクラス1つだけと大変シンプル。
説明としては、こちらが分かりやすかった。
http://blog.bdoughan.com/2013/04/introducing-eclipselink-jpa-rs.html
ドキュメントをほとんど見つけられなかった。
JPA実装の違い
JPA(Java Persistence API)の実装には複数あるが、どれを使うのが良いのだろうか。
Hibernateは独自機能が多そうなので、ずっと使い続けることができる状況なら良さそうだが、そうでない場合はEclipseLinkを使っておくのが無難っぽい。OpenJPAはあまり開発が活発ではないようで、JPA 2.1に対応できていない(私は2.1の新機能を使うほどJPAを使いこなすことはないと思うけど、開発が活発な方を選んでおきたい)。他には、あまり情報が集められないけどDataNucleusが面白そう。
Hibernateは独自機能が多そうなので、ずっと使い続けることができる状況なら良さそうだが、そうでない場合はEclipseLinkを使っておくのが無難っぽい。OpenJPAはあまり開発が活発ではないようで、JPA 2.1に対応できていない(私は2.1の新機能を使うほどJPAを使いこなすことはないと思うけど、開発が活発な方を選んでおきたい)。他には、あまり情報が集められないけどDataNucleusが面白そう。
名前 | 開発元 | 仕様 | 備考 |
EclipseLink | Eclipse Foundation |
JPA 2.1, 2.0 | JPA仕様の参照実装 |
Hibernate | RedHat | JPA 2.0, 2.1 | |
OpenJPA | Apache Foundation |
JPA 2.0 | |
JPA for WebSphere Application Server | IBM | JPA 2.0, 2.1 | JPA 2.1実装はEclipseLinkベース、JPA 2.0実装はOpenJPAベース(WebSphere Liberty Profileの場合) |
TopLink | Oracle | JPA 2.0 | JPA 2.1サポートはJavaEE7に含まれるためパッチとして提供 |
2015年11月21日土曜日
Dockerを使ってMac上にDB2境を準備する
DB2 Express-Cという無償で使えるDB2があるが、残念ながらMacはサポートされていない。
http://www-01.ibm.com/software/data/db2/express-c/download.html
そこでDockerを使って環境を作る。使ったソフトウェアは以下の通り。
ここまででMacからコンテナに50000番で接続できるようになった。後はDB2側で必要な設定をすればOK。ibmcom/db2express-cに書いてある通りサンプルDBを作ったり、デーモンとして起動したりできる。
デーモンとして起動
テスト用途ならコンテナの再起動でデータが消えても問題ないことが多いと思われるのでここで作業を終わりにするが、永続化が必要な場合は別途設定が必要。
http://www-01.ibm.com/software/data/db2/express-c/download.html
そこでDockerを使って環境を作る。使ったソフトウェアは以下の通り。
- Docker Machine 0.4.1
- Docker 1.8.3
- VirtualBox 5.0.10
インストール手順はいろんなところに書いてあるので割愛。VirtualBoxの仮想マシンを作成が完了した後はこんな感じ。
~ % docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default virtualbox Stopped
~ % docker-machine start default
Starting VM...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
~ % eval "$(docker-machine env default)"
ここから先がDB2に関係する部分。使うのはibmcom/db2express-c。手順は以下の通り。docker pullで取得するサイズが大きい(1.7GB)のでしばらく時間がかかる。
~ % docker pull ibmcom/db2express-c
~ % docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ibmcom/db2express-c latest 2abb3b6fc22c 6 months ago 1.705 GB
~ % docker run -it -p 50000:50000 -e DB2INST1_PASSWORD=db2inst1-pwd -e LICENSE=accept ibmcom/db2express-c:latest bash
ここまででDockerコンテナにログインできる。Macからコンテナに50000番ポートで接続するためにはVirtualBox上でのポートフォワーディングも必要。lsofでListenしていることを確認できる。
~ % VBoxManage controlvm default natpf1 "db2_pf,tcp,127.0.0.1,50000,,50000"
~ % lsof -P -i -n | grep 50000
サンプルDBの作成
$ su - db2inst1
$ db2start
$ db2sampl
デーモンとして起動
docker run -d -p 50000:50000 -e DB2INST1_PASSWORD=db2inst1-pwd -e LICENSE=accept ibmcom/db2express-c:latest db2start
テスト用途ならコンテナの再起動でデータが消えても問題ないことが多いと思われるのでここで作業を終わりにするが、永続化が必要な場合は別途設定が必要。
登録:
投稿 (Atom)
DockerでMQ環境を作る
DockerHubの ibmcom/mq を使う。ファイルシステムとしてtmpfsは使えないので これ を参考に/mnt/sda1に置き換える。 brew install docker docker-machine docker-machine create --drive...
-
WikipediaのHalloween Problem と このブログ の要約。 ハロウィーン問題はデータベースの更新処理をによって更新されたレコードのデータベース上の位置が変更されることによって、同じレコードが何度も更新されてしまう問題を指す。こんな名前なのは、ハロウィーン...
-
お正月で実家に帰省中に暇すぎてiTunes Storeを眺めていたら、前から気になっていた映画「 ドライヴ 」が出ていたので見てみました。 主人公のドライバー(名無し)と隣人家族とのふわふわ・ほろ苦なお付き合いシーンから暴力シーンに変わる振り幅が大きく、久しぶりに手に汗握りな...
-
このExampleを動かしてみる。DBをRESTで公開するというもの。 http://wiki.eclipse.org/EclipseLink/Examples/JPARS/Simple https://wiki.eclipse.org/EclipseLink/Release...