コード - みる会図書館


検索対象: UNIX MAGAZINE 2002年5月号
49件見つかりました。

1. UNIX MAGAZINE 2002年5月号

リ 5 に N ー X 2001 AnnuaI Technical Conference らか解決しようとした問題は、 Kaffe のような JIT (Just- In-Time) コンパイラのコード・ジェネレータの生成効率 を高めるガ去である。 JIT コンパイラは効率的なー漣の命 令をすばやく確実に生成しなけ川まならない。命令一覧か らコード・ジェネレータのテープルを生成するという去 は、複雑なうえにエラーにつながりやすい。 しかし、ほとんどのシステムには、コンピュータの命令 セットに精通しているプログラムとして、はしめからアセ ンプラがある。 DERIVE システムは命令シーケンスを生 成し、アセンプラを通してそれらを渡すと、コード・ジェ ネレータが使えるように、命令セットを言当するテープル を生成する。 Hsieh は、 DERIVE がアセンプリ言語の記述にもとづ き、レジスタ・フィールド、オペコード・フィールド、ラ ベルを割り出すために、基本的な命令セットを段階的に調 べる命令シーケンスを繰り返し生成するガ去について説明 した。これには、レジスタソルバ、只町直ソノレヾ、ジャンフ ソノレヾという 3 つの段階がある。 レジスタソルバは、引数を 1 っすっ評価し、すべてのレ ジスタを順番に照合する。 RISC CPU の場合は単純で、 1 回アセンプラに通すだけで分析第甫となるすべてのビット マッフ。か得られる。しかし、 lntel X86 のような複雑な命 令セットでは、レジスタの組 : せかし - ー意のエンコーディン グをもっていたり、違反となる組合せもあるため、組合 ごとにアセンプラを何度も呼び出さなければならない。 即値ソノレヾとジャンプソルバのイ督はみも同しである。レ ジスタソノレヾを呼び出してエンコーディングを得る。即値 ソルバ ( 完全なジャンプも処理する ) は、引数刎甫に線 形検索をかけて最大サイズを割り出したあと、引数のサイ ズを 1 っすっ角夬する。ジャンプソルバもい ] 様の竹喋をお こなうか : 通切なラベルを生成し、サイズの調整をおこな わなけ川まならない。 命令セットの角斤には、エンコーディングの複雑さに応 して、 (lntel X86 アーキテクチャの場合で ) 2 分 30 秒 から 4 日判りかかる。 生成されるテープルは C 言言杉式の構造体のセットで あり、コード・ジェネレータに渡さ C マクロに変換さ れてから最終的なコードが生成される。これらのテープル はしつに効率がよく、 1 日かけて X86 アーキテクチャの Kaffe コード・ジェネレータのサイズを 40 % 削減するこ 168 とができた。 ソースコードは http://www.cs.utah.edu/-wilson derive. tar. gz に置かれている。 スクリプト言語拡弓の士里ムみ型のエラー回復とデパッグ 冓 David M. BeazIey ( シカゴ丿ぐ学 ) スクリプト言語から呼び出された C / C + + のコードに工 ラーがあったらどうなるだろう。通常は、高レベル言語 にエラーがあると、インタープリタカ芍切な形式のバック トレースを提供し、プログラムカ阯まった場所を正確に示 す。同様に、 C のコードがクラッシュした場合はコアダ ンフ。カ甘是供される。これをテンヾッガにかけると適切な形式 のバックトレースが生成さプログラムが止まった場所 が正確に示される。 スクリプト言言去張では、高レベル言語のスタックの低 レベルなバックトレースカ甘是供される。通常は、 3 つか 4 つのインタープリタ・ルーチンが扣度も繰り返されて見分 けのつかなくなった何層もの情報か得られるだけである。 このトレースから有益な情報を探しだすのは難しい。 この間題を解決するため、 WAD (Wrapped AppIica- tion Debugger) を言語拡張として実行し、 SIGSEGV や SIGBUS といった共通トラッフのすべてにシグナル ハンドラを設疋する。例外か発生すると、 WAD がスタッ クを展開し、シンポルやテンヾッグテープルにある利用可能 なテンヾッグ情報をもとに、低レベルコードの情報を生成す 再リンクや別のテンヾッガは必要ない。 とができる。 開し、スタックトレースの組伶迂をプログラマーに渡すこ そうすると、スクリプト言語自体が独自のスタックを展 の情報をエラー文として返す。 スタックフレームに戻されたエラーをシミュレートし、 る。続いて、発見可能な最 E 位のレベルのインタープリタ・ UNIX MAGAZINE 2002.5 ウを開かせる。 Python の場合は、 Python 才長を実行す ハンドラにスタックトレースの組合を表示するウインド 使って要求された例外を発行し、 WAD と Tk のエラー 類お尺するラジオボタンが配置されており、 C の孑劇長を なプログラムが使われた。このウインドウには、例タ P ) 種 演してみせた。 TcI の場合は、 Tk ウインドウを開く小さ 続いて Beazley は、 Tcl と Python 用のテンヾッガを実

