2008年11月29日土曜日

HibernateでのSQL出力設定

HibernateではSQLをトレースしてくれます。
SQLを投げてるタイミングがわかったりして
結構重宝する場合がありますが、消す場合は

hibernate.cfg.xmlファイルの「show_sql」の部分をfalseにします。


<property name="show_sql">false</property>

HibernateのCriteriaでカウントなど

Hibernateをよく使いますが
CriteriaでアクセスをするとSQLを使うことはありません。

まずカウントの取得方法は

criteria.setProjection(Projections.rowCount()).uniqueResult();
//もしくは
Projections.countDistinct("プロパティ");

と行います。

DISTINCTは

criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);


などで行うことができます。

2008年11月26日水曜日

Strutsでダウンロード

ファイルのダウンロードを方法を記述する。

これは個人的な見解なのですが
よく、以下のようなAction上での記述が見受けられます。

//ダウンロード用のコンテンツタイプ設定
response.setContentType("application/octet-stream");
//ファイル名の設定(ヘッダ情報)
response.setHeader("Content-Disposition","attachment; filename=testcsv");
//各データの取得
OutputStream os        = response.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os, encode);
BufferedWriter writer  = new BufferedWriter(osw);

しかし、どうでしょうか。。。
例えば、writerに直接書き込んでるビジネスロジックの途中で、
Exceptionが起こると考えた場合、responseを記述している為、
Struts上の動作に戻ることが不可能ではないですか。。。

Strutsにおいて通常Viewで出力を行なう事を考えれば、
これはこれでおかしいのではないでしょうか?

ファイルがコピーレベルのデータだとしても、
JSP側でダウンロードを行なうのが筋のような気がしないでもないですね。
※処理最終でWriterに記述すれば障害の可能性が低くなることはわかっています。

それではJSPでダウンロードする感じを記述してみましょう!!

2008年11月24日月曜日

Treeを展開してみる

FlexでTreeを使用していますが
初期表示でTreeを展開したいと思いました。

すべての設定終わった後に動作するcallLater()を使用するようです。

初期化系のメソッド内でこれを行い、

tree.dataProvider = wkXML;
//ノードを展開する
callLater(expandFirstNode);


でそのメソッドを定義します。


//ツリーを展開する
private function expandFirstNode():void
{
//ディレクトリ選択
tree.selectedIndex=0;
//ルートを展開
tree.expandItem(tree.dataProvider.getItemAt(0),true);
}


これで初期化と同時にツリーが展開します。

HSQLDBでのLimit文

DBをPostgreSQLからHSQLDBに移行することになったのですが
不覚にもPostgreSQLでLimit文を使っていました。
こりゃ、移行断念か。。。。と思いましたが
以下で指定した行数を取得できるようです。

SELECT LIMIT 0 10 [カラム名] FROM [テーブル名]

0が開始行、10が取得行数になります。0から始まります。
行数より大きな数字等を渡してもエラーにはならないようです。

HSQLDBのインストールと起動

Javaが存在すれば動作するDBです。
簡易的にテストしたりするには適しています。

http://hsqldb.org/

からダウンロードしてきます。
ダウンロードしたファイルを解凍して
demo/runServer.batを見ればわかりますが


cd ..\data
@java -classpath ../lib/hsqldb.jar org.hsqldb.Server %1 %2 %3 %4 %5 %6 %7 %8 %9


で起動することが可能です。

文字列コードなどを指定する場合はJavaコマンドに
-Dsqlfile.charset=Windows-31J
などを追加します。

runManager.batでSQLを直接打つことも可能です。

起動した際に「server.properties」という記述があります。
ここにデータベース名などを記述して起動することも可能です。


起動したコンソールをCtrl+Cで閉じるとシャットダウンします。

2008年11月23日日曜日

FileReferenceのセッション継続

Flexでのアップロード、ダウンロードを行う場合
「FileReference」を使用しますが、
WebServiceなどを通じて接続されたセッション情報を継続できません。
下記行わなくてもIEでは操作できましたが、
FirefoxやCromeでは不可能でした。おそらくCookieの関係でしょうね。


私の場合はTomcat→Strutsを使用してサービスを構築していますので
ActionForm値を使用してアップロードを行います。
Session継続を行っても新しいFormのインスタンスを生成してしまいます。
なので初回インスタンスを生成した時にRequestから


