SpringProxy

Springとか使ってインジェクションかけたオブジェクトに対して
クラス検査とかするとたびたび見かける
packages.ClassName$$EnhancerByCGILIB$$xxxxxxxx
みたいなやつ。

どうにかしてCGILIBで生成されたクラスってことを
判別できないかなーと思い、ちょっと調べた。

Spring様のことですし、きっとそれが判別できるように、
何かインターフェースとか挟んでおいてくれたり
してるんじゃないかなーとの期待から、sysoutに適当に吐いてみた。

class ex.beans.Hoge$$EnhancerByCGLIB$$7a85fe65
interface org.springframework.aop.SpringProxy
interface org.springframework.aop.framework.Advised
interface net.sf.cglib.proxy.Factory
なんだ。ちゃんと挟んでくれてるじゃない。
とりあえず、SpringProxy実装してるかどうかで判断できそうな感じ。
Advisedのほうはadviceが張られてるかどうか見てるのかな?
ちゃんと確認してないから単語の感じからしか汲み取れてないけど。

対象クラスにpointcut張られてなかったりすると
そもそもクラス生成はされずに、もとのクラスが使用されるっぽい
pointcutはずしたりして試したらもとのクラスしか出力されなかった

class ex.beans.Hoge
Advisedのほうでインスタンス取り出すとどうなるのかなと、
試してみたところ、こちらでは#getTargetClass()により、
元のクラスが取得できる模様。
SpringProxy実装してるかどうかで確認するよか
こっち使って、もとのクラス取り出すほうが良いかも。

たまには

ずっと放っておいてたのでたまには書こうと思う。

RESTでOAuthプロバイダ実装する話。
RESTEasyには初めからある程度OAuth統合されて提供されてる部分があるので、これ使って試してます。

まとまったら載せます。
今はまだハマってます…。

追記1
JerseyのOAuth統合のほうが使うの簡単かもしれない…。

追記2
JerseyCDDLとGPLのデュアルライセンスだった。(仕事に)使えない。
同じ理由で前回選定からはずしたの忘れてた。

追記3
Spring-securityもOAuth持ってた。
こっちも調べる。どれ使うかはまだ未定。
メモ: http://alexsotob.blogspot.com/2011/05/to-seek-out-new-life-and-new.html

Jenkins 応用案メモ

まだ案だけど、版管理なんかも jenkins でサクっとやれたりするんじゃないかと
この記事見てふと思ったわけです
svn+TeXでcommitするとPDF - オーム社開発部の出版システムでの書籍執筆:Geekなぺーじ

ここまで jenkins 使って色々できることが分かり
Sphinx なんか使えばテキストベースだから版管理もできるし
svn との連携でコミットトリガーからバッチでも叩いてドキュメントの生成、発行なんてのも
案外難しくないんじゃないかと思った

というわけで今来週中にでも環境作って試してみようと思う

Jenkins 構築経過 (eclipse での pom.xml とか)

一からやり直すとなかなかに骨が折れますね
svn の構築なりなんなり
パスの入力とか間違えたりね
細かいミスもそこそこにとりあえず環境できたので
svn 立てるとこから順番にひと通りの手順をまとめてみようと思って
書いてはいたのだけどあまりに文章長くなってしまって
物書きの才能ないなあとゲンナリした

eclipse でプロジェクト起こしてて気づいたんだけど
m2eclipse で [依存関係管理を使用可能にする] っていうの適用すると
コンパイラがプロジェクト個別の設定で java1.4 に変更されるのね
さらにビルドパスまで勝手に変更される始末
迷惑すぎる

eclipse で動的Webプロジェクトの新規作成時に展開されるディレクトリ構成と
maven デフォルトのディレクトリ構成があってないからなんだろうけど
そっちに合わせるつもりはあまりないので m2eclipse のこの挙動は困る

というわけで、m2eclipse を使用して pom.xml だけ作成したら
即 [依存関係管理を使用不可にする] で m2eclipse での管理を切りました
pom.xml 自体記述量少なくて済むので手で書いたほうが早いとの判断
ディレクトリの位置とかもデフォルトと違っててもこの中に書けるわけだし
m2eclise での管理を切ったら、プロジェクトのプロパティから [Java コンパイラー] を選択して、[プロジェクト固有の設定を可能にする] のチェックを外して、
今度は [Java のビルド・パス] を再編成

