Home > Seasar

Seasar Archive

Cubby 1.0.0-RC1 リリース


Cubby 1.0.0-RC1がリリースされました。詳細はid:agtさんのCubby 1.0.0-RC1 リリース案内をどうぞ。今回のバージョンから@Urlアノテーションが@Pathと@Acceptに変更・分割されたので、既に使っていた方は書き換える必要があります。@AcceptはPOSTやGETなどのリクエストメソッドを限定する新しい仕様なので、今までと同じPOSTもGETも区別しない挙動で良ければ、@Urlを@Pathに置換でサクっと書き換えるだけでOK。

Cubby + S2ContainerのHot deploy, publicフィールド, Beans, S2JDBC + Mayaaがちょうど良い


ってのを長々書いてたものの、Mailmanの対応してる時に書いてたやつ誤って消してしまった。。短く書くと、今までAbstractActionとかCommonAction、Dto、Dxo、Service、Logicとかいろいろ冗長に書いてたけど、僕みたいに一人で作るならここまでがっちり組まなくても良かったんだなーっと思ったという内容。もちろん複数人だったり作るアプリによってはそっちの方が適してる場合も有り。1個づつ良いと思ったことも書いてたけどもう1回書くの面倒なので以下省略。

あと12/30日にCubbyに入門して、上記の組み合わせ – S2JDBC + S2Directory使った小さなアプリが1/2に完成して昨日の夜から配備したよってのもあった。

Mailman難しい


Mailman.Handlers.ToDigestがエラー吐かずにCPU食いまくってロック握ったまま落ちるものの、次のキュー処理し続けてる(ロックは解除されてないのでそのまま無限ループ)のは原因探すの難しいです。

対処方法は、$MAILMAN_HOME/lists/ML名/digest.mbox をリネームしました。

この問題が実は配送遅延してた原因の1つでもあるような気がするので、そっちも解決したならめでたしめでたし。

Cubby入門中


CubbyのRESTっぽいURIが個人的に激しく良いです。でも、Actionの単体テストがどうしたら良いかよくわからないです。org.seasar.cubby.examples.todo.action.LoginActionに対して次のようなテストを書くと。

public class LoginActionTest extends S2TigerTestCase {
    private LoginAction loginAction;

    protected void setUp() throws Exception {
        include("app.dicon");
    }

    public void testLogin() {
        loginAction.sessionScope = new HashMap<String, Object>();
        loginAction.userId = "test";
        loginAction.password = "test";
        loginAction.process();
        assertEquals(1, loginAction.sessionScope.size());
    }
}

次のぬるぽが出ちゃってテスト出来ません。

java.lang.NullPointerException
    at org.seasar.cubby.controller.impl.ActionContextImpl.getAction(ActionContextImpl.java:63)
    at org.seasar.cubby.controller.impl.ActionContextImpl.getFormBean(ActionContextImpl.java:92)
    at org.seasar.cubby.interceptor.InitializeInterceptor.setupForm(InitializeInterceptor.java:68)
    at org.seasar.cubby.interceptor.InitializeInterceptor.invoke(InitializeInterceptor.java:43)
    at org.seasar.framework.aop.impl.NestedMethodInvocation.proceed(NestedMethodInvocation.java:53)
    at org.seasar.framework.container.customizer.AspectCustomizer$LookupAdaptorInterceptor.invoke
      (AspectCustomizer.java:195)
    at org.seasar.cubby.examples.todo.action.LoginAction$$EnhancedByS2AOP$$787d6a$$MethodInvocation$$process2.proceed
      (MethodInvocationClassGenerator.java)
    at org.seasar.extension.tx.RequiredInterceptor.invoke(RequiredInterceptor.java:48)
    at org.seasar.cubby.examples.todo.action.LoginAction$$EnhancedByS2AOP$$787d6a$$MethodInvocation$$process2.proceed
      (MethodInvocationClassGenerator.java)
    at org.seasar.cubby.examples.todo.action.LoginAction$$EnhancedByS2AOP$$787d6a.process
      (LoginAction$$EnhancedByS2AOP$$787d6a.java)
    at org.seasar.cubby.examples.todo.action.LoginActionTest.testLogin(LoginActionTest.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at junit.framework.TestCase.runTest(TestCase.java:168)
    at org.seasar.framework.unit.S2FrameworkTestCase.doRunTest(S2FrameworkTestCase.java:519)
    at org.seasar.extension.unit.S2TestCase.doRunTest(S2TestCase.java:103)
    at org.seasar.framework.unit.S2TigerTestCase.doRunTest(S2TigerTestCase.java:82)
    at org.seasar.framework.unit.S2FrameworkTestCase.runBare(S2FrameworkTestCase.java:308)
    at org.seasar.framework.unit.S2TigerTestCase.runBare(S2TigerTestCase.java:66)
    at junit.framework.TestResult$1.protect(TestResult.java:110)
    at junit.framework.TestResult.runProtected(TestResult.java:128)
    at junit.framework.TestResult.run(TestResult.java:113)
    at junit.framework.TestCase.run(TestCase.java:124)
    at junit.framework.TestSuite.runTest(TestSuite.java:232)
    at junit.framework.TestSuite.run(TestSuite.java:227)
    at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:76)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

