2013年7月24日水曜日

WebSphereのLaunchClient.shを使ったアプリでID/Passを聞かれてしまう

【Problem】
WebSphereのLaunchClient.shを使ったアプリでUserID / Passwordを聞かれてしまいます。
具体的には、こんな感じの現象。


WSCL0014I: アプリケーション・クライアント class jp.co.myapp を起動しています。
レルム / セル名: defaultWIMFileBasedRealm
ユーザー ID: (入力待ちになってしまう)


これをスキップさせたい。
ミナサマあまり悩まないのか、IBM様がササッと設定してしまうからなのかわかりませんが、情報が少なかったので、悩みました。

【Resolve】
sas.client.props を編集。

Before:com.ibm.CORBA.loginSource=prompt
After :com.ibm.CORBA.loginSource=none


これだけでした。
情報リソース(Resource):
http://pic.dhe.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=%2Fcom.ibm.websphere.zseries.doc%2Finfo%2Fzseries%2Fae%2Frcli_javacmd.html


類似情報では、soap.client.propsに、UserID/Passwordを書き込むとかいろいろありましたが、今回は該当しませんでした。
シンプルです。
あーよかった。

2013年7月21日日曜日

Android開発環境を更新したら、既存のアプリが動かなくなった

ある日、過去のAndroidプロジェクトが全て動かなくなった。

最近やったことを思い返してみる・・
Androidシステム開発環境を更新したんでした。

なぜかというと、Developer Console に新しく現れた「ゲームサービス」を使ってみたいから!
テストプログラムを動かして、これまで作ったアプリに組み込みをせこせこ行おう!と思ったのです。

そのためには、開発環境をあれこれ更新しなければなりませんでした。
・・・と言っても、ほとんどEclipse任せ。
画面表示されるメッセージに言われるままに、更新を繰り返しました。
随分いろいろなライブラリやらツールが入れ替わったようです。。

ゲームサービスのサンプルは何とか動くようになったのですが、
代わりにそれまでのアプリがうごかなくなった。。

現象はこんな感じ。。

07-21 11:18:21.656: E/AndroidRuntime(23900): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.domain.app/com.kdomain.app.MainActivity}: android.view.InflateException: Binary XML file line #101: Error inflating class com.google.ads.AdView
07-21 11:18:21.656: E/AndroidRuntime(23900):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1658)
07-21 11:18:21.656: E/AndroidRuntime(23900):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1674)
07-21 11:18:21.656: E/AndroidRuntime(23900):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)


ぐぐってみると、すぐに見つかりました。
http://stackoverflow.com/questions/10523703/error-inflating-class-com-google-ads-adview

この人と同じ現象!
でも、この人の場合は、libフォルダを新たに作って、そこにライブラリを置きましょうというのが解決策だったみたいですが、私の場合は既にあります。
・・とにかくライブラリ周りの問題と思い、あれこれ再チェック。
すると、Javaのビルドパスの設定から、GoogleAdMobAdsSdk-6.3.0.jar のチェックが外れているではありませんか!
他の動かなくなったアプリも同じでした。

チェックをつけてビルド・実行しなおしたら、動きました。


あーよかった。
どんなことでも、主原因ってたいしたことがない場合が本当に多いものですね。


2013年6月25日火曜日

JSFでDBから取得した日付が一日前になってしまう問題について

JSFのバージョンアップ対応で、なぜかDBから取得した日付情報が一日前になってしまうという不思議な現象が発生。

仕様ですか?と聞いてみると、そんなわけないだろうという回答。
うん、そりゃあそうだ。

そういうわけで早速調査。
でも、ステップ実行して調べてみるも、正しく日付を処理しているように見える。。

なぜだろう・・と思って調べてみたら、タイムゾーンの設定による問題らしい。


対処方法は2通り。
1:コンバータで日付を設定している箇所にすべてタイムゾーンの記載を追加。
(たくさんあるととても大変。。)

なので、今回は
2:Web.xml にタイムゾーンとしてシステムのタイムゾーンを使う一筆を追加。
(こっちは、一か所修正するだけで、すべてに反映可能!)

