2007-05-01から1ヶ月間の記事一覧

parent属性で継承できないもの

parent属性で指定したBean定義の引き継ぐことができますが、すべては継承できません。以下の情報は継承できないので、Child Bean定義で個別に設定しなければなりません。 depends-on autowire-mode, dependency-check singleton scope lazy-init scopeは、pa…

ActionにCGLIBでAOPを適用する

ActionクラスにSpring AOPを適用する場合、XWorkのInterceptorとの相性とか、なにか問題が発生するのではないか?ということで試してみました。 Actionクラスはインターフェースを定義していないので、SpringのAOPを利用するにはCGLIBを使うことになります(…

CGLIBで@SkipValidationが効かない

Springに登録したActionクラスにCGLIBプロキシでAOPを適用すると、@SkipValidationが無視されてしまいます。その結果、本来は@SkipValidationするはずのメソッドがバリデーションされてしまい、以下のようなinputのマッピング定義がない!というエラーが発生…

StrutsSpringObjectFactoryの処理内容

org.apache.struts2.spring.StrutsSpringObjectFactoryは、下記のStruts2用インターフェースを実装したオブジェクトを、Springで生成させることができます。 com.opensymphony.xwork2.Action com.opensymphony.xwork2.interceptor.Interceptor com.opensymph…

StrutsとSpringを連携させる

Struts2はSpringに簡単にインスタンス管理をお任せすることができます。 注意すべきはActionのインスタンスモード。Struts2のアクションはステートを持つので、prototypeかrequestにしないと洒落になりません。 ライブラリの取得 必要なライブラリは、struts…

AOPプロキシをプログラム的に生成する

org.springframework.aop.framework.ProxyFactoryを使えば、AOPプロキシをプログラムで簡単に生成できます。 ※1.X系から提供されているやり方。 ProxyFactory factory = new ProxyFactory(new SimplePojo()); factory.addInterface(Pojo.class); // For use …

JavaSEプロキシとCGLIBプロキシ

Springでは、実行時にターゲットオブジェクトのAOPプロキシを動的に生成することで、AOPを実現しています。 ※AOPプロキシ:AOPフレームワークにより生成されたadviceをもつオブジェクト AOPプロキシを生成する方法としては、2つの方法があります。 JDKのダ…

Actionの実行時間をログ出力 ‐TimerInterceptor

xwork2のTimerInterceptorは、以下のようにActionの実行時間をログに出力できます。 2007-05-18 14:25:51,711 INFO [http-8080-Processor23] [com.opensymphony.xwork2.interceptor.TimerInterceptor] - Executed action [/catalog/list!list] took 1500 ms.…

Actionの起動〜終了をログ出力 ‐LoggingInterceptor

xwork2のLoggingInterceptorを定義すれば、INFOレベル(固定;変更不可)で、以下のような起動と終了ログが出力させることができます。 2007-05-18 14:25:51,711 INFO [http-8080-Processor23] [com.opensymphony.xwork2.interceptor.LoggingInterceptor] - …

開発モード(devMode)かどうかを取得する

static boolean devMode = false; @Inject("devMode") public static void setDevMode(String mode) { devMode = "true".equals(mode); } public boolean isDevMode(){ return devMode; } 例えば、開発モードの場合に例外の詳細を出力するJSPは以下のように…

例外を一括処理する- ExceptionMappingInterceptor

ExceptionMappingInterceptorを利用すれば、アプリケーションで処理されない例外をエラーログに出力して専用のエラー画面に遷移させることができます。ExceptionMappingInterceptorは、ValueStackに例外情報とスタックトレースをPushします。具体的にはPush…

[Struts2] Actionメソッドをフックする(@Before, @After, @BeforeResult)

Struts2では複数のアクションを1つのActionに記述できるので、TemplateMethodパターンではメソッドの前処理と後処理を書けません(Struts1では、Actionごとにメソッドが1つだったので、TemplateMethodパターンを利用して簡単にActionメソッドをフックできる…

セッションへのアクセス

Struts2では、SessionMapを利用してセッション情報にアクセスします。SessionMapはMapインターフェースの実装なので、ServletAPIに依存しません。SessionMapを取得するには、ActionContextかSessionAwareを利用します。 ActionContext Map session = (Map) A…

分割したファイルからパッケージを参照できない

分割したファイルからパッケージをextendすると、実行時に以下のエラーが発生して起動できないという問題が発生します。 2007-05-14 14:20:25,131 ERROR [main][com.opensymphony.xwork2.config.ConfigurationUtil] - Unable to find parent package myapp-e…

[JBOSS4][JMX] リモートJMXサーバの情報を取得する

JBOSSのJMXサーバにリモートで接続して情報を取得する方法のメモ。 twiddleを利用する場合 JBOSS4には、twiddleというリモートJMXクライアントが提供されています。 これを使えば、リモートJMXサーバにアクセスすることができます。 例えば、現在のセッショ…

JSPからActionを呼び出す方法

GETで呼び出す場合 GETでActionを呼び出すには、以下のようにを利用します。 またURLパラメータを送る場合には、を使います。 <s:if test="%{pager.prev}"> <s:url id="prevListUrl" action="list"> <s:param name="offset" value="%{pager.prevOffset}" /> </s:url> <s:a href="%{prevListUrl}">Prev</s:a> </s:if> <s:if test="%{pager.next}"> </s:if>

Cacheのタイプ(MEMORY,FIFO,LRUなど)

iBATISで利用できるキャッシュの実装(キャッシュタイプ)には、以下の4種類があります。 MEMORY(com.ibatis.db.sqlmap.cache.memory.MemoryCacheController) FIFO (com.ibatis.db.sqlmap.cache.fifo.FifoCacheController) LRU(com.ibatis.db.sqlmap.cache.…

Read-OnlyキャッシュとRead/Writeキャッシュ

iBATISではキャッシュから取得したオブジェクトのRead/Writeを許可するか否かについて、以下の3種類の方式があります。 Read-Onlyキャッシュ Read/Writeキャッシュ Serializable Read/Writeキャッシュ Read-Onlyキャッシュ キャッシュから参照専用オブジェ…

キャッシュの定義

iBATISのキャッシュは以下のように定義します。 <cacheModel id="product-cache" type ="LRU" readOnly="true" serialize="false"> <flushInterval hours="24"/> <flushOnExecute statement="insertProduct"/> <flushOnExecute statement="updateProduct"/> <flushOnExecute statement="deleteProduct"/> </flushonexecute></flushonexecute></flushonexecute></flushinterval></cachemodel>

パフォーマンスチューニング(翻訳)

Struts2の本家にある『Apache Struts 2 Documentation - Performance Tuning』を翻訳してみました。 logging と devModeを無効にしてください。 DevModeでは、設定のリロードと関連ファイルの検査を行うことができます。しかし、これらはリクエストごとに実…