とりあえずValidationだけをテストするか、Helper MethodもしくはServiceとして実装してそっちでテストかな?。SAStrutsだと返り値がパスを表したStringなので単体テストしやすいです。

と、RESTっぽいURIを持つCubbyとSAStruts の良いとこどりがあれば良いのかも?

S2Directory 0.6, S2DirectoryTiger 0.6, S2DirectoryGenerator 0.2 リリース


なんだかんだで予定より3週間も遅れてしまいましたが無事リリースできました。

この日記を見られているか判りませんが、今回のリリースまでに多くのバグ・要望を出していただいた鈴木さん(MLより)、海野さん(MLより)ありがとうございました。さらに、S2DirectoryTigerのベースとなったソースコードをご提供いただいたid:shot6さんありがとうございました。

  • 今回のリリースに関して

S2Directory 0.5 以前はコネクションの解放に問題があるため、今回リリースした 0.6 を利用することをお奨めします。

今回のリリースによる大きな機能追加として、SSL/TLS接続とATTRIBUTE/COLUMNアノテーションが利用できるようになりました。また、実験的にコネクションプーリング機能を追加しました。

  • 設定参考: http://s2directory.sandbox.seasar.org/ja/documentation/configuration.html
    • directory.dicon に設定が必須ではない設定項目が追加されました。
      • 新しい機能を利用しない場合、今までと同じ設定で問題ありません。
    • directorydao.dicon に設定項目が増えました。
      • 独自に directorydao.dicon をカスタマイズしている場合、修正が必要です。多くの場合、directorydao.dicon は独自に用意する必要はありません。

また、S2DirectoryTigerを併用することで、Tigerアノテーションを利用できるようになりました。

  • それぞれのダウンロードはこちらからどうぞ。

http://s2directory.sandbox.seasar.org/ja/downloads.html

  • Maven2からのご利用はこちらを参照ください。

http://www.seasar.org/wiki/index.php?Maven2RepoRemote

  • S2Directoryプロジェクトサイト

http://s2directory.sandbox.seasar.org/

バグや不具合などあれば、この日記かMLまでご連絡よろしくお願いします。

S2Directory 0.6 リリース準備中


準備中にちょっとバグっぽいのがあって時間が無くなりました。結局バグではなく現状で問題なかったので、家に帰ってご飯とお風呂入ってまったりして、日が変わった頃にリリースします。Mavenリポジトリにはもうあったりします。

あと、リリース手順忘れてちょっと悩んだ。

S2Daoの開発リポジトリ


うわーー。

じゃなくて

こっちだったのか・・・。

ここ3日間で前者に併せてS2Directoryのソース直してしまった。。そして、いろいろ直したのは直す前の方が新しいかったっぽい。。

