読者です 読者をやめる 読者になる 読者になる

SE成長痛日記

アラサーSEが技術力を高めるために日々感じる痛みを綴るBlogです。

ひとり疑似プロジェクトでスキルを高める(実装編 ログイン機能 -1-))

さてさて、思い立ってから約1ヶ月半。 本来の目的の実装周りにようやく到着してきました。。。。

ではまず、手始めにログイン周りの実装を行いたいと思います。

ここで検討すべきなのは、Java EEにおける認証機能。 とりあえず調べるとレルムというものを用いて行なうようです。

参考にしたの

WEBページ

たかがレルムされどレルム GlassFish で始める詳細 JDBC レルム | 寺田 佳央 - Yoshio Terada

Javaの道:Tomcat(13.JDBCレルムによるFORM認証)

GlassFishのJDBCレルムを利用する - Programming Studio

OTN Japan - はじめてのOracle9iデータベース:サンプルスキーマを作ってみよう

Java EE 7徹底入門: 標準Javaフレームワークによる高信頼性Webシステムの構築

概要

Java EE では、レルムというものに格納されたユーザID/パスワード グループ情報を参照して認証を行なうそうです。

さらに、WEBで公開された各種リソースに対して、 グループごとにアクセス権を設定してセキュリティを担保します。 これを認可といいます。

また、レルムは抽象的なものであり、ファイルに情報を格納することもあれば DBやLDAPを用いることも出来るようです。

今回はDBに情報を待たせたいと思います。

Java EE 環境準備

今回は、GlassFish + NetBeans8.1 + Mavenで開発環境を整えます。

まずは、NetBeansを立ち上げて、 「新規プロジェクト」→「Maven」→「Webアプリケーション」と選択。 サーバはflassFish4.1、Java EEは7を選択。

なんか色々ダウンロードしてきて、こんな感じにプロジェクトが作られました。 (実はあまりMavenしらない人)

f:id:hirohisoEx:20160827215819p:plain

色々な記事で、以下の部分を次のように書き換えてたけどいるのかなぁ。 今回webだけしか使わないからいらないかも、とりあえずこのまま。

javaee-web-api」→ 「javaee-api

画面のハリボテ準備

まずは、ログイン画面とログイン画面後のTOP画面を用意しておきましょう。

「新規」→「その他」→「JavaServer Faces/JSFページ」を選択して、 login.xhtmlを作成します。

f:id:hirohisoEx:20160827215927p:plain

で、このページのレイアウトを編集。

つぎに、このページに対する管理Beanも作成しておきます。 「新規」→「その他」→「JavaServer Faces/JSF管理対象Beans」を選択して、 loginBeans.javaを作成します。

f:id:hirohisoEx:20160827215938p:plain

画像とは違い、実際はスコープをviewスコープにしました。

でココらへんで一回起動・・・あれ?起動しない。。。。\(^o^)/

知らべてみると、そもそもGlassFishがプロジェクトを認識してくれていない・・・ どうやらパスに全角文字が入っているとダメみたいだ、なのでパス変更

でも動かない\(^o^)/オワタ

NetBeansからだと、実行時のエラーが全くわからないため、 ビルドされたwarを直接glassfishの管理コンソールから、 デプロイしてみた。するとこんなエラーが。。。

f:id:hirohisoEx:20160827215859p:plain

あ、loginBeans.javaをSerializableに してなくてエラーになっていたようです。。。

で、気を取り直して実行したら、表示されました。

f:id:hirohisoEx:20160827215951p:plain

めでたしめで・・(もうちっとだけ続きます)

DB設定

では今度はユーザ情報を格納するためのDBを用意します。 今回作成するテーブル構成はこんな感じ。

Java EEの認証仕様に合わせて、グループテーブルを追加しています。

参考サイトではJava DBでしたが、 今回はOracle Database Express Editionを使用したいと思います。

まずは、表領域と接続ユーザを作成します。

表領域

create TABLESPACE study_support
datafile 'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\study_support' size 10m;

接続ユーザ

CREATE USER study_con IDENTIFIED BY admin
DEFAULT TABLESPACE "STUDY_SUPPORT"
TEMPORARY TABLESPACE "TEMP";

この後、connect,Resourcesロール + create Table権限(※)を与えました。

