2014年1月24日金曜日

Spring Tool SuiteでWebアプリ作成その8

2014/05/03追記
サーバ再起動するとPublic DNS変わっちゃうから注意。

ローカルのTomcatで動作確認できたということで次のステップは・・・
AWS上のTomcatで動作させてみよう。

ということで、まずはネットサーフィン。
  1. EC2インスタンスにJREを導入してみる 
  2. AWSとは? 
  3. AWS入門 
まずは、Tomcat入れる前に「AWSとは?」で基本を学ぶかな。
アカウント作成はしたものの、英語の管理画面に酔いそうだったので・・・。

1.勉強する前に下準備。まずはクライアント環境構築。
※クライアントが接続に必要なpemファイルはLinuxインスタンス作成時に作成したものです。後日いつこのファイル作ったのかわからなくなったので追記。

以下のクライアントソフトをインストール。
TeraTermは公式サイト、PuTTYgenはWinSCPのインストールサイトから。
AWS公式手順はこちら。
  1. TeraTerm
  2. WinSCP(AWS推奨。Connectボタン押すとPuTTyと共にの設定手順が出てくるので)
  3. PuTTYgen(WinSCP用にprivate keyを変換するため) 
※WinSCPインストール時にPuTTYgenも選択できます。
※TeraTermでログインするには
   1. ホストに"ec2-user@ec2-54-200-154-193.us-west-2.compute.amazonaws.com" ※Public DNSは毎回変わるから注意。
   2. 秘密鍵を指定して接続
 
2.次は、Amazon Linuxのインスタンスを作成。
以下のサイトでまずは、tomcatをインストールしてみます。
※1.のサイトでやっていたJREインストールは元から入ってるやつでOKと判断しました。
EC2 Micro Instance で Tomcat6 を立ち上げてみた

ポートが空いてないようでインターネットからのアクセスは失敗。ポート設定手順調べなきゃ。
⇒AWSコンソールからSecurity Groupsに追加でOKでした。

3.その次は、STSにTool Kit For Eclipseを導入してみますか。
AWS ToolkitでTomcatクラスタをAmazon EC2上に楽々構築
本家AWS Toolkit for Eclipse
⇒Tool Kitの導入は出来たけど実行サーバにAmazon EC2 Tomcat v6.0 Clusterが追加されない。こんな感じで出てくるはずなんだが。
⇒EclipseからAWSにデプロイは魅力なんだが代替案があるので一端調査中止。

4. 最後はMongoDBを導入かな。
AWSで今から始めるmongodb(1) インストールからサーバ接続まで
※confの作成コマンドはlinux上でファイル編集時には重宝しそうなので覚えておくと吉。
※catがEOFが出現するまで入力文字列を書き出すコマンドになる。
$cat <<EOF > 出力先ファイル
>入力文字列
>入力文字列
>EOF

折角なので、以下のLinuxの標準ディレクトリ構成でインストールします。
$sudo tar zxvf mongodb-linux-i686-2.2.7.tgz -C /usr/share
※-C 指定したディレクトリに展開

メインディレクトリ:/usr/share/mongodb-2.2.7
メインディレクトリの配下に
bin
script
conf    ->/etc/mongodb-2.2.7
data    ->/var/data/mongodb-2.2.7
log      ->/var/log/mongodb-2.2.7
conf以下はすべてシンボリックリンク。(以下設定コマンド)
$pwd
/usr/share/mongodb-2.2.7
$sudo ln -s /etc/mongodb-2.2.7 conf
$sudo ln -s /var/data/mongodb-2.2.7 data
$sudo ln -s /var/log/mongodb-2.2.7 log

その他補足コマンド
バックエンドで実行中のコマンド確認
$sudo ps alx
MongoDB停止
$sudo kill -2 [プロセスID]

追記:
MongoDBインストールしながら、DB接続にはユーザIDとパスワードは設定するでしょ。
ということに気づき、以前作ったRESTアプリにユーザIDとパスワード設定機能を追加しました。
修正ソース
dw.spring3.rest.config.AppConfig
mongodb.properties