request.getSession().getId()


の値を取得して、Flexに返します。
FlexではセッションIDを何らかの形で保存しておきます。
でFileReferenceを使用する際に使用するURLRequestが使うURLに
jsessionidとして設定してあげます。


var request:URLRequest = new URLRequest();
request.url = uploadUrl + ";jsessionid=" + sessionId;
reference.upload(request);


すると同一のセッションで値をやりとりすることが可能です。
能書きから行くとおそらくログイン情報の共有等もこれでできるでしょう。

セキュリティ的にこれでよいのかは不問の方向で!

2008年11月17日月曜日

Linuxで無線LAN

昔から無線環境はあったのですが、もっぱら友人の為に使っていました。
それは我がメインマシンIBM社のX40はFedoraCore2を載せている為である。。。
昔やろうと思っていたのですが、途中でおっくうになり、止めてました。

「Atheros」ですので「madwifi」でイケルらしいです。
http://sourceforge.net/projects/madwifi/
....ダウンロードはない見たいです。
よって


cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/madwifi co madwifi 

make install


でOKです。

ネットワーク設定で「ath0」が出てきます。しかし設定はできません。

「/etc/sysconfig/network-scripts」
にath0の設定ファイルを作成すれば良いです。
「ifcfg-ath0」
という名称を下のように作成します。


DEVICE=ath0
ESSID="**********"
KEY="*****WEPの16進"
BOOTPROTO=dhcp
ONBOOT=no
MODE="Managed"

WEPの16進数はWeb等でも公開されてますので、
変換すれば容易です。

固定IPなどで設定するには


BOOTPROTO=none
BROADCAST=192.168.***.255
IPADDR=192.168.***.自分
NETMASK=255.255.255.0
NETWORK=192.168.***.0
GATEWAY=192.168.***.げーとうぇいのIP


の設定でうまく行きます。
あとは


ifup ath0


で完了です。
起動時の読み込みもこのコマンドを呼んであげれば動作します。


最近だとインストールするだけで読み込んでますけどね。。。

LinuxでのIPTable

IPTableの設定方法

ipchainsとは同時起動できないそうです。 

/etc/init.d/iptables start

これで起動します。 

/etc/init.d/iptables stop

ストップします。
(その他製品等の接続の不正原因等を
  手っ取り早く確認する場合やってみてください)

さて、肝心の設定ですが、、、読んでると眠くなるくらい奥が深いです。。。

だもんで、sshでの接続を許すような場合、


/sbin/iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT

と行います。

/etc/init.d/iptables save

で、設定をセーブする事が可能です。

これで再起動すれば、、、ばっちり!!

LinuxでのTELNET設定

「/etc/xinetd.d/telnet」を編集します。

service telnet
{
 flags = REUSE
 socket_type = stream
 wait = no
 user = root
 server = /usr/sbin/in.telnetd
log_on_failure += USERID
 disable = yes
}


「disable = yes」→「disable = no」
に変更します。

変更後は

/etc/rc.d/init.d/xinetd restart

を行い、サービスを再起動します。

IPTable等やネットワークの設定で見えない状況もあります。ご注意を。

Linuxでのマシン名

「/etc/sysconfig/network」を編集します。


NETWORKING=yes
HOSTNAME=マシン名

LinuxのNFS設定

LinuxにおけるNFSの構築をやりましょう。
NFSはネットワーク上で他の端末のディスクを共有する仕組みです。
これにより、あたかも物理ディスクのように使用する事ができます。

例えばDBを構築して、データファイルは別のRAIDに組んだり、
開発環境を同期化させたりすることができます。

私の場合は
サーバは玄人指向の「KUROーBOX HG」、
ファームバージョンは1.1です。
  ※OS、カーネルはメーカへ
クライアントはFedoraCore2を搭載したノートパソコンです。