こっちを採用。
それにしても、どうしてこのパラメータ、デフォルトでオンじゃないのでしょうね。


web.xml

<context-param>
  <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
  <param-value>true</param-value>
</context-param>

2013年6月21日金曜日

findの結果をtarでアーカイブしたい(Redhat Linux bash)


findの結果をtarでアーカイブしたいと思って、ググったら、以下ページに到達。
思わぬ注意点があることを知る。感謝。
http://fei-yen.jp/maya/wordpress/2013/01/15/find%E3%81%AE%E7%B5%90%E6%9E%9C%E3%82%92tar%E3%81%A7%E3%82%A2%E3%83%BC%E3%82%AB%E3%82%A4%E3%83%96%E3%81%97%E3%81%9F%E3%81%84/


で、感謝しながら使ってみるも、エラー。

ちなみに、ページのオーナーさん推奨の方法がコレ。
find -name "hoge*" -print0 | tar -cvz -T - --null -f hoges.tar.gz

でも、きっと、ディストリビューションとか微妙な違いがあるのでしょうね。
調整した結果、これで動きました。
(私は圧縮とかしなくてよかったので)

find /opt/IBM/WebSphere/ \( -name "*.xml" -o -name "*prop*" \) -print0 | tar cvf wasxmlprop.tar -T - --null


ちなみに、これをやりたかった理由は、IBMさんのWebSphereの設定を保存するためです。
IBMさんのWebSphereの管理コンソールで、ちょっと間違った設定をすると、いきなりWASが動かなくなるです。

そんなとき、

find /opt/IBM/ -mmin -30
↑これで、30分以内に修正があったファイルを洗い出し、
めぼしいxmlファイルとかpropertyファイルを元に戻すと回復するんです。


勉強になりました。

2013年5月13日月曜日

特定ディレクトリ以下で、特定の拡張子を持つファイルをtarでまとめたい

特定ディレクトリ以下で、特定の拡張子を持つファイルをtarでまとめたい。
そんなときの定石がコレ。

find . -name "*.xml" | xargs tar cvf xmlfiles.tar


サーバアプリのアップグレード前や、設定の大幅変更前にとっておき、
後日、動かなくなったときとかに、diffを取れば、原因の検証・復旧に役立ちそうです。

2013年5月9日木曜日

最近修正したファイルに限定してgrepしたいとき

Linuxで、カレントディレクトリ以下で、
一日以内に修正したファイルのうち、
ファイル内に「abc」を含むものを探すときの定石!


find . -mtime 0 -print | xargs grep abc /dev/null


Webアプリの設定ファイルをいじった結果、動かなくなっちゃって、元に戻したいときの手掛かりになりますよ。

2013年4月26日金曜日

LD_LIBRARY_PATH と CLASSPATHについて

LD_LIBRARY_PATH と CLASSPATHについて

Linuxにおける、LD_LIBRARY_PATH と CLASSPATHの違いはなんだったっけ・・ 混同してしまったので、ちょっと再確認しました。

LD_LIBRARY_PATH

実行ファイルが処理を行うとき、必要なライブラリを探しに行くパス。 主に、 *.so などが格納されている。
全ユーザに設定を行いたい場合は、以下の形式でファイルを作成
 /etc/ld.so.conf.d/*.conf
内容は、チェックさせたいパスを改行で区切って並べる。 例えばこんな感じ。
 /usr/lib64/mysql
 /aaa/bbb
 /aaa/ccc/ddd
 /eee/ccc/ddd
ファイルを配置したら、適用させるためのコマンドを実行する必要がある。
ldconfig

CLASSPATH

Javaプログラムが処理を行うとき、必要なライブラリを探しに行くパス。 主に、*.class *.propertiesが格納されている。
全ユーザに設定を行いたい場合は、以下の形式でファイルを作成
 /etc/profile.d/*.conf
こんな感じで記述する。
 export CLASSPATH=/opt/ibm/db2/V10.1/java/db2jcc.jar:${CLASSPATH}