ERP FAS DESIGN
- 1. プロジェクト22 Enterprise Resource Planning Package
財務会計システム 「TOMOCHAN」
システム設計 – 詳細設計
最終更新日:2004/06/09 改訂番号:1.21
初版:2004/05/12
NE14-0116B 荒浪一城 (ne140116@isc.senshu-u.ac.jp)
● ライセンス
WebサーバーApache、WebアプリケーションサーバーTomcat、Webアプリケーシ
ョンフレームワークStruts、Struts in Action におけるサンプルコード、Ja-Jakartaに
よる日本語訳はライセンス「Apache License Version 2.0」及び「The Apache
Software License, Version 1.1」で配布されており、NOTICEファイルを含ませる、
またはエンドユーザー向けの文章で宣言などのライセンス条項に従うことで、無
償使用かつ再頒布可能な非独占的権利を無期限に許可される。これらのコードや
成果物をベースに目標とする各種機能を追加、実装するものとする。
検討:本プロジェクトにおけるライセンス
Apache License, Version 2.0 Apache2, Tomcat5
http://www.apache.org/licenses/LICENSE-2.0
Open Source Initiative OSI承認ライセンス 日本語参考訳 Apache License, Version 2.0
http://opensource.jp/licenses/apache2.0.html
The Apache Software License, Version 1.1 Struts, Struts in Action sample code, Ja-Jakarta
http://www.apache.org/licenses/LICENSE-1.1
The Apache Software License, Version 1.1(日本語非公式訳)
http://www.jajakarta.org/site/legal.html
● 目標
Webアプリケーションを利用可能なユーザーを識別する
適切な権限(ロール)に従った業務を遂行が可能であること
● 要件
ユーザーは(ユーザー名とパスワード)を提示できる
- 6. = ロールベースセキュリティ =
Tomcat5ユーザガイド 6. レルムとアクセス制御
http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/realm-howto.html
Role-based security
http://www.husted.com/struts/resources/struts-security.htm
Pow2ACL
http://pow2acl.sourceforge.net/
「Sing out」処理(プラグインによる終了処理)、welcomeへフォーワード
認証ログの出力
● menu.jsp(論理名:menu.do)
データベースへの参照、入力
問題点:ユーザーによるリクエストの二重送信
解決案:Transaction(Synchronizer) Tokenによるリクエストの二重送信防止
引用元:日本IBMシステムズエンジニアリング
その他の参考:Strutsプログラミング講座 Lesson10 トランザクショントークン
*引用開始*
Strutsフレームワークでの実装例ActionクラスはHTTPセッションIDとタイムスタ
ンプで一意的なトークンを生成しセッション?オブジェクトに保管する。一方
Actionクラスはリクエストが来る度に上記の方法でトークンを生成しHTMLフォ
ームの隠しフィールドに保管。HTTPセッション?オブジェクトに保管されている
トークンとリクエスト?パラメーターにあるトークンの値を比較し二重送信有無
をチェックする。
Synchronizer Tokenでリクエストの二重送信防止
protected void saveToken(HttpServletRequest request){
HttpSession session = request.getSession();
String token = generateToken(request);
if(token != null){
session.setAttribute(TRANSACTION_TOKEN_KEY,token);
}
}
トークンの生成HTMLフォーム中の隠しフィールド
- 7. <input type = "hidden"name ="org.apache.struts.taglib.html.TOKEN"value = "JSESSIONID">
*引用終了*
ただし、Strutsの持つこれらのトランザクショントークンを用いた一連の処理は複
数画面による操作には対応できない。複数画面に対応する必要性が生じた場合は
、野村総合研究所による「T-struts」(http://t-struts.sourceforge.jp/)を検討すべきであ
る。
データベース操作時のクラス設計
通常は複数のクラスに散在している処理を、1つのクラスにまとめるほうが保守性
の向上を見込める場合がある。1つのサービスに関する一連の処理を各々のAction
クラスへ分散するのではなく、同じActionクラスで持つべきとする考え方である
。Strutsでは、DispatchActionクラスがこの目的と合致する。
例えば、データベースでの操作は、一般的に閲覧?更新?削除というまとまった
処理である。このような処理は3つのクラスを設計する考え方も有効であるが、1
つのクラスにまとめた方が保守性の観点から良いと考えられる。
実装時には、DispatchActionクラスを継承し、それぞれのメソッドを定義するが、
StrutsのDispatchActionクラスは修正せず、独自のDispatchActionクラスを継承する
ことでStrutsのDispatchActionクラスをスーパークラスとして位置づけることが出
来る。
参考:プログラミング Jakarta Struts 122ページ
番号 Bean名
(論理名
)
実装
クラス
スコー
プ
属性名 属性型 検証 初期
化
1 logonForm
Sample.forms.LogonFor
m
Request Userid String
YES(半
角英数)
reset
Password String
YES(
半角英
数)
reset
- 8. 2
表A アクションフォームBean
番号 Bean名 実装
クラス
スコープ 属性名 属性型
1 userValueBean Sample.beans.UserInfoVB Session UserName String
Password String
Roles ArrayList
2
表B ValueObject一覧
操作ログの出力
システム上の深刻なエラーが発生 → erroe.jspへ遷移 → 管理者への連絡を促す
● error.jsp(論理名:なし)
システム上深刻なエラーであり、ユーザーへ管理者への連絡を促す
*参考*
プログラミング Jakarta Struts 78ページ
<web-app>
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/some/where/error.jsp</location>
</error-page>
</web-app>
● 付録
Jsessionidキーについて
ハイパーリンクにセッションキーを含めることをURLリライティングと言う。クッ
キーが使用できなくとも、セッション管理を行える利点がある。Jsessionidキーはサ
ーブレットコンテナが管理し、クッキーが受け入れ可能であると、コンテナが自動
的にURLリライティングを省略する。Sun Microsystemsはセッション管理にクッキ
ーの利用を推奨しているが、本プロジェクトではクッキーを採用しない。
Strutsの国際化(i18n)について
ユーザーのローケルを取得、判別し国際化(i18n)をサポートする。国際化は最初
- 9. にサポートしておけば、後で追加する場合の作業量を比較すると極めて低く抑える
ことができる。
struts-config.xml の <struts-config> 内で、
<!-- ================================ Message Resources Definitions -->
<message-resources parameter="resources.application"/>
と指定する。
そもそも Struts は properties 拡張子以外は読み込んでくれない。設定ファイルで
resources.application と指定してあるならば、application.properties の名称でファイル
を作成、保存しなければならない。
なお、それぞれの言語ごとにファイルを作成する。日本語であれば、
application_ja.properties となる。言語部分に相当する ja は国際規格 ISO-3166 に準じ
て記述する。これらの判別は、HTTPリクエスト内に含まれる Accept-Language ヘッ
ダーに基づく。
例: 英語 en 中国語 zh
properties ファイルは
%TOMCAT_HOME%webapps%APP_NAME%WEB-INFclassesresources
に保存しなければならない。
message-resources に記述した内容と一致する必要がある。つまり、
resources.application と指定したからには、 resources フォルダ下に、application とい
うファイル名で properties ファイルを作成する必要がある。
国際化を行う該当JSPファイルには、 <html:html locale="true"> を記述し、また、
<bean:message key="welcome.title"/> のように key も記述する。該当する Tag Library
の記述子が web.xml に存在するか確認することを推奨する。
properties ファイルにて、 key=welcome.title と指定されていれば、
- 10. welcome.title=ようこそ!
のように記述する。
# Struts in Action では、 application_ja_JP.properties と
# 国( ISO-639 )を含めるファイル名となっている。
フォーワードとリダイレクトについて
Strutsフレームワークでは、画面遷移にリダイレクトとフォーワードの2種類が存在
するが、一般的にフォーワードがクライアントへ依存せず推奨される。フォーワー
ド時にはブラウザが関与しない等の利点がある。一方で、JSPにはイメージやなど
のリソースが相対パスで指定されている場合、相対パスは最初のサーブレットを基
準にしていることに留意する必要がある。
<html:base/>を指定することで、HTMLのbaseタグを生成するため相対パスが利用可
能となる。
トップページの指定は、web.xmlにて次のように記述し指定する。
<!-- The Usual Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
struts-config.xmlにおけるForwardActionについて
<!-- =================================== Action Mapping Definitions -->
<action-mappings>
<action
path="/Welcome"
type="org.apache.struts.actions.ForwardAction"
parameter="/pages/Welcome.jsp"/>
この記述により、http://localhost:8080/logon/pages/Welcome.jspではなくブラウザには
- 13. 、およそ3つの大きな選択肢がある。JDBC、Commons DBCP + DBUtils、O/Rマッピ
ングツール(Torque、Hibernate)である。
次世代のEJB3.0では、JBoss、Hibernateからの提案を多く受け入れている。また、
HibernateはJBossの傘下となったことからも、O/Rマッピングツールを用いる場合は
Hibernateがトレンドとなる可能性がある。しかしこれらO/Rマッピングツールは、
同時にAntやXDocletなどの知識などが前提知識としてある程度必要となる。
データベース入力
データベースとしてMySQLを用いる。
所属部門のデータに関しては閲覧のみができる。(ユーザーテーブルに所属)
所属部門以外のデータは見ることができない。
ユーザーは独自の勘定科目を定義することができる。
ユーザー自身の入力した項目は、いつでも追加?編集?削除を行うことができる。
ユーザーの入力を支援するため、よくある売り上げデータを自動で仕分けする。
勘定科目の設定が難しいことから、専用のヘルプ機能を作る。
MySQLにおけるトランザクションサポートについて
MySQLではトランザクションがサポートされているが、デフォルトで作成されるテ
ーブルの形式(MyISAM)では更新時のロックがテーブル全体に及ぶというという
デメリットがある。
トランザクションをサポートするテーブル形式(InnoDB)を用いることができる。
この形式では、SQL1つ1つにトランザクション処理がなされるため、MyISAMと比
較して更新系のパフォーマンスが落ちるという問題がある。しかしながら、それで
も十分なパフォーマンスが確保されており、データベースの更新が頻繁に発生しト
ランザクション処理による整合性を保つ必要がある本プロジェクトにおいては、行
レベルまでロックが可能なInnoDBテーブルが必要となる。
MySQL Manual | 7.5 InnoDB テーブル
http://dev.mysql.com/doc/mysql/ja/InnoDB.html
- 15. Strutsプログラミング講座
宇野 るいも (著), arton (著)
価格: ¥3,780 (税込)
出版社: アスキー ; ISBN: 4756143075 ; (2003/06)
Jakartaプロジェクト徹底攻略2 ~本格活用編~ Javaエキスパートシリーズ
WEB+DB PRESS編集部編 (著)
価格: ¥1,974 (税込)
出版社: 技術評論社 ; ISBN: 4774119458 ; 2 巻 (2004/02/10)
以上