※:Resourcesロールを付与すればテーブル作成出来ると思ってたのに謎

最後にこんなテーブルを用意します。

f:id:hirohisoEx:20160827220006p:plain

GlassFishの設定

あとは、レルムの設定です。 まずはglassfishの管理コンソールに入ります。 http://localhost:4848/common/index.jsf

server-config security realmとたどり Newから新規作成 ページに移ります。

で以下のような設定を行ないます。

f:id:hirohisoEx:20160827220019p:plain

ここまでで、環境的な設定は終わり。 次回は、実際に実装してみて動作するか確認していきます。

ひとり疑似プロジェクトでスキルを高める(要件定義編)

前回は、大したことないし、 さっと決めたいとか言ってけど、機能がいっぱいありすぎて無理だった・・・・

ここで決めることは、 システムの目的/利用者/どんな機能を持っているか/本質的UI/概念データモデル。 くらいにしてたんだけど、すでにお腹いっぱい(ヽ´ω`)

全部色々細かくやっていたら2016年が終了しそうなので、 ログインと勉強会を登録/検索/参加する機能の最小限だけ先に実装する計画に・・・・

使用したツールなど

Github
ドキュメント全般ここで管理しました。(github初めて使った。。。。)
Markdown
Githubでドキュメント書くならこれでしょうってことで。 ついでにatomも導入。(emacs派だったけども)
GUI Flow
画面遷移およびUIの記述に使用。
ER Master
概念データモデルの作成に使用。

というかぶっちゃけどれも初体験

使用したツールの導入などはまた別途記事に。

要件定義について

単純な機能だろうとか思っていたけど全然そうじゃなかった。

必要な機能一覧を洗い出して、ユースケース記述を書いていくと、 考慮しないといけないところが出てくるわ出てくるわ、、、、、

例えば、登録した勉強会の日時場所が他の勉強会とかぶっていた場合とか、 勉強会の募集人数が開催場所のキャパを超えていた場合とか、 初めは全然意識して無いのがちらほら・・・

こういうのも訓練になって良いと思う。

リポジトリ

とりあえず以下のサイトを参考にアカウントの作成、 リポジトリの作成&公開までした。

2014年版Githubの使い方!Windowsで初心者でも簡単アップロード

作成したリポジトリは以下。

https://github.com/hirohiso/--study

githubwindowsツールの使い方はもうちょっと調べる必要ありそう。 tortoiseGitの代わりとして使えるのかな?

とりあえず、実装に移っていきます。。。。。。

ひとり疑似プロジェクトでスキルを高める

疑似プロジェクト

仕事だけではスキルはあがらない

SE6年目にして実感。今やっていることは、 外部設計でExcelをこねくり回しているだけ(無心でExcel方眼紙作業をやっている)。 やはり、内部設計や実装、単体テストとかもやってみたい。 (しかもできるだけ最新の技術使って)

自分ですればいいじゃん

てなわけで、自分でお題を設定し、 上流~下流までやれば上記の鬱憤を晴らせるのではと考えた。

お題

この設定は割りとむずかしい(自分の想像力の頭ではまず候補が出てこない・・・)。 ネット上にお題一覧が転がっていれば早いけど・・・

ちょっと2,3日ほど考えて「社内勉強会管理システム」という架空のシステムを作ることにした。データ的にマスタ2~3個、トランザクション1~2個のシンプルなアプリケーションで済むはず。

いちおう候補としては以下も考えた。

  • 図書予約システム
  • CDレンタルシステム

どちらもやりがいありそうだが、業務ルール設定時に無限に想像が広がってしまいそうなので今回はやらないことに・・・。

計画

お題も決まったのであとは計画。 SIer身分なので、要件定義→外部設計→内部設計→実装→単体テスト結合テスト のオーソドックスな順でやっていくことにした。 要件定義、外部設計は、顧客=俺なのでちゃちゃっと仕様書書いて終わらせたい。

要件定義/外部設計(1週間)→内部設計(1週間)→ 実装(1週間)→単体テスト/結合テスト(3週間) で1.5ヶ月くらいで出来るかなぁ

次回

要件定義/外部設計についてまとめてみる。 この工程で重要なのは合意形成の技術であり、 ひとり疑似プロジェクトだとどうしようもないので簡単にすませるつもり。