11月7日

チーム開発について

作業の進め方

  1. 作業を進める課題を決める
  2. Backlogで課題を担当して処理中にする
  3. 作業のペアを決める(必要に応じて)
  4. コードを書く
  5. 動作確認する
  6. Gitにcommit/pushする
  7. Backlogの課題を「処理済」にする
  8. Gitからpull/fetchして最新コードを取得(他のメンバー)
  9. 動作確認する(他のメンバー)
  10. 他のメンバーが動作確認できたらBacklogの課題を「完了」にする

バッドノウハウ

  • HSQLDBプラグインの設定を変更したが、HSQLEB Serverを再起動してないためにDBに接続できない。
  • Gitにpushできていない。pushできているかどうかは、BacklogのGitタブのリポジトリを参照して確認する。

クラス名や変数名の命名について

Javaの命名規約
http://java.satoshis.com/index.php/java/tutorial/8-naming-convention.html

11月6日

重要な課題

  • 画面遷移(静的ページで可)
  • ログイン・ログアウト
  • パラメータからデータ受け取り
  • 受け取ったデータの表示
  • データの永続化
  • デザイン

Backlogの課題の粒度を小さくする

「各画面の○○」のような課題は、「A画面の○○」「B画面の○○」のように、画面別の課題にする。
DB連携はエンティティ別に分ける。
基本的な動きが完成したときは課題を完了させ、問題点はバグとして新しく課題を追加する。

Webアプリが期待通りに動作しないときの対処

コンテキストルート( http://localhost:8080/appname/ )にアクセスして404エラーになる場合は、設定に問題があるためにアプリケーションコンテキストが動作していない可能性が高い。
コンソールビューを参照して例外が発生していないか確認する。例外が発生している場合は、例外に表示されているメッセージをヒントにして問題を解決する。

コンテキストルートの設定が間違っていないかを確認する。プロジェクトのプロパティを開き、以下の内容をチェックする。

  • 「プロジェクト・ファセット」を選択して「動的Webモジュール」のバージョンを「2.5」に設定し、行の左端のチェックをONにする。
  • 「Webプロジェクトの設定」を選択して、「コンテキスト・ルート」の設定を確認する。

コンテキストルートにアクセスできて、期待通りに動作しない場合は、変更前のJSPやJavaによって動作している可能性があるので、古いファイルを削除するために以下の操作を試してみる。

  • [プロジェクト]-[クリーン]してプロジェクトをビルドしなおす
  • Tomcatを停止してクリーンする(サーバービューのTomcatを右クリックしてクリーン)
  • Tomcat配下のWebアプリを右クリックして「モジュール・ワーク・ディレクトリーをクリーン」を実行する
  • Tomcat配下のWebアプリを削除して追加しなおす
  • サーバービューでTomcatを削除して再登録する

10月30日

Spring Securityによるログアウトの方法

Spring Security でログアウトを実装するには、設定ファイル spring-security.xml に以下の設定を追加する。

	<sec:http auto-config="true">
		<intercept-url pattern="/**" access="ROLE_USER" />
		<sec:logout
			logout-url="/logout"
			logout-success-url="/"
			invalidate-session="true"
			delete-cookies="JSESSIONID" />
	</sec:http>

sec:logout タグ内の logout-url で指定した URL にアクセスすると、セッション情報が破棄される。

ログアウトを追加したい画面に対応する JSP に、以下のリンクを追加すればよい。
ログイン中のユーザーがここをクリックすると、セッション情報が破棄され、ログアウトする。

<a href="/logout">Logout</a>

トラブルシューティング

DBに登録でエラーになる

Q.新規ユーザーをDBに登録するところで例外が発生して登録できない。
A.コンソールの内容を確認すると、commit()で例外が発生している。メッセージを確認すると、「unique constraint or index violation」と表示。
プライマリキーを自動で割り当てるように、エンティティにアノテーションを追加すれば解決する。

10月16日

チーム開発の続き

Spring Securityによる認証

サイトにログイン機能を追加するには、Spring Security を使用すると簡単に実装できる。

Spring Security の設定ファイルを読み込ませるために、contextConfigLocation を追加する。

web.xml

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/application-config.xml</param-value>
    </context-param>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/spring-security.xml</param-value>
    </context-param>

すべてのページにアクセスする前にアクセス権限のチェックを実行させるため、web.xml の最後に、フィルターを追加する。

web.xml

	<filter>
		<filter-name>springSecurityFilterChain</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>springSecurityFilterChain</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

src/main/resources/spring フォルダに、spring-security.xml を作成する。
まずはXMLで指定したユーザーでログインできるようにする。
ユーザー名: taro
パスワード: abcd

あとでDBから取得するように変更する。

spring-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:sec="http://www.springframework.org/schema/security"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

	<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<beans:property name="driverClassName" value="org.hsqldb.jdbc.JDBCDriver" />
		<beans:property name="url" value="jdbc:hsqldb:hsql://localhost/exam" />
		<beans:property name="username" value="user" />
		<beans:property name="password" value="password" />
	</beans:bean>

	<beans:bean id="encoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder" />

	<sec:http pattern="/" security="none"/>
	<sec:http pattern="/index.jsp" security="none"/>
	<sec:http auto-config="true">
		<intercept-url pattern="/**" access="ROLE_USER" />
	</sec:http>

	<authentication-manager>
		<authentication-provider>
            <user-service>
                <user name="taro" password="abcd" authorities="ROLE_USER" />
            </user-service>
		</authentication-provider>
	</authentication-manager>

</beans:beans>

exam-8

10月9日

チーム開発について

1日のスケジュール

9:45~10:00
グループミーティングを行う。各メンバーが、その日に取り組む課題を決める。
課題はBacklogで管理する。
全員が何かの課題の担当者となるようにすること。
ミーティングのあと、取り組む課題をBacklogで確認する。

10:00~12:50
成果発表。発表する際には、KPTを意識する。
KPTとは・・・
Keep、Problem、Tryの頭文字。

KPT参考資料

各グループで取り組む課題要旨

・画面遷移図
 ロバストネス図で作成する。
・各画面の作成
 デザイナーではないので、画面に凝らないこと!
・エンティティの設計
 システム内でエンティティとなるクラスを見つける。
 エンティティの責務をはっきりさせる。
・Dao/DaoImpleの作成
 エンティティがわかれば必要なDao/DaoImplもわかる。
・Controllerの作成
 画面遷移図にあわせてControllerを作成する。
 ひとつのControllerには複数の機能を割り当てない。

UML図やロバストネス図を電子化したい場合は astah community が無料で使用できる。
http://astah.change-vision.com/ja/product/astah-community.html

exeファイルだとインストールには管理者権限が必要なので、ZIPファイルをダウンロードして適当なところに展開する。

ログインに関する部分

ログインは、spring-security を使用する。
以下のページを参考にする。

Spring Security: ユーザ認証情報をDBに保存する
http://kurotofu.sytes.net/kanji/fool/?p=934

パスワードの暗号化は後回しにする。
暗号化したパスワードを保存すると、開発中のオーバーヘッドが増えてしまうから。

Gitのコミット&プッシュ

コミットする前に、すべてのファイルのチェックをはずし、自分で編集したファイルだけにチェックを入れる。
コメントランには、編集した内容を簡潔に記述する。(課題のIDと修正内容:○○バグの修正、入力チェックを追加等)