2. UNIX MAGAZINE 2002年5月号

連載 /JavaServer Pages—O 図 9 sleep() を追加した不具合のあるコード public int getVa1ue ( ) int count return count 十十 ; try { Thread . sleep ( 5000 ) ; count ; if ( (count=readCounter()) return count ; saveCounter (count) ; } catch (Exception e) { くの { 図 10 counter3. jsp の表祚果 上日 n 版カウンタにの 3 ) ー Netscape 6 ードの E'•をな 1 ′第を ロロコ讐 1 めト : 発 7 ( 5 物前 アクセス数 : 60 排他処理を行っていないカウンタ ホム検索ロプめマーり、を“ 0 籌新着、お勧め、メンバーズ 0 - ファイル ( E ) 編集 ( 日表示検索ジャンプ 0 ブックマーク ( 印タスク (I) ヘルプ ( 印 ーホーム検素うカクマゆ、いを” 0 新着・、おを籌メントオ ~ ファイルの編集 ( 印表示検索ジャンプ 0 プめマーり ( 印タスクヘルフ凹 ロ。ー : ~ ュメント : 発了 ( 5 物 アクセス数 : 60 排他処理を行っていないカウンタ 第同 plication 以外のスコープをもつ場合は、 1 人目のアクセ スと 2 人目のアクセスで、、 this " の実体が違うかもしれな いので、ロックするオプジェクトには別のものを選ぶ必要 排他里の確認 があります。 126 サから 5 秒以内に連続して counter3. jsp にアクセスする を使った、、 counter3. jsp" の表示結果です。 2 つのプラウ 図 10 は、図 9 のコードを組み込んだアクセスカウンタ 示されるはすです。 る不具合が発生し、 1 回目と 2 回目で同じアクセス数カ俵 あいだに別のアクセスが発生すると、アクセス数を間違え この細工によって、アクセス数を処理している 5 秒の 日判勺に停止 ) するようにしました。 Counter() メソッド ) の直前で、 5 秒澗 sleep ( 処理を一 ッドです。ファイルにカウンタ値を保存する処理 (save- 図 9 は、排他処理をおこなっていない getVaIue() メソ まずは、不具合が発生するほうのコードに細工しましょ することです。 し細工し、現象カ起きやすいようにしたうえて動作を石忍 このようなケースでの常套手段は、ソースコードにすこ のか容易には石忍できません。 は、ソースコードの不具合を修正しても正しく動いている うかがタイミングに依存し、現象を再現しにくいケースで アクセスカウンタの例のように、不具合が起きるかど ましよう。 排他処理か期待どおりに動いているかどうか確かめてみ と、図のようにアクセス数か 1 司しになります。 図 11 は、排他処理をおこなったうえで 5 秒間 sleep するようにした getValue() メソッドです。このアクセ スカウンタのコードでも、 1 回目のアクセスから 5 秒以 内に 2 回目のアクセスがあると、同し時刻 ( 時間帯 ) に getValue() の実行か重複します。しかしこのケースでは、 あとからコードを実行しようとしたアクセスが synchr 。ー nized のプロックの直前て待たされます。 その結果、 1 回目のアクセスがファイルにアクセス数を 書き込んだあとでないと、 2 回目のアクセスはファイルか らアクセス数を読みにいかないので、アクセス数は正しく カウントされます。結果として、 2 つの Web プラウサ上 にはそれぞれがアクセスした時点のアクセスカウンタの値 が正しく表示されます ( 図 12 ) 。 Jsp:useBean のお也里 排他処理は、 jsp:useBean を変換した Java プログラ ムのなかでもおこなわれています。 図 13 は、図 4 と同じく jsp:useBean タグを変換した Java のソースコードの一部です。 synchronized プロックは、 ・ pageContext に保存したオプジェクトを取得する ・ pageContext にオプジェクトを保存する という処理が同一アプリケーションにおいて排他的に実行 されることをイ正します。 もし、この部分の処理が排他的に実行されなかった場 合に何カ起きるのカ甘隹測してみましよう。たとえは、 JSP ページへの初めてのアクセスが同時に発生したとします。 UNIX MAGAZINE 2002.5

3. UNIX MAGAZINE 2002年5月号

IANA による旧 v4 IGMP に関する考察 BCP. 、 B. Fenner ( 別称 BCP 57 ) IANA に対し、 IGMP のプロトコルヘッダ内フィー ルド用のレジストリの作成を要求している。点での 最良のガ去 " として 2002 年 2 月に公開された。 BCP シ リーズ (BCP 57 ) としても公開されている。 IGMP ( インターネット・グルーフ。管理プロトコル ) は、 IP マルチキャストのセッション管理用プロトコルである。 RFC3228 では IGMP のプロトコルヘッダ内フィールド 用のレジストリの作成を要求している。また、割当て対象 となるパラメータに関する情報を IANA に提供している。 DNS 関連 RFC3225 lndicating Resolver Support of DNSSEC リカレヾによる DNSSEC サポートの表日月手法 PS. 、 D. Conrad リゾノレヾが DNSSEC をサポートしているかどうかを 明示するための手法を規定している。現在の状態は、、標售 化へ窈是唱 " である。 2001 年 12 月に公開された。 DNSSEC を利用するには、リゾノレヾが DNSSEC RR (Resource Record) を解釈できるかを判断する必要があ る。そこで RFC3225 では、 EDNSO ヘッダ中の 1 ヒ、ツ トを使って、明示的に DNSSEC サポートを提示するた めのガ去を提案している。そのうえで、プロトコルの変更 が必要な点を規定している。 RFC3226 DNSSEC and lPv6 A6 aware server/resolv- er message Size requlrements DNSSEC および v6 A6 向けサーパー / リゾノレヾ・メッ セージ長に関する要求事項 PS. 、 0. Gudmundsson ( RFC2535 、 RFC2874 更新 ) DNSSEC や IPv6 A6 RR をサ永丁トする DNS サー バーおよびリゾルバに対するメッセージ長に関する要求事 項を規定している。現在の状態は、、標準化への提唱 " であ る。 RFC2535 、 RFC2874 を更辛斤する RFC として 2001 年 12 月に公開された。 RFC3226 では、 DNS の才長にともなうメッセージ長 の増大を踏まえ、 ENDSO の利用を必頭とする提案をして いる。 RFC2535 および RFC2874 に処するサー ノヾ とリカレヾについて、以下の事項を規定している。 176 ・ RFC2535 に準拠するすべての DNS サー ーおよび リゾノレヾで EDNSO をサポートし、メッセージ長を最 低でも 1 , 220 オクテット以 - E にする (MUST)0 可能 であれはメッセージ長は 4 , 000 オクテットと広告する (SHOULD)0 ・ RFC2874 に処するすべての DNS サーバーおよび リゾルバで EDNSO をサポートし、メッセージ長を最 低でも 1 , 024 オクテット以にする (MUST)0 可能 であればメッセージ長は 2 , 048 オクテットと広告する (SHOULD)0 ・ RFC2535 および RFC2874 に準拠するエンティティ は、 IPv4 および IPv6 の断片化された UDP バケット を扱えるようにする (MUST)0 ・ RFC2535 および RFC2874 の両方をサポートするす べてのホストは、 EDNSO 広告値の要求よりも大きな値 を利用する (MUST)0 電子メール関連 RFC3206 The SYS and AUTH POP Response Codes POP 応コード、、 SYS " および、 AUTH ' PS. 、 R. Gellens 訒証の失敗によるエラーに対応する 2 不頁の POP 応 答コード (SYS および AUTH) と、認証に失敗した原 因を通知するための AUTH-RESP-CODE ケーパビリ ティを定義している。現在の状態は、標準化 , 、ク是唱 " で ある。 2002 年 2 月に公開された。 RFC2449 では、クライアントに対するエラー応答用の POP ) 芯答コードとして IN-USE 、 LOGIN-DELAY が 定義されている。 RFC3206 では、これらの応答コードで は表現できない状況を通知するために、新たに SYS およ び AUTH を規定している。 応答コード SYS は、システムエラーによる認証の失敗 を通知する。副応答コードとして TEMP ( 一日判勺失敗 ) 、 PERM ( 永続的失敗 ) が用意されている。 SYS はすべて の -ERR 応答内てイ吏用できる。 施コード AUTH は、パスワードの誤り、アドレスの 失効など、ユーサー側の認証の失敗を通知する。 AUTH 、 USER 、 PASS 、 APOP に対する一 ERR 応答で使用でき る。 AUTH 応答に対応しているサーバーでは、 ・ CAPA コマンドをサポート (SHOULD) UNIX MAGAZINE 2002.5

4. UNIX MAGAZINE 2002年5月号

連載 JavaServer Pages—O 図 7 同時アクセスがするとアクセス数の里を誤る ① 1 人目のアクセスカウンタ値 readCounter() count 十十 saveCou nter() カウンタ値 ② 2 人目のアクセス -1- CV 1 -1 ・ワ」 CV readCounter() count 十十 ー saveCounter() 2 2 図 8 排他里を追加した Counter2 クラスの getValue() public int getVa1ue ( ) int count このとき、 2 人目のアクセスによる処理が readC 。 unt ー er() を実行し終えたとします。 1 人目のアクセスによるカ ウンタ値はまだアクセスカウンタのファイルに保存されて いないので、 2 人目がアクセスしたときも readCounter() カ芍区す値は、、 1 " です。したがって、、、 count 十十 " を実行 したあとの 2 人目のカウンタ値も 2 です。 このように、 getVaIue() か 1 司時に実行されると、タイ ミングによっては複数の人に同じアクセスカウンタ値を表 示してしまいます。 さらに、 1 人目がアクセス数をファイルに保存するとき には正しく、、 2 " 呆存されますが、 2 人目はもともと正し いアクセス数を取得できていないので、ファイルにも誤っ は、 synchronized のプロックに入るときに、 object が た値である、、 2 " を保存します。 ロックされていないかどうかを卩十ヾ、 このように、図 5 のコードでは、同時アクセスが発生し ・ロックされていなければ、ロックして、、排他的に実行 たときにアクセス数をカウントしそこねる可能生がありま されるコード " を実行 す ( 図 7 ) 。 ・ロックされていればロックカ埆早除されるまで待つ synchronized というように重川します。 この不具合を解決するためには、 1 人目のアクセスカワ これを利用して、 getVaIue() メソッドを書き換えてみ ァイルからアクセス数を読み出してふたたびファイルに保 ましよう。図 8 は、アクセス数を読み込む readCount- 存するまで、 2 人目のアクセスがファイルからアクセス数 er() から、保存する saveCounter() の呼出しまでを排他 を読み出さないようにする必要があります。 的に処理するように書き換えたコードです。 ーー級にこのような処理 ( 里と呼ばさまざまな synchronized でロックするオプジェクトは、 1 人目の 手法があります。 Java ではオプジェクトをロックして排 アクセスでも 2 人目のアクセスでも、同一のものが参照さ 他処理を寒見する方法を言言」として提供しています。 れるオプジェクトであればなんでもかまいません。ここで は、、、 this " オプジェクト、すなわち jsp:useBean で生成 synchronized ( 0 り ec の { した ac オプジェクトを使いました。 排他的に実行されるコード ただし、 ac オプジェクトが page スコープなどの叩ー synchronized (this) { if ( (count=readCounter() ) くの { count 十十 ; saveCounter (count) ; return count ; 125 UNIX MAGAZINE 2002.5

5. UNIX MAGAZINE 2002年5月号

連載 /JavaServer Pages— public void init ( 引数 1 , 引数 2 , public Abc() 引数 1 , 引数 2 , ・・・に関する処理 Abc クラスを呼び出す JSP ページの書き方の違いもみ てみましよう。 もとの引数付きのコンストラクタの場合、 jsp:useBean タグは利用できないので、オプジェクトを作るときにはス Abc d = new Abc( 引数 1, 引数 2 , く % クリプトレットを使います。 プジェクトを作る JSP のスクリプトレットのコードは次 作り替えた JavaBean 版の Abc クラスを使うと、オ d. init ( 引数 1 , 引数 2 , Abc d = new Abc(); く % のようになります。 124 •-s jsp:useBean の本体をスクリフ counter2. jsp のように スするメソッドとして書き換えられるのなら、図 6 の もし、 init() メソッドの部分をプロバティにアクセ く /jsp:useBean> d. init( 引数 1, 引数 2 , く % く Jsp:useBean id="d" c1ass="Abc" scope= Bean タグを使って書き換えると、次のようになります。 そこで、上記のスクリプトレットのコードを jsp:use- か、あるいはこれらの組合であってもかまいません。 ・文字列 ・ HTML のタグ ・式タグ ・スクリプトレット 体に言当する内容は、 体に jsp:setProperty タグを使っていますが、タグの本 図 6 の counter2. jsp の例では jsp:useBean タグの本 トレットではなく、 jsp:setProperty などのプロバティを 操作するタグに置き換えることもできます。 また、 く Jsp:useBean id="d" cIass="Abc" scope="session" > く b > セッション開始 ! く /b> く br> d. init( 引数 1, 引数 2 , く % 排イ也処理 ザに表示します。 セスしたときだけ、 く /jsp:useBean> セッション開始 ! " の文字列をプラウ のような JSP コードは、同一のセッションて初めてアク readCounter() で読み込んだ値が、、 1 " だったとします。 たとえは、 1 人目のユーサーがアクセスしたときに return count ; saveCounter (count) ; C ount 十十 ; return count ; if ( (count=readCounter ( ) ) くの { int count ; public int getVa1ue ( ) コードを見てみましよう。 ここでもう一度、 Counter2 の getValue() メソッドの クラスの処理か 1 司時に実行されます。 のページに複数の人が同時にアクセスすると、 Counter2 セス要求を並列に処理します。したがって、 counter2 ・ jsp 通常、 Web サーバーは受け取った Web ページへのアク きるのか JSP ページに同時にアクセスしたとき何が起 ります。 も Web のプログラミングにありがちな大きな不具合があ ここて紹介した 2 不鶤頁のアクセスカウンタには、いずれ によって 1 人目のカウンタ値は、、 2 " になります。 count 十十・ すると、 UNIX MAGAZINE 2002.5

6. UNIX MAGAZINE 2002年5月号

連載 /JavaServer Pages— tiate(this. getC1ass() . getC1assLoader() , r. Counter1") ; は、 Beans クラスの instantiate() メソッドを使って、 counter ℃ ounterl クラスのオプジェクトを生成していま す。このコードは、クラスか存在しないなどの理由でオプ ジェクトの生成に失敗したときに、コンパイルエラーでは なく例外か発生することを除けは次のコードと同じです。 ac = new counter. Counterl() ; アクセスカウンタ・オプジェクトの生成に成功すると、 16 行目に制御が移り、生成したオプジェクトを page- 'counte ・ setAttribute() ・ getAttribute() です。ただし、 定した場合でも、変換後の Java の実装は基本的には同し jsp:useBean タグで application 以タトのスコ プジェクトは次回以降のアクセスで参照されます。 Context に保存します。すでに説明したとおり、 ープを指 このオ 今回はファイルの入出力処理を含むため、 Counter1. java 保存する Java のソースコード、、 Counter2. java" です。 図 5 は、ファイルを利用してアクセスカウンタの値を アクセスカウンタ JavaBean ( その 2 ) スカウンタを作り、 JSP ファイルから呼び出してみまし るために、アクセス数をファイルに保存するようなアクセ 保存していたアクセス数を忘れてしまいます。これを避け ト述のアクセスカウンタは、 Web サーバーを止めると ファイルを利用したアクセスカウンタ スコープになります。 に渡すスコーフ窈旨定が、 jsp:useBean タグて指定された UNIX MAG AZINE 2002.5 ・ value プロバティの値を取得するメソッド (getVal- ・用 e プロバティの値を設定するメソッド ・引数をもたないコンストラクタ Counter2 クラスは、 よりはすこし複雑です。 (setFile()) をもつ JavaBean です。 setFile() は、アクセス数尉寺するファイルのパスを 設定するメソッドです。引数として渡されたファイルのパ スは counterFiIe 変数に保存さアクセス数の取得など の目的でファイルにアクセスするときに参照されます。 getValue() はファイルに保存されていたアクセス数 ではなく、現在 ( 更新後 ) のアクセス数を返します。 get- Value() の内部では次の処理をおこないます。 1. readCounter() を呼び出し、ファイルに保存されてい たアクセス数を count 変数に設定する。 2. readCounter() はエラーの発生時には負の値を返すの で、その場合はそのままメソッドを抜ける。 3. count 変数の値を 1 増やし、今回のアクセスぶんをア クセス数に反映させる。 4. saveCounter() を呼び出し、更新後の ( 新しい ) アクセ ス数をファイルに保存する。 5. メソッドの戻り値として更新後のアクセス数を返す。 アクセス数をファイルから読み込んだり、ファイルに 保存する処理は、 readCounter() と saveCounter() で おこなっています。 readCounter() のコードを追ってみましよう。 read- Counter() では counterFile をオープンし、読み込んだ 値か数字列であればその値を返します。 counterFile の読 込みに失敗したり、数字 : 列以外の値が保存されている場合 には、言ムみに失敗したことを意味する負の値 ( ー 1 ) を返 します。 saveCounter() のコードでは、 counterFile を書込み 用にオープンし、引数として受け取ったアクセス数を書き 込んでいます。 こまでで、アクセスカウンタ JavaBean の処理は理 解できたでしようか。続いて、この JavaBean を呼び出 す JSP ファイルについてみていきます。 jsp:useBean タクの本体 図 6 は、アクセスカウンタとして Counter2 クラス を使う JSP ファイル、、 counter2. jsp" です。これまでみ てきた jsp:useBean タグとの大きな違いは、タグに本体 ( b 。 dy ) があることでしよう。 jsp:useBean タグは、 121

7. UNIX MAGAZINE 2002年5月号

島慶ー 旧 v6 バケットの出力処理 この連載でとりあげている KAME プロジェクトの IPv6 スタックは、 4 不頁の BSD (NetBSD 、 FreeBSD 、 OpenBSD 、 BSD/OS) を対象としています。これらは 開発用とリリース用のソース木が用意されていることが多 く、実際にはさらに不頁か増えます。もちろん、開発用な どを含めたすべての BSD に対応させることは不可能です から、 KAME では基本的に最新のリリース版に対象を絞 っています。 UNIX MAGAZINE 2002.5 kame sys netinet6/ip6-output. c ( 改言丁番号 1.289 ) ー ァイルを参照します。 今回は、 IPv6 バケットの出力処理に関係する以下のフ 今回参照するファイル 大きさの違いだけか理由ではないのかもしれません。 カーネノ功長をよく目にするのは、たんにコミュニティの カ觝いようです。 BSD のカーネル拡張よりも Linux の 点、カーネルが一兀管理されている Linux は開発の障壁 ル拡張が、以前よりも困難になったことは事実です。その かもしれません。しかし、各種の BSD を横断したカーネ のすべてに共通するコードを糸旧寺する必はなくなったの 各 BSD のコミュニテイか拡大した現在では、これら はとんどの ifdef を省略しているだけです。 BSD 用に切り分けられています。解説の妨げになるため、 ようにみえますが、実際はたくさんの ifdef でそれぞれの いる KAME コードは、そのまま各 BSD に適用できる ドを簡単には取り込めなくなっています。ここで紹介して れぞオリ虫自に改良や拡張か加えらお互いのソースコー スコードを起源としています。しかしながら、現在ではそ これらの BSD のネットワーク・コードは、同じソー ・ kame/sys/netinet6/ip6-var. h ( 改言丁番号 1.89 ) IPv6 バケットの出力処理 IPv6 バケットは、 ip6-output 関数での処理を経てネッ トワークに出ていきます。 ip6-output のおもな処理を以 下に示します。 、ツダの前処理 巨大ペイロード・オプションの処理 長へッダの挿入 ・出力インターフェイスの決定 ・バケットの分割 ・バケット出力ルーチンの呼出し それでは ip6-output の詳細をみていきましよう。以 下、ファイル名を明記していないコードは ip6-output ・ c ファイルのものです。 ip6-output は 6 つの引数をもちます。最後の 1 つは 糸情報のための引数ですから、実際は 5 っと考えても差 支えありません。 235 int 236 ip6—output ()O , 237 238 240 244 245 246 struct struct struct opt, ro, flags, im60, ifpp) mbuf *mO ; ip6-pktopts *opt ; route * て 0 ; int flags ; struct ip6—moptions *im60 ; struct ifnet **ifpp, / * XXX: just for statistics * / m0 旨定される mbuf には、出力する IP'S ケットが オ内されます。 57

8. UNIX MAGAZINE 2002年5月号

連載 /JavaServer Pages—O jsp:useBean タグに文寸応する Java のソースコード 図 4 1 / / begin [file="/counterl . jSP";fr0m=(11,0);t0=(11,66)] counter. Counter1 ac = Ⅱ u11 ; 2 boolean —jspx—specialac = false; 3 synchronized (application) { 4 ac= (counter . Counterl) 5 pageContext . getAttribute ( "ac" ,PageContext . APPLICATION-SCOPE) ; 6 if ( ac = null ) { 7 ー」 spx—specialac 8 try { 9 10 true ; (counter. Counter1) java. beans . Beans. instantiate(this. getC1ass() . getC1as sLoader ( ) , 'counter . Counterl") ; } catch (C1assN0tFoundException exc) { throw new InstantiationException(exc. getMessage ( ) ) ; } catch (Exception exc) { throw new Serv1etException ( " Cannot create bean Of class " + " counter. Counter 1 亠、 1 イ 1 イ上 exc) ; pageContext . setAttribute("ac" 15 16 17 18 if (—jspx—specialac 19 20 / / end 21 / / begin [file="/counterl . jsp";from=(11,0) ; t0 = ( 11 , 66 ) ] 22 23 / / end jsp:useBean の実装 (Tomcat 4.0.3 ) というメソッドが返すイ直が設定されます。 pageContext は、 JSP ページに関連した情報を提供するオプジェクト jsp:useBean タグの部分が、 JSP 工ンジンで実行され で、 1 月号で説明した暗黙オプジェクトの pageContext るときにどのような Java のソースコードに変換されるの そのものです。ここでは、 pageContext に保存されてい かみてみましよう。図 4 は、 counterl. jsp の、 る、、、 ac" という名則の application スコープをもつオプ ジェクトを返しています。 く jsp:useBean class="counter. scope="application" / > pageContext にオプジェクトを保存しているのは、も うすこし先の 16 行目のコードです。 の部分に対応する Java のソースコードです。 pageContext . setAttribute ( " ac , PageContext . 2 行目で定義している counter ℃ ounterl クラスの変 APPLICATION_SCOPE) ; 数 ac は、 JSP ページの jsp:useBean で定義した ac オ setAttribute() は getAttribute() の逆の操作にあた プジェクトを表しています。 り、 ac オプジェクトに、、 ac " という名前を付け、 appli- 5 ~ 6 行目では、アクセスカウンタのオプジェクトが保 cation スコープをもつオプジェクトとして pageContext 存されていれば、それを ac 変数に設定しています。ただ に保存しています。 し、初めて JSP ページにアクセスしたときには、まだア 初めて JSP ページにアクセスしたときには、 5 ~ 6 行目 クセスカウンタ・オプジ - ェクトが保存されていないため、 で ac 変数に null か轂定されるので、 7 行目の if 文の中 ac 変数には null か設定されます。 身か実行されます。 if 文のなかでは、アクセスカウンタ・ この処理をもうすこし詳しく追ってみましよう。 ac 変 オプジェクトを生成して ac 変数に設定しています。 数には 6 行目の、 オプジェクトの生成に見慣れないガ去カイ吏われています れ 10 行目の、 pageContext . getAttribute ( "ac " ,PageContext . APPLI (counter. Counter1) java. beans . Beans. instan CATION_SCOPE) ; ac , PageContext . APPLICATION—SCOPE) ; true) { 120 UNIX MAGAZINE 2002.5

9. UNIX MAGAZINE 2002年5月号

N EWS •Sun 団 traSPARC ーⅱ e で 995 ドルのサーバー 米 Sun Microsystems は、エントリレ 「 Sun Fire V100 」の販 べノレのサーノヾー 売を開始した。 Netra XI の後継となる IU サーバー CPU は、 2 次キャッシュが 256KB の UI - traSPARC—IIe ( 500MHz ) 。主記匱 (ECC 付き PC133 DIMM) は最大 2GB0 内蔵 HD (3.5inch IDE) は最大 2 台 ( 7 , 200rpm の 40GB HD が標準 ) 。 CD-ROM ドライ プを内蔵。 I/F は、 10Base T/100Base TX 、 RS232C / RS423 (RJ45) X2 、 USB x2 など。設定情報を書き込んだ交換可 能なシステム設定力ードをもつ。電源は 90 ~ 264V ACO OS は SoIaris 8 ( 2 / 02 ) Update 7 。 LOM (Lights—Out Management) およ ■ RationaI リレタイム・ソフトウェア統合開発環境 米 Rational Software (TeI 03-5642 ー 9106 : 日本ラショナルソフトウェア ) は、 リアルタイム・ソフトウェア開発用の統合 サポート型ライフサイクル管理システム を発表した。 同社の各種ソフトウェア製品を組み合 わせて、ソフトウェア開発の統合的なラ イフサイクル管理ができる。開発 / テス トツール「 Rational Rose RealTime 」、 コードベースの自動化テスト / 実行時分析 ツール「同 Test RealTime 」を統合し、 UML モデルによる実行結果の提供が可 能。これらと、ソフトウェア構成管理ツー ル「同 ClearCase 」、アクテイピティ管理・ ■工クセルソフト Java べースの ASP 工ンジン 工クセルソフト (Tel 03 ー 5440 ー 7875 ) は、米 Halcyon Soft の ASP (Active Server Page) 工ンジン「 lnstant ASP 2.0 」の販売を開始した。 Java VM 上で動作する ASP 工ンジン。 ASP を Java バイトコードに変換するプ リコンパイラをもつ。 JScript/VBScript 5.5 との互換性がある。 ADO 、 CDO をサ •Caldera Open UNIX 8 用クラスタシステム カルデラ (Tel 03 ー 5486 ー 3906 ) は、 Open UNIX 8 用の拡張ソフトウェア 「 ReliantHA RI. 1.2 」の販売を開始した。 OpenUNIX8 にクラスタ機能を付加す SecureSheII 3 コ SSH コミュニケーションズ・セキュリ ティ (Tel 03 ー 3459 ー 6830 ) は、暗号化ソフ トウェア、、 SSH Secure Shell 3.1 日本語 18 るソフトウェアで、ノード数は 2 ~ 4 。バ ージョンアップにより、 OpenUNIX8 の Linux アプリケーション互換機能 LKP (Linux Kernel Personality) をサポート。 ESSH 版〃の販売を開始した。 おもな新機能は以下のとおり。 1 ) SSH Certifier 、 RSA Security Keon び ASR (Automatic Server Restart) ソ フトウェア、 iPlanet Web Server Enter- prise Edition 6.0 、 Sun ChiIi!Soft ASP Software 、 Apache が付属。 外形寸法 (HxWxD) は 4.4 (1U)x 43.7 X 48.3cm 、重量は 6kgo 価格は 995 ドルから。 障害管理ツール「同 ClearQuest 」、チー ムペースの要求管理ツーノレ「同 Requisite Pro 」を統合し、要求事項やテストアセッ トの追踴 ; が可能。 動作環境は、各種 UNIX 、 Linux 、 Windowso 価格は、 Rose ReaITime と Test ReaI Time を統合した「 Rational ReaITime Professional Bundle 」が 12 , 990 ドル ( 1 ノードロック・ライセンス ) から。 ポートし、拡張 ADO データベース・コネ UNIX MAGAZINE 2002.5 トを追加 Certificate Status Pr0toc01) のサポー ンラインで間い合わせる OCSP (OnIine 運用性をテスト済み。証明書の状態をオ スマートカード、認証トークンとの相互 PKI などの PKI 認証局 (CA) や、各種 の電子メールによるサポート ) 。 ス・エディションと ReliantHA 、 60 日間 円 ( 2 ノードぶんの Open UNIX 8 ピジネ ReIiantHA クラスタバック」は 830 , 000 ージ製品「 Open UNIX 8 用 2 ノード ノヾツウ - 価格は 450 , 000 円 ( 1 ノード ) 。 560 , 000 円。 Alpha 、 RS ー 6000 プラットホーム用が ム用が 140 , 000 円、 SPARC 、 MIPS 価格は、 lntel 、 PowerPC プラットホー 対応プラットホームは JDK 1.1.8 以上。 クタ、 CORBA コネクタを実装。

10. UNIX MAGAZINE 2002年5月号

連載 /JavaServer Pages—O 図 6 アクセスカウンタを呼び出す JSP ファイル (counter2 ・ jsp) く % page contentType="text/htm1 ; charset=EUC-JP" % > く % page import="counter. * " % > く ! DOCTYPE HTML PUBLIC " -//W3C//DTD HTML 4 . 0 Transitiona1//EN"> く html> く head> く meta http—equiv="Content—Type" content="text/html ; charset=EUC¯JP"> く tit1e>JavaBean 版カウンタ ( その 2 ) く / title > く /head> く body> く Jsp:useBean class="counter. Counter2" scope= application' > く jsp:setProperty property="file" va1ue="/usr/10ca1/tomcat¯4.0.3/var/AccessCounter' く /jsp:useBean> アクセス数 : く j sp : getProperty name="ac " property="value" / > く /body> く /html> く jsp:useBean 本体・・・ く /jsp:useBean> UNIX MAGAZINE 2002.5 く」 sp : getproperty name="ac " property="value'i / > ウントするための処理を呼び出さなくても、 のなかでアクセス数を更新しているので、アクセス数をカ 今回の JavaBean のコードは、 getValue() メソッド おいてください。 存先のファイルは事前に用意して初期値 0 を設定して ファイルのパスを指定しています。なお、アクセス数の保 グをすることで、オプジェクトの生成時に 1 度だけ 図 6 では、 jsp:useBean の本体に jsp:setPropertY タ すればよいことになります。 ルのパスは、オプジェクトを生成したときに 1 度だけ定 はありません。したがって、アクセス数の保存先のファイ 目のアクセスかによって、言求するファイルを変えること に同しファイルに言当求することを前提としています。舸 Counter2 のアクセスカウンタでは、アクセス数をつね れません。 行さそれ以後は JSP ページにアクセスしても実行さ 後、最初に JSP ページにアクセスしたときに 1 度だけ実 コープをもっオプジェクトの場合、 Web サーバーの起動 るときに 1 度だけ実行されます。つまり、 application ス 置くことかできます。このコードはオプジェクトを生成す のように、開始タグと終了タグのあいだに本体のコードを によって、現在 ( 更新後 ) のアクセス数が表示されます。 Java クラスを JavaBean に作り替える Java で作ったクラスを jsp:useBean タグで呼び出せ るようにするには、引数をもたないコンストラクタが必要 です。引数付きのコンストラクタをもつ Java クラスを JavaBean として扱いたい場合は、コンストラクタを作り public Abc( 引数 1, 引数 2 , たとえば、 替える必要があります。 を実行する init() メソッドに分けることができれば Java ー のような引数をもたないコンストラクタと、初期化の処理 たとえば、さきほどの引数付きのコンストラクタを、次 に分解します。 メソッド ・もとのコンストラクタでおこなっていた処理を実行する ・引数をもたないコンストラクタ ストラクタを、 ます。このクラスを JavaBean にするには、もとのコン のようなコンストラクタをもつ Abc クラスがあったとし Bean の出来がりです。 123