ラベル Seasar2 の投稿を表示しています。 すべての投稿を表示
ラベル Seasar2 の投稿を表示しています。 すべての投稿を表示

2014年7月8日火曜日

[SAStruts] RequestProcessor 内で Action やMethod のインスタンスを取得する

Seasar2のS2RequestProcessorを拡張しての共通処理に挑戦中。

やりたいことは殆ど『Seasar2 徹底入門』の「6.5 認証処理を実装する」の通りだけども、自前の処理を書くと途端に戸惑う。
特に、呼び出されるMethodやActionの取得方法がわからなくて困った。
調べる前にS2RequestProcessorのソースを見てたら類似の処理があったので、おそらくこれかな~。
// Actionの取得
S2ActionMapping s2mapping = S2ActionMappingUtil.getActionMapping();
Object action = s2mapping.getAction();
やりたい共通処理は認証で、自前のAbstractActionを継承したActionにのみ行いたい処理を今回のRequestProcessorに書くつもり。

認証を行う対象はアノテーションでマーキングすべきかと思ったけど、AbstractActionに認証用のDtoを定義している。
その為、↑で取得したActionのプロパティを見て対象を判定することにする。
// Methodの取得
S2ExecuteConfig executeConfig = S2ExecuteConfigUtil.getExecuteConfig();
Method method = executeConfig.getMethod();
なんとなく、org.seasar.struts.utilパッケージのユーティリティが鍵っぽい。

SAどころかStrutsの中身もちゃんと見たことないので、この機会にもう少し学んでみよう。

2014年7月4日金曜日

[Seasar2] S2Chronos1.0.0 のセットアップが公式通りだとうまくいかない

"Seasar2に対応したJavaオブジェクトスケジューリングフレームワーク"、S2Chronosの有用性検証を依頼されたのでセットアップ。

公式を見ながら行ったのだが、diconファイルの読み込みあたりでClassNotFoundExceptionなんかが頻発。。いくつかのblogを参考にしてみると公式に記載の無い設定が必要だったりした。

以下、インストールに要した全作業。

1. S2Choronosのjarファイルを↓からダウンロード。WEB-INF/lib に配置し、ビルドパスに加える。
 http://s2chronos.sandbox.seasar.org/ja/download.html

 ソースは下記から。
 http://maven.seasar.org/maven2/org/seasar/chronos/s2chronos-core/1.0.0/
 http://maven.seasar.org/maven2/org/seasar/chronos/s2chronos-extension/1.0.0/


2.chronosCustomize.dicon を作成し、 src/main/resource に配置する。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
    "http://www.seasar.org/dtd/components24.dtd">
<components>
    <component name="schedulerConfiguration" class="org.seasar.chronos.core.SchedulerConfiguration">
        <property name="hotdeployDisable">true</property>
        <property name="daemon">true</property>
        <property name="autoFinish">false</property>
        <property name="autoFinishTimeLimit">5000L</property>
        <property name="taskScanIntervalTime">2000L</property>
        <property name="threadPoolType">@org.seasar.chronos.core.ThreadPoolType@CACHED</property>
    </component>
</components>
※ chronosCustomizer.dicon ではないので要注意。
※ パッケージ名のorg.seasar.chronos.coreが公式だと org.seasar.chronos.core.model になっている。1.0.0ではmodelというパッケージは存在しないので修正する。

3. creator.dicon の<components>タグ中に下記を追記する。
<component class="org.seasar.chronos.core.creator.TaskCreator"/>
<component class="org.seasar.chronos.core.creator.TriggerCreator"/>
4. customizer.dicon の<components>タグ中に下記を追記する。
 <component name="taskSupportAspectCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer">
   <initMethod name="addInterceptorName">
    <arg>"aop.traceInterceptor"</arg>
   </initMethod>
   <property name="pointcut">"do.*, initialize, destroy"</property>
 </component>
 <component name="taskCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
  <initMethod name="addCustomizer">
   <arg>taskSupportAspectCustomizer</arg>
  </initMethod>
 </component>
 <component name="triggerSupportAspectCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer">
  <initMethod name="addInterceptorName">
   <arg>"aop.traceInterceptor"</arg>
  </initMethod>
  <property name="pointcut">".*"</property>
 </component>
 <component name="triggerCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
  <initMethod name="addCustomizer">
   <arg>triggerSupportAspectCustomizer</arg>
  </initMethod>
 </component>
5. app.diconの<components>タグ中に下記を追記する。
<include path="chronos-extension.dicon"/>
※ 公式に記述なし。

6. web.xml の<web-app>タグ中に下記を追記する。
<servlet>
    <servlet-name>chronosServlet</servlet-name>
    <servlet-class>org.seasar.chronos.extension.servlet.S2ChronosServlet</servlet-class>
    <load-on-startup>3</load-on-startup>
</servlet>
※ 公式に記述なし。

これでTomcatを起動する。記述に間違いがある場合はコンソールにログが出力されるので確認する。当たり前だが、エラー発生時にはException名よりもどのファイルの読み込み時に落ちているのかに着目して追うと原因を突き止めやすい。

【環境】

Java SE7
Seasar2.4.45
S2Chronos1.0.0
※ そもそもJava SE5までしかサポートしていない模様。