サーバの設定
 まずはインストールが必要です。最近のディストリビューションだったら
 初めから入っていて「/etc/exports」の作成、追加だけでできるようです。
 玄箱はそうはいきません。
 まず、添付のCDROMからbinaryから
   nfs.tar.gz
   portmap-5beta.tar.gz
 を持ってきて、これらをROOTで展開を行います。
  /usr /etc /sbin 辺りに展開されます。
 そして以下を実行します。
 「/etc/rc.d/rc2.d/」にて

  ln -s ../init.d/portmap S31portmap
  ln -s ../init.d/nfs-common S32nfs-common
  ln -s ../init.d/nfs-user-server S32nfs-user-server

 「/etc/rc.d/rc0.d」にて


  ln -s ../init.d/portmap K31portmap
  ln -s ../init.d/nfs-common K32nfs-common
  ln -s ../init.d/nfs-user-server K32nfs-user-server


 「/etc/rc.d/rc6.d/」にて

  ln -s ../init.d/portmap K31portmap
  ln -s ../init.d/nfs-common K32nfs-common
  ln -s ../init.d/nfs-user-server K32nfs-user-server 


 を行います。
 その後、「/etc/exports」を編集します。
 「物理ディスク名 クライアントIPやドメイン(接続指定)」のレコードを追加します。
  例えば、


/mnt/share 192.168.0.3(rw,no_root_squash)

  とします。
  サブネットマスクでの指定も実現できます。
  無論、IPTable等と併用して、安全にしてください。

  再起動しましょう。


クライアントの設定

  さて、こちらの設定はより簡単です。
  まずはサーバの確認 


/usr/sbin/showmount -e 接続サーバ名


  これでNFSアクセス指定ができます。
  出力されない場合は設定にミスがあるか、NFSが起動してないか
  ネットワークコネクトに問題がある可能性があります。


mount -t nfs サーバ名:/mnt/share /mnt/nfs

  としてマウントします。
  これでOKです!!

※Fedora2はこれじゃダメですだ!!
おそらく「mount to NFS server サーバ名 failed: server is down.」
と表示されてしまいます。NFSバージョン3で接続している見たいです。

「/etc/fstab」を編集し、


サーバ名:/mnt/share /mnt/nfs nfs auto,nfsvers=2  0 0


を追加して、「mount /mnt/nfs」としてみてください。

Fedoraでない人でもfstabに


サーバ名:/mnt/share /mnt/nfs  auto  0 0


以上のように記述しておくと、
起動時にローカルのように使用する事が可能になります。

Linuxのインストール

IBM X40にFedora Core2をインストールしてみます。
あらかじめ、ブートできるCD-ROMを持っていることを前提にします。

さて、まずimgファイルを入手する必要があります。
http://download.fedora.redhat.com/pub/fedora/linux/core/2/i386/iso/
ここからdisc1-4を入手します。

これらをCD-Rに焼くのですが、気をつけなければいけないのが
「WindowsXPのデフォルト機狽ナ焼いたらブートできない」点です。
そこで、「Image Recoder」
http://download.fedora.redhat.com/pub/fedora/linux/core/2/i386/iso/
を使用します。(各種ベンダが出しているライティングャtトでも可狽ナす)

インストールしてもうんともすんとも言いませんが、完了しています。
*.imgのファイルで右クリックすると「Imageなんたらー」と出ます。
そうしたら、CD-Rのドライブを指定する。それだけでOKです。

これでインストールCD×4は完成します。

あとはブートすればOK!!(F12でブートリストが出ます)
それにCD-ROMが認識されないようだったら、FDDでブートして
CD-ROMを読み込ませたりとちーと難しい世界に入ります。

後はインストーラーにそって設定!!

情報は以下のとおり
http://www.fedora.redhat.com/:本家
http://fedora.jp/:(http://fedora.jp/wiki/ こっちの方が盛んみたい。)
http://linux2ch.bbzone.net/index.php

Linuxで起動と同時にサービス実行

Apache、Tomcat、PostgresSQL等をインストールした後、
起動時に自動的に実行したい場合、以下の手順で登録を行います。

1.「/etc/rc.d/init.d」 にスクリプトを作成
2.起動ランレベルに対してシンボリックリンクを唐!)

まずは1でデーモンを起動、終了、再起動、ステータス侮ヲを
行う事のできる共通的なシェルを作ります。

同一のディレクトリにあるものを参考に
start,stopのシェルを書きましょう。
(VI等でデーモンを開いて見てみましょう)

その後はランレベルに合わせたディレクトリに
シンボリックリンクを作成していきます。

