<?xml version="1.0" encoding="utf-8" ?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" 
			xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" 
			xmlns:cc="http://web.resource.org/cc/" xml:lang="ja">
<channel rdf:about="http://nossie.blog71.fc2.com/?xml">
<title>ふらふら技術者の日記</title>
<link>http://nossie.blog71.fc2.com/</link>
<description>いい感じのWebサイトやプログラムを応援したり、使えるプログラミングテクを紹介したり…ふと感じた数学チックなテーマとか……本人の備忘録だったり…。</description>
<dc:language>ja</dc:language>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://nossie.blog71.fc2.com/blog-entry-47.html" />
<rdf:li rdf:resource="http://nossie.blog71.fc2.com/blog-entry-46.html" />
<rdf:li rdf:resource="http://nossie.blog71.fc2.com/blog-entry-45.html" />
<rdf:li rdf:resource="http://nossie.blog71.fc2.com/blog-entry-44.html" />
<rdf:li rdf:resource="http://nossie.blog71.fc2.com/blog-entry-43.html" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://nossie.blog71.fc2.com/blog-entry-47.html">
<link>http://nossie.blog71.fc2.com/blog-entry-47.html</link>
<title>GlassFish v2.1 の encodeURL で jsessionid が付加されない。</title>
<description> v3で解決されるみたいだけど、取り敢えず今はv2.1を使っているのでメモ。
[glassfish: Issue 3972] HttpServletResponse.encodeURL() unconditionally appends jsessionid if session is newly created
てか、これはさすがに、ちょい問題あるバグと思う…GlassFish に変えたら DoCoMo のユーザがみんなログイン出来なくなっちゃった…みたいになるわけだから…。

コメント頂きました。v2.1でも修正されているようです。
 </description>
<content:encoded>
<![CDATA[ <p>v3で解決されるみたいだけど、取り敢えず今はv2.1を使っているのでメモ。</p>
<div><a href="https://glassfish.dev.java.net/issues/show_bug.cgi?id=3972">[glassfish: Issue 3972] HttpServletResponse.encodeURL() unconditionally appends jsessionid if session is newly created</a></div>
<p>てか、これはさすがに、ちょい問題あるバグと思う…GlassFish に変えたら DoCoMo のユーザがみんなログイン出来なくなっちゃった…みたいになるわけだから…。</p>
<hr/>
<ins cite="http://nossie.blog71.fc2.com/blog-entry-47.html#comment" datetime="2009-10-07T01:26:00+09:00" style="display:block;"><p>コメント頂きました。v2.1でも修正されているようです。</p></ins> ]]>
</content:encoded>
<dc:subject>プログラミング関連</dc:subject>
<dc:date>2009-09-18T13:24:50+09:00</dc:date>
<dc:creator>憂鬱ノッシ</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://nossie.blog71.fc2.com/blog-entry-46.html">
<link>http://nossie.blog71.fc2.com/blog-entry-46.html</link>
<title>SQLのプロファイラ？</title>
<description> MySQL で 流れたクエリを見たりログを取るにはどうすれば？って話。

そもそも、以前会社で Microsoft SQL Server を使わされてた。で、それにはプロファイラ ってプログラムが同梱されてて、それを使えば出来た。Windows の [スタートメニュー] から [すべてのプログラム] と辿っていくだけで見つかるのでメチャ分かり易い所にある。 (とは言え会社では新人研修で習わないツールは皆使わないので意味無いけど…)　で、MySQL でも
 </description>
<content:encoded>
<![CDATA[ <p>MySQL で 流れたクエリを見たりログを取るにはどうすれば？って話。</p>

<p>そもそも、以前会社で Microsoft SQL Server を使わされてた。で、それにはプロファイラ ってプログラムが同梱されてて、それを使えば出来た。Windows の [スタートメニュー] から [すべてのプログラム] と辿っていくだけで見つかるのでメチャ分かり易い所にある。 (とは言え会社では新人研修で習わないツールは皆使わないので意味無いけど…)　で、MySQL でも当然出来るはず～と思って調べたら…なかなか出てこない。</p>

<p>どうも、 Enterprise 版なら分析ツールがついてくるらしいけど… Enterprize 版はお金の無い人は自力でビルドせなならん。で、金は無い！ビルド？ふん！根性はもっと無い！とふてくされていたら……発見！…運はあったみたい！</p>

<p> my.iniファイルの [mysqld] の後に mysqld を立ち上げる時に渡すパラメタを書けるのかな？なので、そこに <code>log</code> って一行を書き込めば、--log が渡され、<code><em>machinename</em>.log</code>が MySQL のどっかのフォルダに出来るみたい。めでたし、めでたし。ちなみに、MySQL のマニュアルによると、このログはクエリがサーバに到着した時点で記録する、で、その他にも更新が完了する直前に書き込むバイナリログなんてのもある。なるほど…。</p>
<hr/>
<p> てか、そもそもなんでこんなにSQLのログ取りを熱心にしてたかというと、Glassfish で JDBC レルムによる認証を試してたんだけど、何故か認証されない。Glassfish はデータベースの管理者にすらパスワードを分からなくする MD5 等を使ったパスワードの照合をサポートするので、もしかしてその機能を殺せてないのか？？とか思ったりして、流れてる SQL を調べようって事になったわけ…。</p>
<p>で、結局、調べて見たらユーザ名が違ってた、、、dummy と dumy。今時、パソコン初心者でも自分のユーザ名は忘れない…。なんにせよ、今は happy を haapy と間違えた知り合いを笑えない…。</p>
 ]]>
