SAStruts Extension Component (sastruts-extension) とは?SeasarプロジェクトのWebフレームワーク SAStruts (Super Agile Struts) の拡張コンポーネントです。 といっても・・・そんな大袈裟な機能はありません。 SAStruts でシステム構築する際の良い意味で「おまけ的な存在」でありたいと思います。 現在(0.1版)の機能としては下記のみです。 [対応済み機能]Actionアクセスコントロール機能アノテーションを用いて、Actionクラス(または実行メソッド)毎にアクセスコントロール(事前処理)を設定できます。 アプリケーション標準の事前処理は dicon にデフォルト設定することも可能です。 public class IndexAction { @Auth(type = AuthType.APPEND, p
Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode
SAStrutsは開発者の技術スキルをそのまま移行できるように作られてます。 でも、普通のStrutsは設定しても全く動かないわけです。 struts-config.xmlとか普通に書いても動かない。 そこでSAStrutsでStrutsの設定のまま普通のStrutsが動くようにしてみました。 ダウンロードはここ↓ sa-struts-aos.jar ソース付です。 ちなみにSAStrutsAOS(sa-struts-aos)と名づけました。 AOSはAdditional Original Styleの略。 英語的に正しいかは英語が全然出来ないのでわかりません。 Append Old Strutsでもいいです。 ■微妙な点 ・Strutsで設定された部分についてはHotDeploy出来きない。 (SAStruts定義部分はHotDeploy出来るよ) Seasarコンテナにも登録されていま
Java仕事で各種フレームワークを比較検討したので、比較用に作った参考資料を公開します。ちなみに現在私は、ドワンゴさんの社内システム開発をお手伝いしてまして、その一環で調べたものです。会社資料じゃなく、私の資料ということでブログで公開してよい、むしろしとけ、とのことなので公開しときます。 今回の案件向けにアプリケーションを画面層コンテナ層データアクセス層に分けて、それぞれフレームワークを選ぶのが目的です。コンテナ層はDIコンテナのうちいずれか、データアクセス層はO/Rマッパーを選ぶことになります。 太枠の範囲が選定対象です。よく本に出てくる杓子定規な階層図とは変えてあります。 次のものを比較検討しました。画面層SAStrutsApache Wicket(ほかにもTeedaとかClick Frameworkとかももともとは候補にあったが、調査が追いつかないので二つに絞った)コンテナSeasa
ただの備忘録です。JDK 1.5 環境にて SAStruts を利用することになったので。 S2 や Spring など「javax.annotation」をサポートするコンテナを jdk-1-5-0_xx で利用する場合、jdk-1-5-0_xx 環境で S2 の @Resource を利用する場合、Maven2 なら pom.xml に以下の記述でok。 org.apache.geronimo.specs geronimo-annotation_1.0_spec 1.1.1 ダウンロードはこちら↓から○http://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-annotation_1.0_spec/1.1.1/geronimo-annotation_1.0_spec-1.1.1.jarhttp://repo1.ma
SAStrutsで簡単にAjaxを扱えるようにしました。サンプルはこんな感じ。 package tutorial.action; import org.seasar.struts.annotation.Execute; import org.seasar.struts.util.ResponseUtil; public class AjaxAction { @Execute(validator = false) public String index() { return "index.jsp"; } @Execute(validator = false) public String hello() { ResponseUtil.write("こんにちわ"); return null; } } アクションで、ResponseUtil#write()を使ってレスポンスに文字列を書き出すだけ。
趣旨とあんまり関係ないですが、Service・Logicをとりまぜた3階層にするならば、エンティティによったものをService、アクションによったものはLogicと呼んだ方が、フレームワーク側の呼び方との親和性は高いように思います。 ちなみに、今はこんな感じの設計はどうかと思っています。 Serviceクラス:エンティティと対につくる。ドメインモデル的な考え方がプロジェクト内でついていけないならばいっそのこと導入しない。 Logicクラス ・ユースケースを跨がる画面まわりの制御処理や、ユースケースをまたがるビジネスロジック特有の処理を書く。いわゆる、サブシステム間共通関数のイメージ。たとえば複数ユースケースであるケースでは沢山の表にインサートするが、あるケースではアップデートのみするようなものを使う。 ・ただし、Serviceクラス的設計が難しい場合には、画面制御的なクラス Servic
昨日、Firefox3が正式リリースされたのでインストールしてみました。 激速ですね。素晴らしい!キビキビしまくりです。 次世代ブラウザ Firefox http://mozilla.jp/firefox/ 今まで、WebブラウザはSafariを使っていたので、速さでは満足していました。でも「Googleツールバー」と「はてなバー」、「マウスゼスチャのプラグイン」が使えないことがやや不満でした。「Googleツールバー」で英単語にマウスフォーカスするとポップアップで日本語の意味を教えてくれる機能がないと、何気に英語の文章を読むのが辛かったんですよね〜。 SafariからFirefox3への移行において心残りなのは、Safariの美しいフォントから離れてしまうことです。 「Googleツールバー」以外のプラグインは、まだ確かめていませんが、これを機にメインで使うWebブラウザはFirefox
Release Notes - SAStruts - Version 1.0.4-sp9 Bug [SASTRUTS-126] - SizeLimitExceededException 発生時にブラウザが真っ白になる [SASTRUTS-129] - /action/methodでリクエストしたとき検証エラーでjspではなくactionにforwardすると無限ループする [SASTRUTS-130] - S2Link Tagでtransaction=trueにしたときに?が二重に出力されてしまう Release Notes - SAStruts - Version 1.0.4-sp8 Bug [SASTRUTS-125] - BeanWrapperがindexed propertyに対応していない Release Notes - SAStruts - Version 1.0.4-sp7
SAStruts と S2JDBC を使って少し複雑なケースのWebアプリを開発する際において、現時点で自分が一番良いと考えているアーキテクチャを図示してみました。 なかなか良い感じです。あえて、課題をあげるならば、次の2点です。 アクションフォームの内部クラスに @Component(instance = InstanceType.SESSION) を付けて、スコープをセッションにしたいができないこと(やり方が分からないだけだと思う。)←できないことが判明しました ユースケースをまたいでアクションフォームを使用しない方針とした場合、検証メソッドをアクションフォームに書きたくなるが現状ではアクションにしか書けないこと。 追記: 1.0.3-rc1 より検証メソッドはアクションフォームに書くことができるようになります。 よって、検証メソッドはアクションからアクションフォームへ移すことをオスス
機能リファレンス SAStrutsで使われている機能の説明をします。 プロジェクト構成 SAStrutsでは、ルートパッケージの配下にactionなどのパッケージを作って、 そこに必要なファイルを格納します。 ルートパッケージ名は、任意の名前を指定することができます。 例えば、sa-struts-tutorialプロジェクトでは、ルートパッケージ名は、tutorialになっています。 ルートパッケージ名は、convention.diconで指定します。 sa-struts-tutorialプロジェクトでは、src/main/resourcesで次のように指定されています。 convention.dicon <components> <component class="org.seasar.framework.convention.impl.NamingConventionImpl"> <i
追記: 以前に以下のようなエントリを書いてしまいましたが、 transient を付けたプロパティは、HOT deployとCOOL deploy で 挙動が違うことが判明したため、使わないこと強くを推奨します。 混乱させてしまって、スミマセン。 挙動から判断するに、HOT deployの時は、HogeDtoをシリアライズ して何処かに退避しておき、クラスローダが差し替わった後には シリアライズしたものを使ってHogeDtoを復元しているように思えます。 transient を付けたプロパティは、シリアライズの対象から外れるため、 結果的にセッションスコープではなくなります。 しかし、そもそもCOOL deploy ではシリアライズやクラスローダの差し替えは 行われないので、transient を付けたプロパティもセッションスコープと なってしまう訳です。 次のエントリのコメント欄でこの記
SAStrutsとStrutsはアクションのコンポーネントの スコープが異なっているので注意しなければならない。 アクションのスコープの違い Struts singleton SAStruts request 生Strutsのアクションが持つフィールド 複数のスレッド間で共有される一方、 冗長化構成のマシン間では共有されない。 このようなクセがあるために、使用を避ける、 もしくは、慎重に使う必要がありました。 (使用禁止にしていたプロジェクトも多いと思われる) SAStrutsのアクションのフィールド 他のスレッドに影響を及ぼさないrequestスコープなので、 気軽にどんどん使用することができる。 ちなみに、アクションのフィールドをpublicフィールドとして 宣言しておくと、次のようにJSP側のEL式で簡単に呼び出すことができる。 HogeAction.java package tut
1つユースケースに閉じていることは、すべてActionに記述し、複数のユースケースで使われるものをLogicに分割するのがシンプルでわかりやすいのではないかと、そう思ったわけです。 <<中略>> 追記2:コメントへの回答ですが、ユーティリティは、staticメソッドで構成されるやつは、utilのパッケージ。ActionにDIするやつは、logicパッケージでいいと思います。どっちでもないユーティリティもutilパッケージですね。 Entityについては、SAStrutsのドキュメントにもこのblogでも書いていますが、1つのEntityに閉じたロジックならEntityに記述するということでいいと思います。複数のユースケースで使うからこそ、Entityに書く意味がありますね。個別のユースケースでしか使わないなら、Actionに書いたほうがいいと思います。 上記のひがさんのエントリーを元に「ど
Welcome to the "Super Agile Struts" project. Super Agile Struts(以降SAStrutsと省略)は、Strutsを使った開発をSuper Agileに行なうためのフレームワークです。 Strutsで開発する場合に困ることは、設定ファイルをたくさん書く必要があったり、 設定ファイルやJavaのコードを修正するたびにアプリケーションサーバを再起動する必要があることでしょう。 SAStrutsを使えば、設定ファイルを書く必要はなく、 スクリプト言語のようにファイルを保存する(保存と同時にコンパイルするような設定になっている場合)と、 すぐにその内容をアプリケーションサーバの再起動なしで認識することができます。 スクリプト言語のように「さくさく開発」ができ、 EclipseなどのIDEによるコードの自動補完などで、 さらに生産性を高めるこ
本当は、Rails風にしようと思ったわけではなく、ふたがわさんがCubbyがいいっていってたので、インスパイヤされて作ったらRails風になっちゃったって感じ。 http://locahost:8080/sa-struts-tutorial/loginにアクセスすると、tutorial.action.LoginAction#index()が呼び出されます。 index()の戻り値がlogin.jspだと、/login/login.jspにフォワードされます。 また、/employee/list.jspが表示されているときにリンクタグが <a href="edit/${e.id}">...</a>だと、/employee/edit/idの値に遷移し、idがActionにセットされ、edit()が呼び出されます。 edit()は以下のとおり。 @Execute(urlPattern = "ed
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く