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では、設定のリロードと関連ファイルの検査を行うことができます。しかし、これらはリクエストごとに実…

Commons Loggingで利用するログ実装の指定

Commons Loggingで利用する実装を指定は、クラスパス上に作成したcommons-logging.propertiesファイルに行います。 commons-logging.properties(Log4jの場合) org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger<指定可能な実…

WebLogic10Jで新たにサポートされる主要テクノロジ

Java EE 5(Java Enterprise Edition 5.0)標準準拠 EJB 3.0(Enterprise Java Beans 3.0) オープンソースのサポート: OpenJPA(Java Persistence API) Glassfish JAX-WS2.0(Java API for XML-Based Web Services 2.0) JAXB 2.0(Java API for XML Bind…

日本語を処理するための設定

Struts1ではServletFilterで文字コードを指定するのが普通でしたが、Struts2ではstruts.propertiesにencodingとロケールを正しく指定します。指定した値を使ってorg.apache.struts2.dispatcher.FilterDispatcherがRequestを処理してくれます。 struts.locale…

dojoのjsが読めないというエラーが表示される

IE6.0SP2で、dojoのjsが読めないというエラーが表示されます。動作上は特に問題がないようですが。【画面上の表示】 FATAL exception raised: Could not load 'dojo.debug'; last tried '__package__.js' 【ログ】 2007-02-28 10:27:53,986 WARN [http-8080-…

インストールからHelloWorld

EclipseのWTPプロジェクトを作成して、Struts2でHelloWorldをだすところまで。30分〜1時間ぐらいでできます。 少しはまったのは、struts.xmlの配置場所。デフォルトではWEB-INFの下ではなくてクラスパス上に配置する点に注意が必要です。 [前提] Java5、E…

CustomizableTraceInterceptor

org.springframework.aop.interceptor.CustomizableTraceInterceptorを使うと、任意のフォーマットでトレースログを出力できます。メソッド引数や処理時間を設定だけで出力できるので便利(1.2から)。こういった感じのログが出力されます。 2007-03-14 16:1…

AbstractTraceInterceptor

PerformanceMonitorInterceptorやCustomizableTraceInterceptorの上位クラスで、こいつをいじるとログ出力Interceptorの動作を変えることができます(1.2から)。 例えばデフォルトのログレベルはTRACEレベルですが、isLogEnabledをオーバライドすればログレ…

'Unable to parse OGNL expression' エラー(4.1.2-Snapshot)

Tapestry4.1.2のSnapshotでTableRowsコンポーネントでPageコンポーネントとバインドする際に、「Unable to parse OGNL expression」というエラーが発生します。以下によると、利用しているOGNL実装の問題だと思われます。 http://issues.apache.org/jira/bro…

PerformanceMonitorInterceptorの使い方

org.springframework.aop.interceptor.PerformanceMonitorInterceptorを使うと、メソッドの処理時間を計測できます。 Bean定義ファイルでは、aop:advisorを利用して定義します。 以下の例では、my.colnagoパッケージ以下の全クラスの全メソッドを対象。 <aop:config> </aop:config>

JBossの起動〜デプロイ〜停止

サーバを起動する方法 cオプションで起動するサーバを指定できます(何も指定しないとdefaultが起動)。 run.bat -c default デプロイ デプロイは、以下のディレクトリにwarもしくはearをコピーします。 server\default\deploy シャットダウン bin/shutdown.…

独自定義の属性にアクセスする(getAttribute)

例えばaaa属性の値が欲しい場合 <tr id="Any" aaa="abc" class="myClass"> IE6.0SP2では以下のように参照できますが、FireFox2.0では不可(undefined)。 // IE6.0SP2(FireFox2.0不可) document.getElementById('Any').aaa; DOM LEVEL1のElement#getAttributeメソッドを利用すれば、IEでもFireFox</tr>…

テキストを取得するプロパティ(innerTextとtextContent)

DOMノード下のテキストを取得するプロパティとしてinnerTextとtextContentの2種類があります。 innerText(IE6.0 SP2) textContext(FireFox2.0) // FireFox2.0 document.getElementById('target').textContent; // IE6.0SP2 document.getElementById('tar…

INSERT時にIDを自動採番する

IDを自動採番するには、selectKey要素をつかいます。keyPropertyを指定しておくと、parameterClassで指定したオブジェクトのIDに採番した値を自動設定してくれます。 シーケンスを使う場合 type="pre"に設定します。シーケンスオブジェクトを使って自動採番…

中野の丸井メンズ館が閉鎖

Biz

中野の丸井メンズ館が閉鎖されていました。 新宿みたいに混雑しないし(というか客がほとんどいない)、穴場だったのに残念!気になったので、今後の中野の丸井はどうなるのかを調べてみました。 ネタは「丸井グループ 2007年3月期 中間決算説明会」(PDF)資…

Spring 2.0M1 Released

Springの2.0M1がリリースされていました。主な内容は、こんな感じ。 Simplified, extensible XML configuration Powerful new Spring AOP features and AspectJ 5 integration Asynchronous JMS facilities enabling message-driven POJOs Spring Portlet MV…

LandiskをDebian化

自宅のバックアップ用に使っていたIOデータのLandisk(HDL-120U)に、Debianを乗っけてみました。これ、最近話題ですね。白箱の本とか書店の目立つところにおいてありますし。日経Linuxの2006/1号も白箱の特集でした。 ここを参考にして、さくっと終わらせよ…

ManyToOne

チュートリアルの続きで、ManyToOneをやってみたのでメモ。やり方は、Many側クラスのgetterに@ManyToOneをつけるだけです。例えばRecipeとCategoryだとN:1になるので、RecipeのgetCategory()に@ManyToOneを付けます。Recipe.javaはこんな感じです。 package …

TrailsでCRUDアプリを作ってみた

最近いい感じのプレゼンテーションFWを探していて、その1つとしてWicketを調査していました。これはこれで結構素敵だと思うのですが、いまいち心に響かない。 理由はわかっています。そう、Ruby On Railsに出会ってしまったからです。 というわけで、ちょっ…