</content:encoded>
<dc:subject>プログラミング関連</dc:subject>
<dc:date>2009-09-12T15:37:40+09:00</dc:date>
<dc:creator>憂鬱ノッシ</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://nossie.blog71.fc2.com/blog-entry-45.html">
<link>http://nossie.blog71.fc2.com/blog-entry-45.html</link>
<title>asadmin start-domain が終わらない</title>
<description> glassfish 2.1 の asadmin start-domain からの応答が一切返ってこない…。全自動でサーバを立ち上げたい人達(おいらだけ？)の怒りのメモ。

結論から言えば、原因は分かったけど対策があるのかどうかは分からない。

ちなみに、以下はおいらが glassfish の開発コミュニティ宛に出したバグレポート。…今回も中学生レベルの英語で果たして通じるのだろうか…。合言葉は「コードは世界を繋ぐ共通言語」、ほれ！for(int i=0; i
 </description>
<content:encoded>
<![CDATA[ <p>glassfish 2.1 の <code>asadmin start-domain</code> からの応答が一切返ってこない…。全自動でサーバを立ち上げたい人達(おいらだけ？)の怒りのメモ。</p>

<p>結論から言えば、原因は分かったけど対策があるのかどうかは分からない。</p>

<p>ちなみに、以下はおいらが glassfish の開発コミュニティ宛に出したバグレポート。…今回も中学生レベルの英語で果たして通じるのだろうか…。合言葉は「コードは世界を繋ぐ共通言語」、ほれ！<code>for(int i=0; i<3; i++) you.turn(); you.say("wan!");</code> …ちなみに
<a href="http://nossie.blog71.fc2.com/blog-entry-24.html">前回</a>は、苦闘しながらも何とか通じた…果たして今回は？ …異国の技術者達へ毎度毎度、本当にすみません。</p>

<div>
<a href="https://glassfish.dev.java.net/issues/show_bug.cgi?id=9443">[glassfish: Issue 9443] asadmin start-domain does not return control.</a>
</div>

<p>どういうバグかの興味はあるけど、おまえの間違いだらけの英語なんぞ読めるか…という賢明な方々は、追記でまだマシなニホンゴを披露しているのでそちらを参照。</p> ]]>
</content:encoded>
<dc:subject>プログラミング関連</dc:subject>
<dc:date>2009-09-12T00:21:38+09:00</dc:date>
<dc:creator>憂鬱ノッシ</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://nossie.blog71.fc2.com/blog-entry-44.html">
<link>http://nossie.blog71.fc2.com/blog-entry-44.html</link>
<title>GlassFishでファイルレルム</title>
<description> Java EE でのログイン処理について全然知らず、ちょっとはまったのでメモ。

まず、Java EE におけるログイン処理(認証)はどうも Java EE の仕様で標準化されている部分とそうでない部分があるみたい。なので、生真面目に JSR をいくら眺めてても全容は掴めないし、GlassFish や Tomcat のマニュアルと睨めっこしてても片手落ちになる。

どうも、こうした構成になっているのは、認証結果と認証用のインタフェースに関しては共
 </description>
<content:encoded>
<![CDATA[ <p>Java EE でのログイン処理について全然知らず、ちょっとはまったのでメモ。</p>

<p>まず、Java EE におけるログイン処理(認証)はどうも Java EE の仕様で標準化されている部分とそうでない部分があるみたい。なので、生真面目に JSR をいくら眺めてても全容は掴めないし、GlassFish や Tomcat のマニュアルと睨めっこしてても片手落ちになる。</p>

<p>どうも、こうした構成になっているのは、認証結果と認証用のインタフェースに関しては共通の枠組みで利用しよう、だけど認証の方法や個人データの扱いはコンテナのメーカ側にまかせよう…と言う事らしい。これによって、Kerberos 認証等の様々な認証に対応出来るっぽい…。</p>

<p>で、メモのため GlassFish のファイルレルムとフォーム認証の組み合わせを例に説明。</p>
<hr/>
<p>まず、Java EE で決められている部分。</p>
<dl>
  <dt>web.xmlの認証に関する部分</dt>
  <dd>
    <pre><code>&lt;security-constraint&gt;
    &lt;web-resource-collection&gt;
        &lt;web-resource-name&gt;Authentication of FormAuth&lt;/web-resource-name&gt;
        &lt;url-pattern&gt;/userOnly.jsp&lt;/url-pattern&gt;
    &lt;/web-resource-collection&gt;
    &lt;auth-constraint&gt;
        &lt;role-name&gt;<span style="background-color:#FDD">testers</span>&lt;/role-name&gt;
    &lt;/auth-constraint&gt;
&lt;/security-constraint&gt;
&lt;security-role&gt; 
    &lt;role-name&gt;<span style="background-color:#FDD">testers</span>&lt;/role-name&gt; 
&lt;/security-role&gt; 
&lt;login-config&gt;
    &lt;auth-method&gt;FORM&lt;/auth-method&gt;
    &lt;form-login-config&gt;
        &lt;form-login-page&gt;/<span style="background-color:#AEF">login.jsp</span>&lt;/form-login-page&gt;
        &lt;form-error-page&gt;/login_err.html&lt;/form-error-page&gt;
    &lt;/form-login-config&gt;
&lt;/login-config&gt;</code></pre>
  </dd>
  <dt>ログインページ(<span style="background-color:#AEF">login.jsp</span>)の一部</dt>
  <dd>
    <pre><code>&lt;body&gt;
    &lt;div&gt;login&lt;/div&gt;
    &lt;form method="post" action="j_security_check"&gt;
        &lt;table&gt;
          &lt;tr&gt;
            &lt;td&gt;ID&lt;/td&gt;
            &lt;td&gt; &lt;input type="text" name="j_username"/&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;Pass&lt;/td&gt;
            &lt;td&gt;&lt;input type="password" name="j_password"/&gt;&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/table&gt;
        &lt;input type="submit" value="Login" name="submit"/&gt;
        &lt;input type="reset" value="Reset" name="reset"/&gt;
    &lt;/form&gt;
&lt;/body&gt;</code></pre>
    <p><code>j_security</code> 等のj_で始まる名前はどうも予約されているみたい。</p>
  </dd>
</dl>
<hr/>
GlassFish 特有の部分
<dl>
  <dt>ユーザとグループの追加</dt>
  <dd>
<p>GlassFish の管理画面から[セキュリティ]→[レルム]→[file]→[ユーザ管理]</p>
<a href="http://blog-imgs-34.fc2.com/n/o/s/nossie/img5.png">
<img alt="説明用画像" src="http://blog-imgs-34.fc2.com/n/o/s/nossie/img5.png" style="width:20em;"/>
</a>
<p>ユーザ(tester)とグループ(<span style="background-color:#AFA">testers</span>)を追加</p>
<a href="http://blog-imgs-34.fc2.com/n/o/s/nossie/img6.png">
<img alt="説明用画像" src="http://blog-imgs-34.fc2.com/n/o/s/nossie/img6.png" style="width:20em;"/>
</a>
<p>※ 初期設定のままならデフォルトレルムは"file"になっているので上記設定だけで問題なし。(変更している場合は[セキュリティ]画面のデフォルトレルムから変更可能)</p>
<p>※ 上記作業は<code>asadmin create-file-user</code>からも可能</p>
  </dd>
  <dt>グループとロールを結びつける (sun-web.xml)</dt>
  <dd>
<pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd"&gt;
&lt;sun-web-app error-url=""&gt;
    &lt;context-root&gt;/web&lt;/context-root&gt;
        &lt;security-role-mapping&gt;
        &lt;role-name&gt;<span style="background-color:#FDD">testers</span>&lt;/role-name&gt;
        &lt;group-name&gt;<span style="background-color:#AFA">testers</span>&lt;/group-name&gt;
    &lt;/security-role-mapping&gt;
&lt;/sun-web-app&gt;</code></pre>
  </dd>
</dl>
<p>ちなみにおいらは最後の作業を忘れてはまった…。グループがロールの別名だと思ってたわけ。…すると"リクエストされたリソースへのアクセスが拒否されました"って403エラー！になるわけですなこれが…。ふぃ～。</p>
 ]]>
</content:encoded>
<dc:subject>プログラミング関連</dc:subject>
<dc:date>2009-09-03T18:08:27+09:00</dc:date>
<dc:creator>憂鬱ノッシ</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://nossie.blog71.fc2.com/blog-entry-43.html">
<link>http://nossie.blog71.fc2.com/blog-entry-43.html</link>
<title>AbstractXXX で実装の差を吸収</title>
<description> 今までおいらが思いつかなかっただけで常套手段な気もする…。
…けど他で見ないし…といった感じのメモです。

 List の場合は AbstractList 、 Map の場合は AbstractMap のように AbstractXXX と名前の付くクラスがある。これらは、主に各インタフェースの実装補助に使われる。…で、今日、&quot;監視コレクション&quot;を作っていて、他にもメソッドの集中管理のための使われ方がある気がした…。

まず、実装補助について。AbstractXXX 
 </description>
<content:encoded>
<![CDATA[ <p><strong>今までおいらが思いつかなかっただけで常套手段な気もする…。<br/>
…けど他で見ないし…といった感じのメモです。</strong></p>

<p> List の場合は AbstractList 、 Map の場合は AbstractMap のように AbstractXXX と名前の付くクラスがある。これらは、主に各インタフェースの実装補助に使われる。…で、今日、"監視コレクション"を作っていて、他にもメソッドの集中管理のための使われ方がある気がした…。</p>

<p>まず、実装補助について。AbstractXXX はクライアントのための補助的なメソッドを、幾つかのコアメソッドを使って提供する。そのため、実装に必要な作業はこれらのコアメソッドの提供だけになる。</p>

<p>次に、メソッドの集中管理について。</p>

<p>順を追って説明すると、こうした使い方を考えるきっかけは、上でも触れたように監視コレクション(Observable Collection)の実装を考えていた時。監視コレクションとは、要素が追加や削除される時にそのお知らせ(追加イベント、削除イベント)を希望したクライアントに流すコレクションの事。で、この監視コレクション、実は Java SE 6 では提供されていない…。何故提供しないのかと言うと…、</p>
<cite><a href="http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/collections/designfaq.html">Java コレクション API の設計に関する FAQ</a></cite>
<blockquote>
<dl>
<dt>修正されたときにイベントを送出する被監視コレクションを提供しないのはなぜですか。</dt>
<dd>
主に、リソースの制約によります。そのような API に取り組むのであれば、万人に役立つものでなければならず、また長期の使用に耐えるものでなければなりません。このような機能も提供していく予定です。それまでの間、public の API の上にそのような機能を実装するのは難しいことではありません。
</dd>
</dl>
</blockquote>
<p>という事らしい。…前半はそうか…色々事情があるのか…あんたも大変だな…と思う部分だけど、引っかかったのは、<q>public の API の上にそのような機能を実装するのは難しいことではありません。</q>の部分。ん？そんなに簡単に出切る？と一瞬フリーズ…。</p>

<p> 例えば、追加イベントを提供したい場合、追加を行うためのメソッドは複数ある。コレクション本体からの add や addAllメソッド、iterator側からの addメソッド。で、重要なのは、メソッドは他のメソッドに処理を丸投げしてるかもしれないし、それぞれ個別に処理を行っているかもしれない。継承を使うにせよ委譲を使うにせよ、継承先や委譲先の実装は知ることが出来ない(知るべきでない)ため、これらを知ることは出来ない。そのため、どのメソッドを監視すればいいのかも分からない。委譲の場合、全メソッドを監視すればいいんだけど、それも AbstractXXX を一から作るのと同じ位の手間が…。</p>

<div style="width:476px;text-align:center;margin:1ex 0;">
<img src="http://blog-imgs-24.fc2.com/n/o/s/nossie/img3.png" alt="説明用画像 "/>
<br/>[ 怠けて監視漏れが出るケース ]
</div>

<p>と思ったのもつかの間、AbstractXXX をラッパに使えばいいと気づく！そうすれば、AbstractXXX のコアメソッドを基に全ての処理が構築される。そこさえ監視しておけば、委譲先がどんな処理をしていても気にする必要が無い。めでたし、めでたし。</p>

<div style="width:476px;text-align:center;margin:1ex 0;">
<img src="http://blog-imgs-24.fc2.com/n/o/s/nossie/img4.png" alt="説明用画像 "/>
</div>

<p> 思うに、こうした使われ方を考慮すると、"インタフェースの完璧な実装をクライアントに提供出来るのなら、AbstractXXX が必要ない" という事は無くなる。たとえインタフェース内のメソッドを完璧に実装したクラスがあったとしても、クライアントはそこに監視系の機能を追加する可能性がある。そうなると、メソッドの集中管理が必要になるため、AbstractXXX が役に立つ。なので、そうした可能性が高い場合は、予めインタフェースと共に AbstractXXX も提供しておくと親切かも…ってメモ。 </p> ]]>
</content:encoded>
<dc:subject>プログラミング関連</dc:subject>
<dc:date>2009-08-17T01:01:41+09:00</dc:date>
<dc:creator>憂鬱ノッシ</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
</rdf:RDF>