あと、テスト用にAWSのAPサーバにもMongoDBをインストールしました。(クライアントのみ使用を想定)
最後にMongoDBの設定ファイルを簡単にまとめたサイトリンク

2014年1月22日水曜日

Spring Tool SuiteでWebアプリ作成その7

実サーバへのリリースを想定して、STS上でWARファイルをエクスポートし、Tomcatで動作させてみることにしました。

まずは、Tomcat導入手順。
1.apache-tomcat-7.0.50-windows-x86.zipをApacheのサイトからダウンロード
2.適当なディレクトリに展開。(今回はD:\apache-tomcat-7.0.50で展開)
3.bin配下のstartup.batを編集。先頭に以下を追記。
set "CATALINA_HOME=D:\apache-tomcat-7.0.50"
set "JAVA_HOME=Javaのインストールディレクトリ"


4.管理メニュー(http://localhost:8080/)から入れるManager AppとHost Managerのユーザを%CATALINA_HOME%\conf\tomcat-users.xmlに追記。
  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="ユーザ名" password="パスワード" roles="manager-gui,admin-gui"/>

以上。

%CATALINA_HOME%webappsにWARファイルを配置してサーバ再起動で特に問題なくを動作させることに成功。

ただし、デフォルト設定だとSTS上で動作させるときとURLが変わっているのでご注意!!
localhost:8080/RestPractice/service/***

2014年1月15日水曜日

Spring Tool SuiteでWebアプリ作成その6

何とかSpringアプリからMongoDBに接続してデータのinsertには成功。
でも、データ取得や更新、削除は上手くいかない模様。
色々調べた結果、理由は以下な感じでした。

  1. collectionに対応したデータBeanの命名ルールの認識不足。データBean名がEmployeeの場合、collectionはemployeeに自動マッピングされる。
  2. documentのKeyであるidに対応するデータBeanの属性型はString or BigIntegerである必要あり。
  3. idを条件にMongoTemplate.removeを呼び出すとqueryのマッピングでエラーになる。findでidを条件にデータ取得してそのオブジェクトをパラメータにremoveすると成功。(なぜマッピングでエラーになるかは調査中)
参考サイト
Spring Dataを利用したMongoDBの操作

次の課題はエラーハンドリングをどうするかですね。データ取れなかった場合とか。
このサイトで出てきたキーワードで調べてみるかな。
springの3種類の例外ハンドリング方法を紹介します

後、RESTfulアプリケーションのセキュリティ対策も気になるところ。
Twitter APIとかで使用されているOAuthプロトコルとか使って認証するのが基本なのかな。
ゼロから学ぶOAuth

2014年1月10日金曜日

Spring Tool SuiteでWebアプリ作成その5

SpringでRESTfulなWebサービスの動確に成功。

次は、以下サイトを参考にして、MongoDBからデータを取得するプログラムに挑戦しよう。
Spring Data DocumentでMongoDBを使う

RESTful Webサービスと連動させてみるかな。

始めてはみたものの、Springのアノテーションで躓き。(@Autowiredが設定された変数とAppConfigクラスの関係が何となくピンのこない)
DIコンテナあんまり使ったことないからな。
というわけでSpringのアノテーションについて調査。
  1. Spring におけるアノテーションと設定ファイルの使い分け
  2. Spring 2.5の新機能―Part 1
調査中にたまたま見つけた面白そうなサイト。空いた時間に挑戦しよう。
Code IQ

おっとっと、 @Configurationアノテーション使うとき、cglibを入れなきゃいけないみたい。
デプロイ時にめっちゃエラーが・・・。
Mavenの依存関係にcglib追加。 それもバージョン2.2.2じゃなきゃダメなので注意。

再度、Springのアノテーションで躓き。 
@AutowiredでDB設定情報を取得するクラスも@Component等のクラスにしてインスタンス生成はSpringにお任せしなきゃいけないようです。(以下、簡単な手順)
1.定義ファイルに対象クラス(今回はデータアクセスクラス)のコンポーネントスキャンを追加
ex.
<context:component-scan base-package="dw.spring3.rest.da" />
2.呼び出すときには、@AutowiredでSpringに自動注入してもらう
ex.
@Controller
public class EmployeeController {
    @Autowired
    private EmployeeDataAccess da;

2014年1月5日日曜日

Spring Tool SuiteでWebアプリ作成その4

やっと、RESTful Webサービスの動作確認に入れました。

まずは、web.xmlをはじめとした定義ファイルの整理ですね。以下サイトを参考に作業しました。
なんとか以下サイトのサンプル動確に成功。やっぱり環境構築に時間かかりました。
次は、元々の最初に検索にヒットしたサイトのサンプルを動かしてみようっと。

2014年1月4日土曜日

Spring Tool SuiteでWebアプリ作成その3

昨日のサンプル動かすにはライブラリ追加が必要。
STSだとMaven依存関係に追加が必要なんだけれども、やり方がイマイチわからないので調査中。
使ったことないツールの設定変更ってやっぱり大変だな。
  1. EclipseでMavenを使ったライブラリ管理
  2. STSのMaven設定
  3. STS導入後Mavenの更新ができない問題が起きたら
  4. JDBCライブラリをMavenのローカルリポジトリに登録
  5. Mavenのローカルリポジトリ登録
Mavenの依存関係追加手順まとめ
  1. 上記3.と1.(Maveのindex更新)を参考にセントラルリポジトリとアクセスできるようにする。
  2. セントラルリポジトリに必要ライブラリがない場合、4.、5.を参考にローカルリポジトリに登録
補足
1.の手順で激嵌り。セントラルリポジトリとのindex作成に失敗する事象が。(nexus-maven-repository-index.zipが作成できない。)
かなり、迂回してCドライブの容量不足という結論に至ったのですが、その時の参考サイトリンク。
  1. linux圧縮・解凍コマンドまとめ ⇒ ダウンロードしたgzファイルを解凍してみて必要なHD容量が足りないことに気づく。STSのMavenコンソールにもう少し情報が出ていれば・・・。
  2. MavenリポジトリのVeiw追加 ⇒ Mavenインデックスの更新にSTSの再起動が不要となるため今後も使いそう。使い慣れている人には常識かも
  3. Nexus indexerを使ってのindex生成
  4. Nexusとは&インストール手順 ⇒ Mavenリポジトリの管理サーバ。ローカルに立てます。Proxy代わりにもなる。
  5. STS始動時のindex自動更新設定方法 ⇒ ウィンドウ -> 設定 -> Maven
Window7でダウンロードフォルダのリンク先はダウンロードフォルダ->右クリックで簡単に変更可能。このフォルダのファイルがCドライブを圧迫していたのが今回の根本原因でした。
あと、STSにMavenのコンソールを表示するにはコンソール追加 -> Maven ConsoleでOK。

追記
流石、Mavenセントラルリポジトリ。1.の手順のみでOKでした。

2014年1月1日水曜日

Spring Tool SuiteでWebアプリ作成その2

前回、掲載したSPRING TOOL SUITEを使ってWebアプリのサイトだとサンプルがシンプルだったので、もう少しRESTfulなWebサービスに突っ込んだ掲載のあるサイトリンク。

これを元にサンプル作成してみよう。cURLも必要そうなので初期セットアップの参考リンクも。
  1. SpringでRESTfulなWebサービス
  2. win7にcURLコマンド設定

Spring Tool SuiteでWebアプリ作成その1

一から始めていると色々忘れていることが・・・。

まずは、JSP文字化け対策
metaタグ入れればいいと思ってた・・・。そう言えばそうでした。

JSP、サーブレットの基礎固めも必要かな。cタグとかcoreライブラリ、実装してたころ使ってなかったやつ全然身についてないね。サーブレットも色々抜け落ちてそう。
この辺は、概略押さえといて必要になって深ぼるかな。

最終的に
jQuery経由、Webサービス起動にしたいのでそのための資料リンク&CSS。
  1. jQueryチュートリアル
  2. jQuery日本語リファレンス
  3. jQueryプラグインサンプル
  4. CSSサンプル集