m2eclipse 使わずに手で pom.xml 作ったほうが害がないかも...

Jenkins とかの環境構築 (Redmine と連携)

Redmine との連携はだいぶらくちん
そんなつまずくとこもない
でも手順すぐ忘れちゃうのでメモっとく

あ、ちなみに Redmine のセットアップですが、
いろいろ設定するのに時間取るのは本来の目的から逸脱してしまい、
好きではないのでサクっとインストール出来る BitNami Redmine Stack を使用しました

プラグインファイル郡のコピー先が
(redmine のインストールディレクトリ)/vender/plugins だっていうのも
まだまだ慣れず、忘れてしまいがちなじぶん

毎回忘れるのがプラグインの有効化くらいか
とくに作業フォルダの位置変更するのよく忘れる

>cd "(redmine のインストールディレクトリ)"
>rake db:migrate_plugins RAILS_ENV=production

ひと通り済んだので、最後にもう一度初めからセットアップし直して手順まとめてみる

Jenkins とかの環境構築 (SVNのコミットをビルド実行のトリガーに)

SVN へのコミットをフックしてビルド実行出来るようになった
これまでに比べるとハマったとこはだいぶ少なかったけど
フックスクリプト実行時には環境変数が空の状態で起動されるというのを
知らなかったために、しばらく何でフックされないのかなー?
っていう状態になってました

以下を参考にさせてもらいました
http://d.hatena.ne.jp/kaorun55/20080815/1218767907
http://www.asahi-net.or.jp/~iu9m-tcym/svndoc/svn_hook_script.html

フックスクリプトの作成上の注意

フックスクリプトが実行されるときには、セキュリティ上の理由から環境変数(PATH 変数も)がすべて空の状態で起動されます。

このためスクリプト内部で外部プログラムを起動する場合は絶対パスを使用するかスクリプト内部で環境変数を設定する必要があります。

windows 用の wget はここから
http://gnuwin32.sourceforge.net/packages/wget.htm

一応メモがわりに作ったスクリプト残しとく
こいつを post-commit.bat の名前でリポジトリ配下の hook ディレクトリに配置する

set PATH="C:\Program Files\GnuWin32\bin"

wget http://(Jenkins のホスト名):(ポート番号)/job/(ジョブ)/build?delay=0sec

del *.htm*

wget で叩く url はビルド実行ボタンのリンクコピーして取るのが間違いなさそう

しかしこのフックスクリプトリポジトリごとでの適用になってしまうようで
1つのリポジトリ配下にいろんなプロジェクト入れて
まとめて管理しちゃってるような場合だと Jenkins のジョブはプロジェクトに対してだけど
そのビルドトリガーはプロジェクトの含まれるリポジトリ
リビジョン番号更新された場合、みたいなちょっと歪な感じになってしまうのね

...というわけで、リポジトリ作るときはちゃんとプロジェクトごとにしようねってことみたい

Jenkins とかの環境構築 (その他、躓いたこと)

その他、躓いたものとして
Jenkins にも Maven にもプロキシ通す必要があったこと
ってのがあった

Jenkins だとプラグインのインストールに、
Maven だと依存モジュールのダウンロードに
外部サイトにアクセスするのにプロキシ設定が必要だった
Jenkins だと GUI 画面で [Jenkinsの管理 > プラグインの管理 > 高度な設定] から、
Maven だと [(Mavenホーム)/conf/settings.xml] からの設定でことなきを得た

SVN を社内に立ててたのでソース抜いてこさせるのは
そのままで平気だった

会社だと外部アクセスにたいがいプロキシ通してるもんね
ほんと邪魔い、環境によっては生産性落としかねない
検証なりで広くネット検索必要って時だろうがサイトのフィルタリングで邪魔されたり
設定が甘いのか Google キャッシュとかは閲覧できるので
先生には感謝するばかり


次はコミットをトリガーにビルド開始できるようにしよう
あとは Redmine と連携を試してみよう
Redmine もほとんど初めてだからまたハマるかな

なお、私はここまで一通りの確認のために Jenkins の
ビルド実行を 115回くらい重ねていたようでした
うーん..なんとも恥ずかしいかぎり、未熟