Sockletの配備方法の変更

GPSS1では、Sockletの配備までGPSSサーバで面倒を見ていました。
つまり、接続一発目のコマンドはGPSSサーバ自体で解釈し、その後にSockletに引き渡す、というようないろいろとややこしい処理が入っていました。
GPSS2ではその部分をばっさりカット。
GPSSサーバは純粋にソケットの待ち受けのみに徹することになりました。

ではどうするのかと言いますと、GPSSサーバには必ず1つだけデフォルトのSockletを登録するようにして、接続を受け付けると有無も言わさずそのデフォルトのSockletにクライアントを預け、コマンド処理はそちらに任せてしまう、といった処理になりました。

このデフォルトのSockletを、特別にSockletDeployerと呼びます。
SockletDeployerは、必ずSockletDeployerインターフェースを実装する必要があります。
また、SockletDeployerインターフェースを実装したクラスをSeasarのDICONに登録すると、自動的にGPSSサーバにDIされます。

ですので、GPSS1では接続後一発目のコマンドについてはGPSSの仕様として限定されてしまっていましたが、GPSS2ではSockletDeployer次第で如何様にも書けるようになりました。

と言うわけで、HTTPの受け答えも書けると思います。>> HTTPポーリングによる接続
また、2chのスレの方で話も出てた、FACEs用のアプリケーションをがっつり移植ができちゃうSockletDeployerも作っちゃおうかな、なんて野望も抱いてたりしますw

なぜSockletの仕様が変わってしまったのか

相変わらずドキュメント、というか文章は下手なので、意味不明な表現がありましたらご遠慮なく突っ込みお願いします。

メソッド名の問題。

checkConnection / preRemoveClient がどうにも気持ち悪かったので、メソッド名を変更しました。

accept:クライアント受け入れ処理←checkConnectionから変更
denied:クライアント接続拒否処理(新設)
desert:クライアント切断処理処理←preRemoveClientから変更

あぁ、すっきり(笑)

実はSockletインターフェースには従来どおり、checkConnection / preRemoveClient の両メソッドを残してあります。
GeneralSockletの基底クラスの checkConnection / preRemoveClient にてアクセスコントロール処理を行うようにしましたので、Sockletを実装する段階では記述する必要がなくなっただけです。
なので、GeneralSockletを使用せずに0からSockletを開発する場合は、やはり checkConnection / preRemoveClient メソッドを実装する必要はあります。

また、Socklet間の連携についてはSeasarに管理してもらうことにしたので、GPSS2では特に記述する必要はなくなりました。
よって、これまた気持ちの悪かったafterDeployedLinks/allowAccessFromOtherSocklet等のメソッドは廃止となりました。

クライアント管理の問題。

S2のHotSwapに対応させるために、Sockletに接続中のクライアントを持たせるわけには行きませんでした。
なぜなら、Sockletに直接接続中のクライアント達一覧を持たせておくと、Sockletを入れ替えた際にインスタンスが初期化され、クライアントが切断されてしまうためです。
(多分、新しいS2のHotDeployでも同様だと思うのですが…)
その他の理由もありますが、なんにしてもSockletには「状態」を持たせないことにして、接続中のクライアント等、Sockletに関する「状態」は別のインスタンスで管理することにしました。

そうなりますと、コマンド処理メソッドの引数として「現在接続中のクライアントたち」を渡す必要が出てきてしまいまして、doCommandメソッドの仕様も変更になってしまいました。

ちょっとしたメモ

svn+sshを使うために

Subclipsesvn+sshを使うためには、JavaHLではなくて、JavaSVNを使ったほうがよさげ。JavaHLではうまくいかんとです。

svn+sshでユーザを分ける

authorized_keysに書いてある鍵の前に、

command="svnserve -t -r (レポジトリ) --tunnel-user=(ユーザ)" ssh-rsa A...

としてあげると、Linuxアカウントじゃなくてtunnel-userで指定したユーザがログに記録されます。
詳しくは http://subversion.bluegate.org/doc/ch06s03.html

同じSVNサーバで複数のユーザを使い分ける

ホスト名が同じだと同じ鍵を使おうとしちゃうようなので、hostsファイルにでも適当なホスト名を登録して、鍵毎に擬似的に違うホスト名を指定してやるとよさげ。

TortoiseSVNで、svn+ssh

Eclipseの「ウィンドウ」→「設定」→「チーム」→「CVS」→「SSH2接続メソッド」→「鍵管理」で生成したRSA鍵を使うためには、まず作った鍵をPuTTY形式の鍵に変換する必要があります。-> puttygen.exe http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html を使うと変換できます。
参考)http://www.chitta.com/nobu/text/?pid=49

次にTortiseSVN設定→ネットワークにある「SSHクライアント」を以下のように編集します。

TortoisePlink.exe -l (システムアカウント名) -i (鍵へのパス) -C

TortoisePlink.exe、及びPuTTY形式の鍵へのパスはフルパスで書いてください。

ちなみにSubclipseでは、PuTTY形式の鍵を使用する必要はありません。

TODO:TortiseSVNで複数の鍵を使い分けるには?

誰か知ってたら教えてください。

えと、そろそろ日記復活します。
GPSS2ほぼできました。
近々公開したいと思ってます。



…怒られないように先に言っておきます。
GPSS1と仕様が大幅に変わりまして、Sockletの互換性がほとんどありません。
スミマセンスミマセンスミマセン


さぁ、地球のみんな、おらにちょっとづつ元気を(コメント欄で)分けてけろ!

ただいま〜

わぁお相撲さんだあ〜と社会人の顔をしつつ内心でははしゃぎまくりで、行ってきましたよ、3つの山(4つ目製造中)を見に!お忙しい中ありがとうございましたm(__)m


はぶさんとお話させていただくと猛烈にやる気が出てきます。発破をかけられたと言うか(笑)後はこのやる気を持続させることが課題です。


とりあえず今日からはOODBに挑戦だ!!(makotanさんにだm..いいふk...説得されました)何にしてもまずは使ってみなければ。

hsqldb1.8.0rc1

おっと、出てたんですね。
早速落としてソース確認してみました。org.hsqldb.Serverに関しては、細かいチューニングが施されてるだけで大幅な変更は無いようです。と言うことは多分1.8.0でもS2HsqldbServerは動くと思われ。
時間を見てテストしてみます。


ん?サイトはrc1になってるけど、落としたファイルはRC2でした。
何かここにきて動きが活発になってきましたね。hsqldbファンとしては嬉しいところです。