cronで毎日とか毎時とかに指定したJavaを実行する時に注意しなきゃいけないのが、
PATHがすべてリセットされるということ。



なので、cronでは直接javaの実行コマンドを書かずに、
.shファイルに設定やjavaコマンドを記述し、その.shをcronで叩くようにする。



.shファイル
#!/bin/bash
PATH=/usr/java/latest/bin
JAVA_HOME=/usr/java/latest
CLASSPATH=.:/usr/java/latest/lib

#Linuxでjniを使う場合 LD_LIBRARY_PATH=/usr/lib
#Macでjniを使う場合 #DYLD_LIBRARY_PATH =/usr/lib java ・・・



javaコマンドの引数でパスを指定する場合は、
CLASSPATH -> -cp=ほげほげ
LD_LIBRARY_PATH -> -Djava.library.path=ふがふが

とすればおk



(追記)





前回は、JSONのデータをStringプリミティブにそのラッパー
そしてJavaBeansの命名規則にそったクラスのオブジェクトに
自動変換してくれるってとこまでやりました!!



今回は、JSONのキー名とJavaのフィールド名のマッピングや、
JSONのキー名の先頭を大文字にしたクラス名以外のJavaクラスへのマッピングの方法のメモだよ!!




・JSONのキーを、Javaの任意のフィールドにマッピングする
例えば、サンシャイン牧場では1つ1つの畑にインデックスが振られていて、
1: {
  畑の情報
}, 
2: {

みたいになってたのね。

でも、Javaのフィールド名に1とか2とか付けれないじゃん!!
なので、JSONの1の値をJavaのfarm1に代入する方法を書くよ!!


まずは、前回の復習で、String jsonにJSON形式のデータが文字列で入っていて、
それを、Hogeクラスのオブジェクトにマッピングするには、
とするよ!!


んで、本題のJSONのキー"1"をJavaのfarm1にマッピングするには、
JavaIdentifierTransformerクラスのtransformToJavaIdentifier()関数をオーバーライドして
条件式を記述する。
そしてそのインスタンスをJsonConfigクラスのsetJavaIdentifierTransformer()を使って、
JsonConfigオブジェクトにセットする。





・Javeのフィールド名を、任意のJavaクラスにマッピングする
デフォルトだと、Javaのhogeフィールドには、HogeクラスのオブジェクトやintやStringの値が
マッピングされるんだけど、

hogeもfooもBarクラスのオブジェクトに変換したいんだよー!!

という時のマッピング方法は、↑のようにJsonConfigを用いて


とすればおk



<参考>

JSONのフォーマットをした文字列をJavaのオブジェクトに変換するには、
JSON-libというライブラリを使えばおk


ただ、このJSON-libは、その他いくつかのライブラリに依存しているので、
そのライブラリもパスに通す必要がある。



なので、JSON-libを使うのに必要なのは、ココにいっぱい書かれてるけど、
とりあえず、↓を入れておけば動く

net.sf.ezmorph:ezmorph:jar




使い方は、簡単!

特に、データ型がプリミティブやStringなら超簡単!!
※JSONで値がない時に"NULL"が入る時は、intじゃなくてIntegerの用にラッパークラスにした方がいいかも


Beanクラスのフィールドがネスト(?)してても全然おk
ただしネストしてる場合は、デフォルトではフィールド名に対応したクラスのオブジェクトが入る。
例えば、フィールド名がhogeなら、プリミティブかHogeクラスのオブジェクトに変換される。




あ、読みやすさの為に載せてないけど、きちんと
toString()とかhashCode()とかequals()とかをオーバーライドした方がいいです。はい。



なんかどうでもいいネタかもだけど、
あとで忘れた時に調べ直すのめんどくさいからめもりんぐ

前にサンシャイン牧場のbotを作ろうとした時にはまったコト!!



Javaで、ウェブのクローンとかする時に、HTTPサーバーが空気を読んでトラフィックに優しいgzipでデータを送ってきた時に、そのままだとうまくデータを解析できない!!




でも、やり方は簡単♪
InputStreamとInputStreamReaderの間にGZIPInputStreamのクッションを挟むだけ!!



・Before


・After


以上でっす。


Snow LeopardでBootcampとか外付けHDDを使う時に、
デフォルトだとNTFSは読み込みしかできないけど、
ちょっとした設定で書き込みも可能になるよ!!



やり方は/etc/fstabファイルに書けばいいんだけど、書き方が2通りあって、

1つ目が、デバイス固有のuuidで設定するやり方で、
UUID=<uuid> none ntfs rw

2つ目が、マウント名で設定するやり方で、
LABEL=<name> none ntfs rw
を書き込む。




UUIDの取得の仕方は、そのドライブがマウントされた状態で、
$ diskutil info /Volumes/XXXXX | grep UUID
で取得できる。



/etc/fstabはデフォルトでは存在しないけど、自分で作っちゃえばおk

$ sudo vim /etc/fstab



んで、再起動!!



あわせて読みたいブログパーツ

iKnow

TweetClock

なかのひと