MacでWebアプリを開発、Linuxで運用という個人的にはベストな環境を目指す。
WebObjectsは素晴らしいが、Tomcatもさわっておかねば...。
使うDBは会社じゃOracleだけど、個人ではMySQLでいいよね。
ってことで、Java, Tomcat, Eclipse, MySQL をセットアップしていきつつ、MacでWebアプリを作っていこうという企画なのだ。
Eclipseのインストール
ターミナルで確認しておく。
% java -version
java version "1.4.2_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_09-232)
Java HotSpot(TM) Client VM (build 1.4.2-54, mixed mode)
今回、ダウンロード時のバージョンは、Eclipse SDK 3.1.2, Mac OS X (98 MB)
http://www.eclipse.org/downloads/index.php
% tar zxvf eclipse-SDK-3.1.2-macosx-carbon.tar.gz
解凍された eclipseフォルダをアプリケーションのディレクトリに置いておく。
スプラッシュスクリーン
作業領域の指定。とりあえず、そのままで。
左上の×をクリックしてWelcomeウィンドウを閉じると、
はい、準備完了。
Eclipseのインストールが完了したら、日本語化する前に、動作テストを行っておくべし。
お約束のHelloWorldプログラムを作って、Eclipse開発の流れをつかむ。
むかーし数年前かな、Eclipseを初めてさわったときに、起動やら、何やら、もたもたしているなーと感じたけど、今はPowerMac G5を使っているし、JavaのVMも最適化されてきているせいか、さくっと動くようになりました。ありがたや。
左端のNewアイコンのとなりの▼をクリックして、Project...を選択する
[Java Project] > [Next>]
[Project name] に HelloWorld を入力する。
[Finish] をクリックする。
プロジェクトは作った。次にクラスを作る。
[HelloWorldアイコン] を右クリック > [New] > [Class]
[Package:] > sample と入力する。(省略可)
[Name:] > HelloWorld を入力する。(これがクラス名)
[Which method stub...] > public static void mainをチェックする。(メインプログラムだぞ、と)
[Finish] をクリックする。
以下のようにプロジェクトの中にパッケージ、そしてパッケージの中にHelloWorldクラスができる。
System.out.println("こんにちは、Eclipse!"); 簡単に入力するための補完機能を利用するには、
「sysout」と入力する。
Controlキー + スペースキー を押す。
以上で System.out.println(); が自動入力される。
Macのスポットライトが機能してしまうときは、システム環境設定のSpotlightで、キーボードショートカットをオフにしておけばOK。
保存したあと、
[メニューバー Run] > [Run...] を選択する。
Javaアプリケーションだぞ、と教えるために、
[Java Application] を選択 > [New] ボタンをクリックする。
[Name:] HelloWorld
[Project:] HelloWorld
[Main class:] sample.HelloWorld
そして、[Run] をクリックする。
ウィンドウ内の下側、コンソールに「こんにちは、Eclipse!」が表示される。
http://www.atmarkit.co.jp/fjava/rensai3/eclipse31_01/eclipse31_01_1.html
動作テストも完了したので、日本語化してみる。
いたって簡単。日本語の情報がつまったファイルを解凍するだけ。
ただ、解凍するときは、Eclipseアプリケーションと同じディレクトリで作業する、という点だけ注意すればよろし。
日本語化してくれている人たちに感謝。
無理に日本語化する必要は無いと思うけど、Eclipseに慣れるまでは日本語化バージョンの方がいいかな。
http://download.eclipse.org/eclipse/downloads/index.php
3.1.1_Language_Packs をクリックして、ダウンロードページへ進む。
テーブル の SDK Language Packs の 1行目に NLpack1...省略...Japanese と書いてある。
で、Linuxの列の NLpack1-eclipse-SDK-3.1.1a-gtk.zip(Eclipse本体の日本語化) と NLpack1_FeatureOverlay-eclipse-SDK-3.1.1.zip(フィーチャーの日本語化) をダウンロードする。
ちなみにFeatureOverlayは、フィーチャーの一覧などを日本語化してくれる。
Eclipse を終了している事を確認する。
Eclipse は、アプリケーションのディレクトリに置いてあるとする。
日本語化のzipファイルも、アプリケーションのディレクトリに置いてあるとする。
以上、準備が整ったら、
% cd /Applications
% unzip NLpack1-eclipse-SDK-3.1.1a-gtk.zip
% unzip NLpack1_FeatureOverlay-eclipse-SDK-3.1.1.zip
ほとんどの部分が日本化されましたよ!
一部、英語のままですが、Eclipseを終了し、もう一度起動するとこのように!
ショートカットのメモを残しておく。
[コマンド] + [Shift] + [L] ショートカットキーをポップアップ表示させる。
まだまだ、下準備の段階。データベースをインストールしておく。
MySQL 4.1を利用する。(4.1.18というバージョンでした)
今は、Mac OS X 10.4 (PowerPC, 64-bit)用 というようにdmg形式でバイナリが用意されているんですな。ラクチンだね。
http://dev.mysql.com/downloads/mysql/4.1.html
ここにStandard版、Max版、Debug版があり、Standard版をダウンロードする。
ダウンロードした、mysql-standard-4.1.18-apple-darwin8.2.0-powerpc-64bit.dmg をダブルクリックしてイメージをマウントする。
mysql-standard-4.1.18 をダブルクリックしてインストールを開始する。
素直に続ける。
そして続ける。
さらに続ける。でインストール完了。
同様に、MySQLStartupItem.pkg もインストールしておく。
MySQL.prefPane もダブルクリックしてインストールしておきましょ。
システム環境設定から簡単に、MySQLをスタート、ストップできますんで。
Start MySQL Server ボタンをクリックしてスタートさせる。
psコマンドか、アクティビティモニタでMySQLがサーバとして動作しているか確認する。
ターミナルを起動して、クライアント接続してみる。
rootユーザ、パスワードは無し、でログインする。
% /usr/local/mysql/bin/mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 232 to server version: 4.1.18-standard
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.06 sec)
mysql>
はい、無事に接続できました。
show database; で、初期のデータベースも表示されますな。
exit; で終了しておきましょう。
MySQLの管理者用アカウントrootのパスワードが、無しという状態が気になる人はパスワード設定すればいいんだけど、開発用にMacを使うのでいらないっす。面倒っす。
もちろん、運用マシンにはパスワード設定しときましょ。
以下、補足。
root用パスワード設定したいときはこのように2つのコマンドで設定。2行目は、ホストネームを指定しているんですな。
/usr/local/mysql/bin/mysqladmin -u root password <password>
/usr/local/mysql/bin/mysqladmin -u root -h `hostname` password <password>
ターミナルをよく使うのであれば、毎回/usr/local/mysql/bin/mysql と入力するのは面倒なのが人情。
% cd ←ホームディレクトリに移動する。
% vi .tcshrc ←.tcshrcを編集する。
以下のように一行追加する。
set path=(/usr/Local/bin $path)
set path=(/usr/Local/mysql/bin $path) ←追加する。
別のターミナルを起動して、mysql だけ入力して起動すればOK。
システム環境設定のMySQLで設定する。
あるいはターミナルで /etc/hostconfig を編集して、MYSQLCOM=-YES- をNOにする。
Macをサーバとして利用していて、遠隔操作するときはターミナルでコントロールする方が楽だもんなー。
http://dev.mysql.com/doc/refman/4.1/ja/mac-os-x-installation.html
Webアプリの運用環境Tomcatをインストールする。
Tomcatの概念についてはitb-TECHや@ITでわかりやすく説明されている。
http://itbtech.itboost.co.jp/jserv/jserv_04.php
http://www.atmarkit.co.jp/fjava/index/index_java.html
Tomcat5.5からは、Java1.5が必要らしい。しかし自分が使っているバージョンは1.4.2なのだ。だって今使っているWebObjects5.2はJava1.4.2対応なんだもん。
う、Tomcat5.5使うには、Java1.5(J2SE5.0)をインストールをせねばいかん...ということか。
J2SE 5.0 「リリース4」だと、1.4.2よりも優先され、デフォルトバージョンになってしまうので、WebObjectsへの影響がコワイ。なので J2SE 5.0 リリース3をインストールしておいた。リリース3だと、特別な指定をしないかぎり、1.4.2が通常起動されるのだ。
J2SE 5.0 リリース3のダウンロード
http://www.apple.com/jp/ftp-info/reference/java2se50release3.html
情報はこちら
http://docs.info.apple.com/article.html?artnum=302412-ja
でも、リリース4をインストールしたかったりもするもんだ。そんな人は、マニュアルでデフォルトバージョンをコントロールするのがいいと思われる。
デフォルトのJavaのバージョンを変更したいときはココをいじる。
システム > ライブラリ > Frameworks > JavaVM.framework > Versions > CurrentJDK
このCurrentJDKは、エイリアス。コマンド + I でオリジナルのディレクトリが1.4.2をさしている事がわかる。リリース4をインストールして、デフォルトがJ2SE 5.0 になってしまい困るときは、このようにすれば元にもどる。
% cd /System/Library/Frameworks/JavaVM.framework/Versions
% sudo ln -fsh 1.4.2 CurrentJDK
J2SE 5.0 Release 4 アップデートをインストール後の、Java の問題
http://docs.info.apple.com/article.html?artnum=303526-ja
http://tomcat.apache.org/download-55.cgi(すぐにダウンロードできる)
http://tomcat.apache.org/ (ホーム。その他のバージョンもダウロードできる)
http://jakarta.apache.org/site/downloads/index.html(リンクがわかりにくい)
Tomcat5.5.17をダウンロードして解凍する。
% tar zxvf apache-tomcat-5.5.17.tar.gz
解凍したら、テキトーなとこに置いておく。どこでもいいんだけど、ファインダで確認しやすいので、アプリケーションのフォルダに入れておいた。
/Applications/apache-tomcat-5.5.17
とアクセスもしやすいかな...。
運用するSolaris, Linuxにあわせて、/usr/local/tomcat にする場合、
# mv apache-tomcat-5.5.17 /usr/local/
# ln -s /usr/local/apache-tomcat-5.5.17 /usr/local/tomcat
ホームディレクトリにエイリアスを作っておくと便利かも。
% cd ~/
% ln -s /usr/local/tomat tomcat
tomcatアプリケーションの起動スクリプトをキックして、とりあえず起動してちゃんと動くことを確認する。
% cd /Applications/apache-tomcat-5.5.17/bin/
% ./startup.sh
Using CATALINA_BASE: /Applications/apache-tomcat-5.5.17
Using CATALINA_HOME: /Applications/apache-tomcat-5.5.17
Using CATALINA_TMPDIR: /Applications/apache-tomcat-5.5.17/temp
Using JRE_HOME: /System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home
あれれ、JRE_HOMEを J2SE 1.5 を指しているようで、無事に動いてしまいました。
startup.shの中身をのぞくと、Darwinという文字があったので、1.5をうまく指定するようにしてあるのかもしれません。だって、java -version すると1.4.2のままですから...。
Safari で、http://localhost:8080/ へアクセスする。
左メニューの下の方、JSP Examples をクリックすると、
このようにサンプルも見れて、動作の確認OK。
% cd /Applications/apache-tomcat-5.5.17/bin/
% ./startup.sh ←起動
% ./shutdown.sh ←終了
起動、停止を簡単にするために自分のディレクトリに起動スクリプトを用意しておく。
% cd ~/
% mkdir bin
% cd bin
binディレクトリに起動スクリプトを書いておく。
start_tomcat
#!/bin/sh
export CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME=/usr
$CATALINA_HOME/bin/startup.sh
stop_tomcat
#!/bin/sh
export CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME=/usr
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/conf/web.xmlを開いて、以下の4箇所のコメントアウトを削除する。
100行目あたり
<!-- ←削除
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
--> ←削除
350行あたり
<!-- The mapping for the invoker servlet -->
<!-- ←削除
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
--> ←削除
「Invoker Servlet」(web.xmlで明示されていない無名サーブレットクラス)は、セキュリティの脆弱さから非推奨とされている。web.xmlの記述が面倒なのと、今の段階ではテストを中心に行うのでInvoker Servletとし、実運用ではweb.xmlでURLマッピングする。
Tomcatの仕組みを簡単に把握するために手を動かしてみる。
自分で作った起動スクリプトで、tomcatを起動する。
$ ~/bin/start_tomcat
Test.jsp
<%@ page contentType="text/html; charset=Windows-31J" %>
<html>
<head>
<title>JSPのテスト</title>
</head>
<body>
ただいまの時間<br>
<%= new java.util.Date() %>
</body>
</html>
文字コードは、Shift_JIS、改行は、LF にしておいた。
保存先は、
$CATALINA_HOME/webapps/ROOT/Test.jsp
http://localhost/Test.jsp へアクセスする。
JSP2.0仕様書「JavaServer Pages Specification Version 2.0」をダウンロードしておく。いまのところ英文のみらしい。
JavaServer Pages Specification Version 2.0
http://jcp.org/aboutJava/communityprocess/final/jsr152/
JavaServer Pages (JSP) v2.0 Syntax Reference
http://java.sun.com/products/jsp/syntax/2.0/syntaxref20.html
J2EE v 1.4 API Specification
http://java.sun.com/j2ee/1.4/docs/api/index.html
サーブレットの感覚をつかんでみる。
HelloWorld.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head>");
out.println("<title>Sevlet Test</title>");
out.println("<meta http-equiv=¥"Content-Type¥" content=¥"text/html;charset=X-EUC-JP¥">");
out.println("</head>");
out.println("<body bgcolor=¥"#FFFFFF¥">");
out.println("Hello World");
out.println("こんにちは");
out.println("こんばんは");
out.println("</body></html>");
out.flush();
out.close();
}
}
感触をつかむためだけなので手っ取り早く、すでに用意されている Examples の下にHelloWorld.javaとして保存する。
$ACTALINA_HOME/webapps/servlets-examples/WEB-INF/classes/HelloWorld.java
クラスパスを指定してコンパイルする。
$ javac -classpath /usr/local/tomcat/common/lib/servlet-api.jar HelloWorld.java
HelloWorldにアクセスできるように $tomcat/webapps/servlets-examples/WEB-INF/web.xml で設定する。
HelloWorldExample という既にある設定をマネして、HelloWorldの設定を追加する。
120行付近に追加
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
160行付近に追加
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/servlet/HelloWorld</url-pattern>
</servlet-mapping>
http://localhost:8080/servlets-examples/servlet/HelloWorld で、アクセスされるとしたら、「servlets-examplesフォルダ」の中の「servlet/HelloWorld」
$ cd /usr/local/tomcat/bin
$ ./shutdown.sh
しばらく待ってから、
$ ./startup.sh
再起動を忘れないように実行する。
http://localhost:8080/servlets-examples/servlet/HelloWorld
Tomcatプラグインを入れておけば、EclipseからTomcatを起動・停止できて便利っつーことですな。
WTP(EclipseのWeb Tools Projectの略)をインストールしたかったけど、よくわからんかったので、Tomcatプラグインを入れることにした。ま、BEAもJBossも使う予定は無いので、シンプルにTomcatプラグインでいくのがよろしいかと...。
Eclipseを起動して、[Eclipse] > [環境設定] で、JVM1.5を選択する。1.5は1.5.0のエイリアス。1.5を選んでおけば楽。もし最新版が1.5.1であれば、自動的に1.5.1を指してくれる...はず。
http://www.sysdeo.com/eclipse/tomcatpluginfr
tomcatPluginV31.zip をダウンロードして解凍する。
% unzip tomcatPluginV31.zip
解凍してできた com.sysdeo.eclipse.tomcat_3.1.0 フォルダをEclipseアプリのpluginsフォルダに入れる。分かりやすく赤色のカラーラベルを使ってみました。
Tomcatのアイコンが追加されておりまする。インストールは完了。
環境設定で、Tomcatアプリのバージョンや場所を教えてあげる。
バージョン5.xを選択して、Tomcatホームを指定する。
JVMは、1.5を指定する。
Tomcatベースも同様にTomcatアプリのディレクトリを指定する。
Tomcatアイコンをクリックして、起動、停止ができることを確認する。
suできるようにMacの環境を整えておく。3ステップでルートユーザを有効にできる。
1. NetInfoマネージャを起動する。
アプリケーション > ユーティリティ > NetInfoマネージャ
2. 起動後、メニューバーのセキュリティ > 認証... を選択する。
3. 自分のパスワードを入力後、メニューバー > セキュリティ > ルートユーザを有効 を選択する。
警告が表示された後、ルートパスワードを新規に入力する。
$ su -