ふたつの川うるおう日記
2006-09-03 (Sun)
_ [Java][Seasar] S2Directoryにcommons-codecいらなかった
見落としてたのか、以前上手くいかなくて諦めたのか、S2ContainerにBase64Utilなんてのがあるんですね。これがあると、commons-codecいらなかった・・・。
それで試しに入れ替えてみたら上手く動かない。commons-codecと比べてみると、次のようなコメントがあり、BASE64で期待しない文字を除外するようになってました。
// RFC 2045 requires that we discard ALL non-Base64 characters
で、じゃあ同じようにすれば良いんだと、BASE64で期待しない文字を除外するパッチを書いてみたら上手くいったヽ(´ー`)ノ。
でもよくよく考えるとおかしい。だって、S2Directoryでdecodeに渡す文字列は絶対encodeされた文字列だったりする。なので、本来なら期待しない文字なんて含まれる筈がない。。それで良くみたら原因判りました。SMD5とSSHAのラベル名( {SMD5}, {SSHA} )を渡す時に誤って、{MD5}と{SHA}を渡してました。そのため、decodeに渡される文字列の先頭に必ず } が入ってました・・・。というわけで、それ直したらS2ContainerのBase64Utilで問題無く動きました。
それで、BASE64で期待しない文字を除外するのはRFC 2045で要求されてるのかどうか確認して、要求されてるならパッチを投げようと確認ー。たぶん、1. Introductionのところの下記の部分だと思うんだけど、「規定する」と書かれた後に、「かなり不適当であるといえる」って、、、。
The limitations of RFC 822 mail become even more apparent as gateways are designed to allow for the exchange of mail messages between RFC 822 hosts and X.400 hosts. X.400 [X400] specifies mechanisms for the inclusion of non-textual material within electronic mail messages. The current standards for the mapping of X.400 messages to RFC 822 messages specify either that X.400 non-textual material must be converted to (not encoded in) IA5Text format, or that they must be discarded, notifying the RFC 822 user that discarding has occurred.
RFC 822 メッセージへの X.400 メッセージのマッピングのための現在の
標準は、X.400 非テクストのマテリアルが IA5Text フォーマットに変換さ
れる(中で符号化されない)か、または、それらが RFC 822 ユーザに処分
が起こったことを通知したうえで処分されなければならないと規定する。だ
がこれはユーザが受け取ることを望むかもしれない情報が失われるので、か
なり不適当であるといえる。たとえユーザエージェントが非テクストのマテ
リアル(textual)を扱う機能を持っていなくても、ユーザは UA のために外
部のあるメカニズムを持つことができマテリアルから有益な情報を抽出でき
る。更にそれは結局メッセージが非テクストの情報が明確に再び有益になる
(すなわちX.400メッセージはインターネットメールを経て "トンネリング"
される)X.400メッセージ操作システムにゲートウェイされるかもしれない
という事実を考慮しない。〔訳注:この辺の訳は難しい〕
とってもこのパッチいらない気がしてきたので、放置(;´Д`)。ちなみにJDKに付いてるsun.misc.BASE64Decoderも除外処理してない。というよりKodersでざっと見た感じ、だいたい除外処理してない。
そんなこんなで無駄なことをした1日かと思ったけど、自分の潜在的なバグが見つかったのでまぁ良かった。
_ [Java][Seasar] RESTConnectorでパラメータ名を指定
先日のS2Axis2 で Amazon WEBサービスを使うために書いたやつがたかのりさんに取り込んでいただけましたー、ありがとうございます(´ー`)。
2006-09-11 (Mon)
_ [大学] tex
しばらく音信普通でした。今はちょっとtexと格闘してます。締め切り明日。
全然別件だけど、なんかRHEL5がインストーラでXenやGFSが選べるみたいで超楽しそう。GPFSとGFSで迷ってたけどこうなるとGFSかなぁ。
_ [Admin][Seasar][Project] Subversion 1.4.0について
互換性は保たれているようですが、クライアント側で利用者の多いSubclipseとTortoiseSVNが正式に1.4.0相当版がリリースされて問題なさそうなのを確認してからアップデート考えたいと思います。
2006-09-15 (Fri)
_ [大学] 新メールアドレス
なかなか素敵な仕様になってるっぽいです。メアドが自由になるのは良さそうですが、それが実質メインメールアドレスになるので、いろいろ付随して問題がありそうで、今日話した中でも思いついた致命的な問題を言ってみたらそれはかなりまずいですねってことになりました。移行直後は混乱して、しばらくしてなぁなぁになって、最終的に逆戻りしてしまうかもしれません。また、せっかく複数台サーバあるのにクラスタリングしてないのでユーザごとに接続先が違うみたいです。
僕にコンサルやらしてください(汗。独自プログラム開発とか余計なことしないでも、ディレクトリ設計からクラスタリングまで全部綺麗に出来るのにー。
[追記] まぁ文句言ってもしょうがないので、全学システムにちょっかい出せるように来週から画策してみようかな(゜ー゜)。全学の方々と仲良くなると、イベントやる時とかにいろいろ環境面で協力してもらえそうだしー。
2006-09-17 (Sun)
_ [Server][Admin][Java] Subersion 1.4.xとTortoiseSVN, Subclipseについて
Subersion 1.4.xに上げても、TortoiseSVN, Subclipseを各々使うのであれば、バージョンを上げなくても問題はないです。ただし、現在TortoiseSVNには、1.4.0が既にリリースされていて、一旦このバージョンでsvn updateやcommitするとworking copyのformatが4から8になってしまうので、この状態になるとSubclipseでは認識できなくなっちゃうみたいです。具体的には次のようなことをするとダメです。
- サーバ側のSubversionを1.4.xへアップデート
- Subclipse 1.0.3でチェックアウト
- チェックアウトしたファイルを編集
- TortoiseSVN 1.4.xでコミット
- 以降、チェックアウトしてあるworking copyをSubclipseで操作不能
Subclipseがたまにおかしくなってコミット出来なくなった時に、TortoiseSVNでコミットするとかやることがあるので、Subclipseが1.4.xに対応するまではバージョン上げるとマズそうです。もちろんSubclipseでチェックアウトしたのは、Subclipseのみでコミットしていれば大丈夫です。
ちなみにSubclipseは次期バージョンとしてSubclipse 1.2.xが開発中みたいです。こっちがformat 8に対応するのかな。
2006-09-18 (Mon)
2006-09-20 (Wed)
_ [Seasar][Java] S2StrutsV1.3.0-beta-2に入れ替えてみる (解決)
解決: 僕の凡ミスでしたー。
入れ替えてS2StrutsV1.3.0-beta-2用というか、S2Container 2.4.0 rc2用にごにょごにょdiconファイル書き換えて動かしてみると、COOL時OKになった状態で、HOT時にTooManyRegistrationRuntimeExceptionきちゃった(;´ー`)。
たぶん、diconファイルの書き方をどっか間違えてるか、またいつものURIどうにかするお手製の怪しいs2struts-qualifiedのどっかがいけないんだと思う。もう2時なので明日また考えよう。明日から大学後期講義開始。基本ゼミだけなのであんま関係ないけど(´ー`)。
とりあえずエラーログだけ貼り。
DEBUG 2006-09-20 01:53:21,937 [http-8080-Processor24] BEGIN org.seasar.struts.hotdeploy.ReloadFindActionConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@df090d)
DEBUG 2006-09-20 01:53:21,937 [http-8080-Processor24] Initializing module path '' configuration from '/WEB-INF/struts-config.xml'
DEBUG 2006-09-20 01:53:21,953 [http-8080-Processor24] BEGIN org.seasar.struts.lessconfig.hotdeploy.OndemandFindActionConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@df090d)
DEBUG 2006-09-20 01:53:22,031 [http-8080-Processor24] auto create ActionConfig[path=/util/user/search,name=posixAccountDto,parameter=method,scope=request,type=org.seasar.server.members.web.util.UserSearchAction,validate=false,cancellable=false
DEBUG 2006-09-20 01:53:22,031 [http-8080-Processor24] auto create ForwardConfig[name=result,path=/util/userSearch.html,redirect=false,contextRelative=false,module=null]
DEBUG 2006-09-20 01:53:22,031 [http-8080-Processor24] END org.seasar.struts.lessconfig.hotdeploy.OndemandFindActionConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@df090d) : ActionConfig[path=/util/user/search,name=posixAccountDto,parameter=method,scope=request,type=org.seasar.server.members.web.util.UserSearchAction,validate=false,cancellable=false
DEBUG 2006-09-20 01:53:22,031 [http-8080-Processor24] END org.seasar.struts.hotdeploy.ReloadFindActionConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@df090d) : ActionConfig[path=/util/user/search,name=posixAccountDto,parameter=method,scope=request,type=org.seasar.server.members.web.util.UserSearchAction,validate=false,cancellable=false
DEBUG 2006-09-20 01:53:22,031 [http-8080-Processor24] BEGIN org.seasar.struts.hotdeploy.ReloadFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@67aece)
DEBUG 2006-09-20 01:53:22,031 [http-8080-Processor24] Initializing module path '' configuration from '/WEB-INF/struts-config.xml'
DEBUG 2006-09-20 01:53:22,046 [http-8080-Processor24] BEGIN org.seasar.struts.lessconfig.hotdeploy.OndemandFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@67aece)
DEBUG 2006-09-20 01:53:22,062 [http-8080-Processor24] auto create FormBeanConfig[name=posixAccountDto,type=org.seasar.server.members.dto.PosixAccountDto]
DEBUG 2006-09-20 01:53:22,062 [http-8080-Processor24] END org.seasar.struts.lessconfig.hotdeploy.OndemandFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@67aece) : FormBeanConfig[name=posixAccountDto,type=org.seasar.server.members.dto.PosixAccountDto]
DEBUG 2006-09-20 01:53:22,062 [http-8080-Processor24] END org.seasar.struts.hotdeploy.ReloadFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@67aece) : FormBeanConfig[name=posixAccountDto,type=org.seasar.server.members.dto.PosixAccountDto]
DEBUG 2006-09-20 01:53:22,062 [http-8080-Processor24] BEGIN org.seasar.struts.hotdeploy.ReloadFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@41986c)
DEBUG 2006-09-20 01:53:22,062 [http-8080-Processor24] Initializing module path '' configuration from '/WEB-INF/struts-config.xml'
DEBUG 2006-09-20 01:53:22,078 [http-8080-Processor24] BEGIN org.seasar.struts.lessconfig.hotdeploy.OndemandFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@41986c)
DEBUG 2006-09-20 01:53:22,078 [http-8080-Processor24] auto create FormBeanConfig[name=posixAccountDto,type=org.seasar.server.members.dto.PosixAccountDto]
DEBUG 2006-09-20 01:53:22,078 [http-8080-Processor24] END org.seasar.struts.lessconfig.hotdeploy.OndemandFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@41986c) : FormBeanConfig[name=posixAccountDto,type=org.seasar.server.members.dto.PosixAccountDto]
DEBUG 2006-09-20 01:53:22,078 [http-8080-Processor24] END org.seasar.struts.hotdeploy.ReloadFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@41986c) : FormBeanConfig[name=posixAccountDto,type=org.seasar.server.members.dto.PosixAccountDto]
2006-09-20 01:53:22,078 [http-8080-Processor24] WARN org.apache.struts.action.RequestProcessor - 処理できない例外がスローされました: class org.seasar.framework.container.TooManyRegistrationRuntimeException
2006-09-20 01:53:22,078 [http-8080-Processor24] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/members].[action] - サーブレット action のServlet.service()が例外を投げました
org.seasar.framework.container.TooManyRegistrationRuntimeException: [ESSR0045]interface org.seasar.server.members.web.util.UserSearchActionに複数のコンポーネント(org.seasar.server.members.web.util.impl.UserSearchActionImpl, org.seasar.server.members.web.util.impl.UserSearchActionImpl)が登録されています
at org.seasar.framework.container.impl.TooManyRegistrationComponentDefImpl.getComponent(TooManyRegistrationComponentDefImpl.java:45)
at org.seasar.framework.container.impl.S2ContainerImpl.getComponent(S2ContainerImpl.java:113)
at org.seasar.struts.pojo.PojoProcessAction.execute(PojoProcessAction.java:61)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.seasar.struts.processor.InternalS2RequestProcessor.processActionPerform(InternalS2RequestProcessor.java:112)
at org.seasar.struts.processor.InternalS2RequestProcessor$$EnhancedByS2AOP$$157211f.processActionPerform$$invokeSuperMethod$$(InternalS2RequestProcessor$$EnhancedByS2AOP$$157211f.java)
at org.seasar.struts.processor.InternalS2RequestProcessor$$EnhancedByS2AOP$$157211f$$MethodInvocation$$processActionPerform4.proceed(MethodInvocationClassGenerator.java)
at org.seasar.struts.pojo.processor.ProcessSetInputPathActionPerformInterceptor.invoke(ProcessSetInputPathActionPerformInterceptor.java:33)
at org.seasar.struts.processor.InternalS2RequestProcessor$$EnhancedByS2AOP$$157211f$$MethodInvocation$$processActionPerform4.proceed(MethodInvocationClassGenerator.java)
at org.seasar.struts.processor.InternalS2RequestProcessor$$EnhancedByS2AOP$$157211f.processActionPerform(InternalS2RequestProcessor$$EnhancedByS2AOP$$157211f.java)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.seasar.struts.processor.InternalS2RequestProcessor.process(InternalS2RequestProcessor.java:61)
at org.seasar.struts.processor.DelegateRequestProcessor.process(DelegateRequestProcessor.java:53)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:46)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.seasar.struts.filter.S2StrutsFilter.doFilter(S2StrutsFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:63)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
[18:48追記] 僕の凡ミスでした。
自分で書いたURLのパスからアクションクラスのコンポーネント名に変換する処理のところで、web.util.UserSearchActionってあった時に、util_UserSearchActionと変換してました。HOT deploy時に自動的に登録されるコンポーネント名は、util_userSearchActionと、_の次は小文字だったので、コンポーネント名でgetComponentDefした際に見つからずにHotdeployBehavior#registerMap()が2回走ってしまい、TooManyRegistrationRuntimeExceptionが出てました。
というわけで、URLのパスからアクションクラスのコンポーネント名に変換結果をutil_userSearchActionになるようにしたら上手く動きました。
S2Container 2.4.0 rc1の時に上手く動いてたのは、その時は、2重登録してもS2ContainerImpl.createTooManyRegistration()が実行されていなかったからのようです。なので、たまたま見た目上問題無く動いてたと。。
_ [Java][Seasar] S2StrutsQualified 0.7 beta 2
対応したのをアップ。
2006-09-22 (Fri)
_ [Java][Seasar] S2Directory 0.3.1 Released
前回からだいぶ時間が経過したのでリリースしました。ちょっとミスって0.3をリリースした後にすぐに0.3.1をリリースしました。
- 0.2.2 > 0.3.1 での変更点
- Maven 2.x に対応しました
- 拡張用にDirectoryAnnotationReaderFactoryを追加しました
- 拡張用にDirectoryValueTypeFactoryを追加しました
- commons-codecの依存関係を無くしました
- S2Container 2.4.0 rc 2に対応しました
- S2Container 2.3.11でも動作します
- S2Container 2.4.x 用 Creator を追加しました
- directorydao.dicon ファイルをjarファイルに含めるようにしました
- 現在お使いの directorydao.dicon ファイルを削除する(推奨)か、新しいものに入れ替える必要があります。
- 型を判別する際にスーパークラスも調べるように修正しました
- 型を判別する際にインターフェイスも調べるように修正しました
これで一旦区切れたので今後はトラッキングを使うようにしよう。
2006-09-25 (Mon)
_ [大学] 新メル鯖
5:00時点でなんかもう入れ替わってるみたいなので試してみた。とりあえずSMTPがポート25でSTARTTLS + SMTP AUTHに対応してて素敵です。SMTPS,POP3S,IMAPSも動いてる。いろいろいじってたら隠し仕様(もしくは設定ミスっぽいの)を2個見つけたりもしました(゜∀゜)。
数日様子みて、直らなかったら指摘しよ。
そんでもってDNSの設定がおかしいYo。うちから大学のドメインの正引き全滅してる。何台かあるDNSサーバのsoa見ると、Serialが違うの返してるから同期取る設定(TSIGかDNS NOTIFY)でもミスってるのかな。
[追記] こ、これは。土日にメール受信してない人は永遠に自分の新メアドとメールサーバ判らないのかw。そんでもって、学外から繋がらない。。。ポート空けろー。
旧メールサーバの正引き、DNSサーバによっては引けてるし。これはDNSの同期の問題っぽい。とりあえず土日にメール受信してない && 旧メールサーバが正引きできない人は、旧WEBメールで見れるっぽい。新WEBメールは?「Internal Server Error」です_| ̄|○。
だめだめー・・・。大学行こう。
[追記] 大学来て、その後も見つけた不具合が10個になり、もうぼろぼろなので報告してきました。半分ぐらいは認識してて、使えない下請けに振りまわれているようでかなり可哀相な感じでした。行く前からそんな予感がしてたので、超丁寧にお伝えしてお役にたてたらと。安定するまでしばらく時間がかかりそうですが、気長に待ちましょう。




_ たかのり [提供ありがとうございました。取り込みが遅くなってすみません(^^;]
_ jfut [取り込みありがとうございます(´ー`)。]