DaoMetaDataFactoryImplにHotDeploy用のinitializedが無くなってておかしいなと思いつつ、S2Container側でなんか対応したのが入ったのかなと思いS2Directory修正してたのがやっぱしHot deployでエラー吐くから気付いた。。

うーん、以前の状態に戻したいけど、その間にSSL/TLS対応とかいろいろ入れたからぐちゃぐちゃになっちゃいそうだ。1からまた直そう。

[16:12追記] 元に近い形に戻ってとりあえずHot deployで動くようになった。0.6-SNAPSHOTでMavenにSNAPSHOTをdeploy済み。

Mavenにハマる: mvn testとmvn deploy


日付超える前にコードは出来てたのになぜかMavenが言うこと聞かなかった。

  • 症例1: 同じソースが違うマシンでmvn testが失敗する
    • 例外: There are some test failure.っと普通にテストに失敗
    • 解決方法: ローカルにキャッシュされてる$M2_REPO\org\apache\maven 以下をすべて削除

  • 症例2: 同じソースが違うマシンでmvn deployが失敗する
    • 例外: Connection timed out: connect
      • [INFO] Repository ‘maven.seasar.org’ will be blacklisted
    • 解決方法: ローカルリポジトリ全部削除しても未だ解決せず…

症例1と症例2が2台のマシンで別々に問題だったため、どっちからもmvn deployが出来ないという罠にはまりました。結局症例1が解決したのでそっちのマシンでdeployしました。症例2はまだ未解決。

[12/10 16:16追記] ファイアウォールのせいだった。リモートデスクトップで作業してた時はポップアップが表示されないらしい。

HDD破損


RAID-1になってた160GB HDDの1台が壊れたので交換しました。たくさん使える在庫HDDが最近世代交代して500GBなので、新品じゃなくて引退したサーバで使ってた160GB HDDを流用しました。

そのため、流用したHDDにRAID Unitの情報が残ってて、RAIDカード上でどっちが生かしたいHDDかちょっと悩みました。間違って選んだら全部消えちゃうので。。結局、片方ずつ接続と認識状態確認して無事復旧しました。

ついでにVLAN設定も綺麗に直そうかと思ったけど上流スイッチの設定が古いままなの忘れてて時間掛かりそうだったのでまた今度にしました。

DevLoader改変、Mayaa対応編


昨日のDevLoader改変により、最近のSeasarを使ったプロジェクトに対応したものの、今日いざ自分のMayaaを使ったプロジェクトのjarファイルをMavenで管理させたら見事に上手く動きませんでした。

というわけでMayaaに対応しました。既に昨日のdevloader-3.2.1ex.jarを使ってみちゃっている方はもう一度同じファイル名のファイルを下記より落とし直してください。

今回の改変版を使わなくてもデプロイ自体は一見上手くいきます。でも、ページレンダリング時にMayaa以外のTaglib(StrutsとかJSTL)のタグがあると、デプロイ時のMayaaのTLD検索でMavenで管理したjarファイルが見えていないためエラーになります。

なのでTLDファイルだけをjarファイルから抜き出してWEB-INF/以下とかに配置しても解決するんですが、それもちょっと面倒だったり、使ってるjarとTLDでバージョンの差異が出たりすると面倒なので、Mavenで管理しているjarファイル内のTLDファイルを使えるようにしました。

解決方法にはシステムプロパティを使いました。どうやって対応しようか悩みながらMayaaのTLD検索してるクラスを見てたら、org.seasar.mayaa.impl.builder.library.scanner.ResourceScannerがjava.class.pathというシステムプロパティに書かれているjarファイルを参照していたので、これにDevLoaderで追加されるMavenリポジトリにあるjarファイルのパスを追加しています。また、複数プロジェクトがある時でもそのプロジェクトで使われているjarファイルだけを追加しているので衝突しておかしくなることもないです。

java.class.pathというグローバルなプロパティを使うのはちょっと抵抗があるかもしれないけど、DevLoaderは開発時だけなので問題ないと思います。

ホーム > Seasar

検索
フィード
メタ情報

Return to page top