Javaの最近のブログ記事

Windowsマシンから、同じくWindowsのファイルサーバにjava.io.Fileでアクセスすると、
Javaプログラムが走っているマシンにログインさせたユーザの権限で共有ファイルにアクセスする。

つまり、
ファイルサーバにAとBというディレクトリがあり、aさんでログインしたマシンではディレクトリAにアクセスでき、bさんでログインしたマシンからではディレクトリBにアクセスできるとする。

このとき、aさんでログインしたマシン上で動いてるJavaからはjava.io.FileでAにはアクセスできる。
ここで、aさんでログインした状態で、ディレクトリBにアクセスする方法のメモ



まず、java.io.Fileには認証機能が存在しないので、JCIFS(The Java CIFS Client Library)というライブラリをダウンロードし、クラスパスを通す必要がある。

jcifs.smb.SmbFileやjcifs.smb.SmbFileInputStreamなどは、java.io.Fileやjava.io.FileInputStreamと同じように扱える。


ここで、認証の仕方が2種類見つかったので、2つとも¢(. .。)メモメモ

<条件>
ディレクトリBのpath:¥¥fileserver¥B
fileserverのIP:192.168.0.1
bのユーザー名:hoge
bのパスワード:foo
   +
上の例の条件


<方法①>


以上(笑)

これ以降は、jcifs.smb.SmbFileを使って、java.io.Fileと同じように、ディレクトリ内のファイルのリスト(SmbFile配列)を取得したり、ファイル名とかファイルサイズを取得したりする。

ちなみに、アクセス権の内ディレクトリにアクセスしようとすると、Exceptionが投げられる
また、SmbFileを使ってユーザbを認証している間は、SmbFileではAにアクセスできない。Fileではできる。

<方法②>
jcifs.smb.SmbFileの他にjcifs.Configを使って




<参考>
java:jcifs [Paulownia.jp]
試験管のなかのコード :: JCIFSにチャレンジ

タイトル通りBlazeDSでFlexとJavaを通信させる最小限の設定(だと思う)

~Java側の設定~
①まず、AdobeのBlazeDSのページからライブラリをダウンロード

②これを展開し、以下の4つをjavaのWEB-INF/libにつっこむ
・backport-util-concurrent.jar
・flex-messaging-common.jar
・flex-messaging-core.jar
・flex-messaging-remoting.jar

③Blaze用の設定ファイルをWEB-INF/flex/services-config.xmlに作成
メモ:flexっていうフォルダは自分で作る!!

説明のため、hogeパッケージのFooクラスにflexからアクセスする為のメソッドを起き、
名前を、hogehogeと名づけ、http://www.example.com/BlazeTest/
でアクセスすると仮定すると、(blazeTestはTomcatで設定)

内容は、


ここで重要なのは15行目と19行目だけ

15行目のは、flex側の設定で出てくる。
19行目のは、flexから呼ばれるJavaクラスを登録する。Java Beansって書いてあるけど、呼び出したいメソッドのJavaクラスのことだと思う。HttpServletを継承する必要はない。
引数、戻り値に使うJavaBeansはここで登録しなくてもいけた。


④実際に呼びだされるJavaクラスの作成。
先ほど登録したクラスを作成。
引数、戻り値がある場合は、flex側とjava側の両方に全く同じフィールドとそのgetter,setterメソッドしか持たないBeanクラスを作る必要がある。Java側はフツーのJavaBeansで良い。ちなみに戻り値に使うクラスはSerializableをimplementsしていなければならない。

説明のため、barメソッドを呼び出すとする



⑤④の設定ファイルを読み込むようにweb.xmlに追加
WEB-INF/web.xmlに以下の内容を追加する。




~Flex側での設定~
①mxmlにdestinationを指定
mxml内にremoteObjectを書く

ここでlocalhost:8080は自分の環境に合わせて変更し、destinationはJava側で設定した↑の15行目の文字列が入る。

②通信開始を呼ぶメソッドを書く
ASのfunction内でもmxmlのclickとかchangeでもいいけど、そこで
srv.bar()と書けば通信してくれる。引数がある場合はもちろんここにいれる。
戻り値は、srv.bar.lastResultで取得できるが、この通信は非同期で行われるので、ASのfuncrion内でこのメソッドを呼んでも、通信が終わる前に次の行が処理されてしまうので注意。

受信が完了した時に、barResultというfunctionを呼んで処理をしたい場合は、①のRemoteObjectを以下のように変更する。

nameには、java側の呼び出すメソッド名、resultには、受信後にflex側で呼び出すfunctionを指定してやる。

③Flex側でもBeansを作成
通信で扱う変数は、Beanに格納しなければならない。(ただし、戻り値のStringの場合は必要ない)
また、FlexとJava側で作成したBeansを関連関連付けるため、AS側のBeanクラスのpublic classの前の行に
[RemoteClass(alias="hoge.FooBeans")]などとJavaBeansのパッケージ名を含んでクラスを教えてあげなければならない。
戻り値に使う場合はもちろん[Bindable]も必要




たぶん、これでいくはず


<参考>
Adobe - Developer Center
Adobe BlazeDSを自分のWebアプリケーションに組み込む設定
Fedoraには、yumというパッケージ管理ソフトがついていて、ダウンロードからインストール、アップデートまでコマンド1つでやってくれる。


だが、Fedora 7のyumでjava5まではインストールできるのだが、java6がインストールされない。
なので、rpmを使ってjava6をインストールする方法のメモ


<条件>
Fedora 7にjava6 Update5をrpm&sshを用いてインストールする。


まず、rpmパッケージのダウンロード
http://java.sun.com/javase/ja/6/download.html
に行って、Linux版のrpm版を落とす。


落としたら、WinSCPとかで、鯖にアップ

sshでログインしたら、/tmpとかにファイルを移動し、カレントディレクトリも/tmpへ
# mv 保存したパス/jdk-6-linux-i586-rpm.bin /tmp/jdk-6-linux-i586-rpm.bin
# cd /tmp

次にこのファイルに実行権限を与え、実行
# chmod a+x jdk-6-linux-i586-rpm.bin

# ./j2re-1_4_0_01-linux-i586-rpm.bin
ラインセンスに同意し、y → [enter] → [enter]でファイルをインストールする。

最後に、/etc/profileに次の行を追加し、
export JAVA_HOME=/usr/java/jdk1.6.0_05/
export PATH=$PATH:/usr/java/jdk1.6.0_05//bin

設定を更新
# source /etc/profile

# java -version
を打って、
java version "1.6.0_05"
Java(TM) SE Runtime Environment (build 1.6.0_05-b13)
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing)

と表示されればOK
TeedaでValidationをした時に、エラーメッセージを表示するためのメモ



に対するエラーメッセージは、

となる。

また、複数あるID全てを一箇所で表示するには



最後に、idがついてないコンポーネントのエラーまで含めて全て表示するには

Teedaでは、Validationの仕方はいくつかあるけど、
その中で、たぶん一番簡単な、アノテーションを使う方法のメモ


今回はデフォルトで用意されているものを使うので、カスタムValidationは、使う必要が出てきたら、調べて書きます。


具体例を書くと、
・login.html

・loginPage.java


以上

iKnow

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