ランレベルは「rc?.d」の?部分になります。
GUI起動だったら5、コンメ[ルなら3等、最悪すべてを
作っても良いと思います。

私の開発環境はGUIですので5にします。
逆に公開サーバ等は3に設定しておきます。

「rc5.d」にて
「ln -s ../init.d/作成したシェル S??作成したシェル」を実行します。
??は起動順序になります。
ネットワーク起動がまだの状態での
ネットワーク関係の起動を行いたくない等他のサービスと
関係がでて来る場合は意識が必要になります。

後は再起動等して確認しましょう。 


/sbin/chkconfig vsftpd on


でも可能みたいです。

Linuxでのフラッシュメモリ読み込み

Linuxでフラッシュメモリを読み込むなんてできるの?って思ってたら結構簡単にできるものです。
USBに指してみると、、、、あら!?LEDが光ってくれます。つうことは後はmountするだけ!!


mkdir /mnt/usbmem
mount -t vfat /dev/sda1 /mnt/usbmem/
cd /mnt/usbmem/
ls -ltr

完璧!!
だけど、、、、日本語のディレクトリが文字化けする場合があります。
※私はFedoraCore2だもんで化けました!!

だけど、UTF-8だから大丈夫のはず!!
んーと。。。。。マウントしているのは。。。
。。。。
。。。。

NFSを建てた時に見たファイル辺りに設定すれば良いのではないかと考えてみる。。。
/etc/fstab

ファイルシステムだからきっとそうだ!!


/dev/sda1   /mnt/usbmem/ auto                    noauto,user,iocharset=utf8 0 0

今までの経験で行けば、、キャラセットさえ設定すれば良いはず!!

んでumountして、、、
デバイスが使用中!!
使ってないのに!!

なんでこんな事を文句言うのかな。。。としばし考えてみる。。。。。。。。
かれこれ5秒位たった後、、、、
あっ!!ディレクトリに入りっぱなし!!

おもむろに

cd /tmp
umount /mnt/usbmem

これでOK!!
でもう一回マウントすると、日本語が表示されました。
きっと他のLinuxでもこれでいけるはず!!
※無論キャラコードは違うんでしょうけど。

Linuxでの環境変数設定

環境変数などを設定するには
/etc/profile.d
の位置にファイルを作成します。

例えばjava.shというファイルに


export JAVA_HOME=/usr/java/jdk1.5.0_06


また、java.cshというファイルに


setenv JAVA_HOME /usr/java/jdk1.5.0_06


を設定しておきます。
するとシェル起動時には読み込まれています。

LinuxでのDNSクライアント設定

/etc/resolv.conf を編集します。

nameserver 192.168.32.220
nameserver 192.168.32.1
nameserver 127.0.0.1

でOKです。再起動等は必要ありません。

LinuxでCDを焼く

LinuxのCDをLinuxで焼く方法を記述します。
なにやらカーネルのバージョンで違うようですが、
私の環境は2.6でした。

倍速やファイル名は各環境で違うと思います。

 /usr/bin/cdrecord -v speed=4 dev=/dev/hdc -eject FC-5-i386-disc1.iso

Linuxのアンチウィルスソフト

LinuxのアンチウィルスにはBitDefenderというソフトを使っています。

http://www.bitdefender.com/


単独のRPM配布ありで簡単に導入が可能です。

ダウンロード後は権限のあるユーザで


bdc --files /*


等とやるとチェックを行う事ができます。
プロキシサーバを使用している場合には


/opt/bdc/bdc.ini


があるので、ファイルに

HttpProxy = サーバのアドレス:ポート番号

を追加します。そうすると、

bdc --update

で定義の更新を行います。

2008年11月16日日曜日

Linuxのハードディスク増設

外付けHDDを購入しました。
ベアボーンなのでHDDも別購入となりました。
mountしましたがもちろんうまくいきません。
おなじみのパーティション作成と
ファイルシステムのフォーマットが必要ですね。




/sbin/fdisk /dev/sdb



これで別のコンソールが立ち上がります。
「n」でパーティションを作成して、
「w」で書き込みます。
まぁ「t」でIDを変更したり、色々できますね。
何より書き込まないと変更できないのがエライ!!




/sbin/mkfs -t ext3 /dev/sdb1



ext3はFAT32ですね。
ext2でもOKだったのですが、現在使っているNASが
FAT32なのでext3を指定しました。




mount -t ext3 /dev/sdb1 /mnt/hdd



これで可能ですね。