2025
01
18
2008
12
26
[S2JDBC-Gen] [ESSR0053]パーサの設定に問題があります
s2container.seasar.org/2.4/ja/DIContainer.html#XInclude
XInclude を利用するには、Java5 以降でかつXInclude に対応した XML パーサが必要です。 Java5 にバンドルされているXML パーサは XInclude に対応しています。
Teeda、S2JSF、Mayaa 等にバンドルされている Xerces 2.6.2 は XInclude に対応していません。 Xerces 2.6.2 は Tomcat 5.0 でも利用されています。 これらの環境で XInclude を使用するには次の設定が必要です.
META-INF/services
ディレクトリを作成し、javax.xml.parsers.SAXParserFactory
というファイルを作成し、 以下の内容を記述します (SunのJDK/JREの場合)。
com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
2008/12/26 (Fri.) Trackback() Comment(0) seasar
2008
12
25
[SAStruts]サブミットボタンはname属性で
サブミットボタンはname属性にメソッド名を指定する。
2008/12/25 (Thu.) Trackback() Comment(0) seasar
2008
12
24
[SAStruts]URLとアクションの関係
Strutsでは、URLとアクションの関係をstruts-config.xmlに記述しますが、 SAStrutsでは、次のルールに従って自動的に決まるので、 設定ファイルを書く必要がありません。
http://localhost:8080/sa-struts-tutorial/login/にアクセスしたとします。 sa-struts-tutorialはWebアプリケーション名です。 SAStrutsは、次のような手順でURLをActionクラスに変換します。
- Webアプリケーション名の後ろのパス(/login/)の最後のスラッシュをActionに変換(/loginAction)します。 スラッシュがない場合は後ろにActionを付け加えます。
- 最後のスラッシュの直後を大文字(/LoginAction)にします。
- スラッシュをドットに変換(.LoginAction)します。
- ルートパッケージ名.actionを先頭につけます(ルートパッケージ名.action.LoginAction)。 ルートパッケージ名の詳細は、こちらを参照してください。
- 最終的に、/login/に対応するアクションクラスはtutorial.action.LoginActionになります。
アクション用のパスがない場合、ルートパッケージ.action.IndexActionがあれば、 そのアクションが呼び出されます。 例えば、http://localhost:8080/sa-struts-tutorial/にアクセスすると、 tutorial.action.IndexActionが呼び出されます。
IndexActionを呼び出したいときは、Webのルートにindex.jspをおかないようにしてください。 index.jspの方が優先されて呼び出されるためです。
2008/12/24 (Wed.) Trackback() Comment(0) seasar
2008
12
03
[Seasar][Dolteng][sqlserver] DoltengのDatabaseViewを使うときの注意
Seasar2(Teeda+S2Dao) on Eclipse(with Dolteng) な環境で #複雑だなぁ
Sqlserverを使う場合、このドライバを使うかもしれません。
で、このドライバ(jar)を半角スペースを含むパスに置いては駄目です!
たぶんDolteng(0.33.0)がおばかなので、接続できません。orz
jdbc.diconの記述はほぼデフォルトでOKです。 こんな感じです。
<!-- for SQLServer -->
<component name="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property name="driverClassName">
"net.sourceforge.jtds.jdbc.Driver"
</property>
<property name="URL">
"jdbc:jtds:sqlserver://localhost:1433/databasename"
</property>
<property name="user">"sa"</property>
<property name="password">""</property>
</component>
2008/12/03 (Wed.) Trackback() Comment(0) seasar
2008
11
28
seasarについて
DI+AOPの軽量コンテナ
DIとは?
Dependency Injection(依存性注入)
DIを実現するメカニズムの概要は,オブジェクト相互の依存性をプログラム外部に記述して,実行時に結合することである。
依存性とは?
Java言語ではオブジェクトは「Javaクラス」として記述する。ここで,「A」というJavaクラスのソースコード中に,「B」を呼び出すコードが含 まれていたとしよう。このコードは,「AがBを生成し,そのメソッドを呼び出す」という内容になる。生成するためには,AはBを知っていなければならな い。つまり,Aを実行するには同時にBが必要となる。これが依存性である。
依存性の正体がオブジェクトの生成のコードであるならば,この「悪者」となっているコードを消せないか?
具体的には,Bを生成するコード(=依存性)を A本体に含めず,その実行時に動的に「注入」できないか?
この考え方が,依存性注入(Dependency Injection),すなわちDIなのである。
DIを実現するメカニズム
オブジェクトAがオブジェクトBに依存する部分を,Aのソースコードに直接記述するのではなく,間接的な方法で(メタレベルで)記述する。例えば Spring Frameworkの場合は,XML形式の設定ファイルに,AとBとの間の依存性を記述する。EJB3.0では,Java言語仕様に加わったメタデータに より,アノテーション(「@session」など,プログラム・コード中に挿入する付帯情報)として記述する。
AOPとは?
Aspect Oriented Programming:アスペクト指向プログラミング
横断的な関心事
たとえば、ログトレース。いろんなところでログトレースしたい。でもいろんなとこに書くのは無駄。
じゃAOPで、処理を分離する。横断的なロジックと関係無い処理は、アスペクトとして分割する。
静的なAOPと動的なAOP
静的なAOP:AspectJ
動的なAOP:Seasae2、Spring
バイトコードレベルでアスペクトを織り込むタイプ
クラスロード時や実行時にバイトコード変換を用いて、アスペクトを織り込むタイプのAOPです。Seasar2はバイトコードレベルでアスペクトを織り込むタイプです。
プロキシを利用してアスペクトを織り込むタイプ
Spring
Seasar2のAOPについて
Seasar2のAOPのAdvice
- Around Advice、Before Advice、After Advice、After Returning Advice
- それぞれ、Joinpointの前後・前・後に実行されるAdvice。これらは独自のAdviceとして実装する必要があります。
- Throw Advice
- Joinpointで例外が発生した場合に実行されるAdvice。Seasar2の提供するThrowsInterceptorを継承して実装する必要があります。
- その他のAdvice
- Joinpointに対する機能を実装済みのAdvice。Seasar2の提供するInterceptorをそのまま利用できます。
Plain Old Java Object
ごく普通のJavaオブジェクトであることを強調した名称。
Javaにおいてもっとも寿命が長いのは、どんなフレームワークでもない、POJOであろう。
それは「Javaである」ことしか要請しないのだから。POJOは中継層やプロセス層のような「うつろいゆくもの」に依存しない。
POJOはテストを容易にする。
2008/11/28 (Fri.) Trackback() Comment(0) seasar