- Tomcat/4.0.5の単体起動
- 設定ファイルの作成
- Tomcatの起動
- 動作確認
- Tomcat/5.5.27の単体起動
- 設定ファイルの作成
- Tomcatの起動
- 動作確認 Screen 94
- Webアプリケーションマネージャ用ユーザの追加
- Apache/1.3.41の単体起動
- 設定ファイルの作成
- Apacheの起動
- 動作確認
- Apache/2.0.63の単体起動
- 設定ファイルの作成
- Apacheの起動
- 動作確認
- Apache/1.3.22とTomcat/4.0.5の連携
- httpd.confの修正
- tomcat.confの修正(修正の必要なし、参考まで)
- Tomcat側コネクタの設定
- Tomcat、Apacheの起動
- 動作確認
- Apache/1.3.22とTomcat/5.5.27の連携
- tomcat.confのバックアップをとる。
- tomcat.confの編集
- workers.propertiesの作成
- Tomcat側コネクタの設定
- Tomcat、Apacheの起動
- 動作確認
- Apache/2.0.63とTomcat/5.5.27の連携
- httpd.confの修正
- Tomcat、Apacheの起動
- 動作確認
- rcスクリプトからの起動
- ファイル所有者の変更
- JSPでのOracleへの接続
- JDBCドライバのコピー
- JDK 1.4 / 5.0 ojdbc14.jar JDBCクラス
- JDK 1.2 / 1.3 classes12.jar JDBCクラス
- Tomcat/5.5.27の場合には/jsp-examples/WEB-INF/lib以下にコピーして、Tomcatユーザ(nobody:apacheから起動がかかるのでそれと同じユーザー)がロードできるように読み取り権限を付与することに注意。
- Tomcat/4.0.5の場合には「/var/apache/tomcat/webapps/examples/WEB-INF/lib」ディレクトリを作成してコピーする、他はTomcat/5.5.27とじ。
- JSPの作成
- Tomcat/5.5.27・・・/var/apache/tomcat55/webapps/jsp-examples/db.jsp
- Tomcat/4.0.5・・・/var/apache/tomcat/webapps/examples/jsp/db.jsp
- 動作確認
Solaris 10 には、ApacheはVersion 1.3.41と2.0.63(以降Apache/1.3.41、Apache/2.0.63)が、Tomcat はVersion 4.0.5と5.5.27(以降Tomcat/4.0.5、Tomcat/5.5.27)が付属している。これらはほんの少しの設定を行うことにより、稼動状態になるようにパッケージングされている。さらに、Tomcat はServlet/JSPの処理を行う「サーブレット・コンテナ」の機能だけではなく、単体でもWebサーバーとして機能するので、Tomcat単体、Apache単体、Apache/1.3.41とTomcat との組み合わせ等、何をWebサーバーとするのかで、多様な選択が可能になっている。
  以下rootユーザーから実行する。
 
下記のように設定ファイルを作成して、Tomcatを起動して、動作確認を行う。
Tomcat の動作は設定ファイル「/var/apache/tomcat/conf/server.xml」で制御されるので、同パスにあるテンプレート「server.xml-example」をこれにコピーすることにより作成する。
TomcatはJava環境上で動作するので、Java環境の位置「JAVA_HOME」と、起動するTomcatの位置「CATALINA_BASE」を環境変数に定義して、「startup.sh」で起動させる。停止は「shutdown.sh」である。
Tomcatは起動するとserver.xmlで設定したポート8080でリスニングして待機状態であるので、クライアントのブラウザーからはURLに「http:// server_addr :8080」を指定して、HTTPリクエストをWebサーバーであるTomcatに送信すると、HTTPレスポンスの返信であるTomcat Version 4.0.5の画面が表示される。ここから「JSP Examples」、「Servlet Examples」をクリックして、それぞれのメニューからJSP・Servletのプログラムをクリックすると「サーブレット・コンテナ」としてのTomcatの動作確認ができる。
Screen 94 
  
 
下記のように設定ファイルを作成して、Tomcatを起動して、動作確認を行う。
「apache」配下の「tomcat」ディレクトリには、Tomcat Version 4.0.5関連が入っている。その隣に「tomcat55」ディレクトリにはVersion 5.5.27関連が入っている。両ディレクトリは対称性があるため、起動方法はVersion 4.0.5と同じで、パスに「tomcat」とある場合はそれを、「tomcat55」と読み替えればよい。
 
  
  
画面左上にある「Administration」メニューにある項目へのアクセスするユーザーは下表のロールが必要である。
表96| Administration | roles | 
|---|---|
| Status | manager | 
| Tomcat Administration | admin | 
| Tomcat Manager | manager | 
このために、ユーザー情報の設定ファイル「/var/apache/tomcat55/conf/tomcat-users.xml」を編集し、ユーザーの追加を行う。下記の例ではユーザー名:aaa、パスワード:bbbによって設定ファイルの編集を行った。編集が終了したら、shutdown.sh、startup.shコマンドによって再起動すれば設定が有効になる。
下記のように設定ファイルを作成して、Apacheを起動して、動作確認を行う。
Apache/1.3.41の動作は設定ファイル「/etc/apache/httpd.conf」によって制御されるので、同パスにあるテンプレート「httpd.conf-example」をこれにコピーすることにより作成する。
   Apache/1.3.41の起動、停止は下記コマンドにオプションを付けて行う。起動は「start」、停止は「stop」である。
   /usr/apache/bin/apachectl
  
   ブラウザで下記のURLを指定する。
  
下記のように設定ファイルを作成して、Apacheを起動して、動作確認を行う。
Apache/2.0.63の動作は設定ファイル「/etc/apache2/httpd.conf」によって制御されるので、同パスにあるテンプレート「httpd.conf-example」をコピーすることにより作成する。
   Apache/1.3.41の起動、停止はsvcadmコマンドでサービスの起動、停止をするという形を取る。起動は「enable」、停止は「disable」である。
  
   ブラウザで下記のURLを指定する。
  
http:// server_addr
Apache、Tomcatの連携させるためには、Apache側では両者間を中継する拡張モジュールが必要になる。これをコネクタ(Web Server Connector)、またはアダプタ(Web Server Adapter)と呼び、Apache/1.3.22では下記のライブラリが用意されている。
コネクタは、クライアントのブラウザがApacheに投げたHTTPリクエストのURLのパスが、設定したパターンがと一致するときに、ファイルシステムのパスにマップし、中継ポートを経由して、「mod_webapp」はWARP/1.0プロトコル、「mod_jk」はAJP(Apache JServ Protocol)/1.3プロトコル、「mod_jserv」はAJP/1.2プロトコルでTomcatにスルーする。すなわちフロントエンドにApacheを立てて、バックエンドにTomcatを設置した、Webサーバーとアプリケーションサーバーの連携プレーが可能になるのだ。
Apache/1.3.22はTomcat/4.0.5との連携のコネクタに、「mod_webapp」を使用する。その際の処理は下記の設定ファイルによって制御されるので、設定状態の確認をして、必要ならば修正をする。
まずテンプレートをコピーして作成する。次にviにより、Includeディレクティブ行をコメントインして、ここにtomcat.confファイルを読み込むようにする。これによりhttpd.confの設定に続いてtomcat.confの設定が行われる。
ファイル末尾に「:$」で移動して、コメントインする。
デフォルトでコネクタはmod_webappを使用するように設定されているので、修正の必要はない。現状で下記のように定義されている。 (「LoadModule」ディレクティブで起動時に「mod_webapp」のmod_webappのダイナミックリンクライブラリをロードさせ、「AddModule」ディレクティブでソースコードを指定している。)
Tomcat側では先に行った「Tomcat/4.0.5の単体起動」のようにserver.xml をテンプレートからコピーするだけでよい。Tomcatが起動すればWarpConnectorが待ち受けている。
    # cd /var/apache/tomcat/conf
        
    # cp -p server.xml-example server.xml
        
   
  server.xmlのConnectorタグの属性の意味は下記のとおりである。
| 属性 | 値 | 
|---|---|
| className | インプリメントされているクラス名 | 
| port | サーバーソケットを形成して、待機しているTCPポート番号 | 
| minProcessors | コネクタが起動するとき作成するスレッド数 | 
| maxProcessors | 同時に受け付けたリクエストを処理するスレッド数の最大値 | 
| enableLookups | ホスト名をDNSから引くかどうか | 
| appBase | アプリーケーションのベースディレクトリ | 
| acceptCount | 接続リクエストの待ち行列の最大値。 | 
| debug | デバッグレベル | 
server.xmlの記述は下記のようになっている。したがって、Tomcatが立ち上がった状態では8008番ポートにWARP 1.0プロトコルのメッセージが到着するのをリッスンしている。
    <Connector
    className="org.apache.catalina.connector.warp.WarpConnector"
    port="8008"
    minProcessors="5"
    maxProcessors="75"
    enableLookups="true"
    appBase="webapps"
    acceptCount="10"
    debug="0"
    />
   
  
Tomcat、Apacheの起動はすでに組み込まれているrcスクリプトを使用する。下記のシェルスクリプトは名前こそ違っているがハードリンクが張られていて、ノード先の実体のコードは同じものであり、引数に「start」を付ければ起動、引数に「stop」を付ければ停止する処理が書かれている。
/etc/rc0.d/K16apache
/etc/rc1.d/K16apache
/etc/rc2.d/K16apache
/etc/rc3.d/S50apache
/etc/rcS.d/K16apache
上記のスクリプトは、これまでにTomcat、Apacheの単体起動で説明してきたのと同様に下記の「httpd.conf」、「server.xml」ファイルの有無と、その内容によって制御される。「server.xml」が存在すればその内容によってtomcatの起動、停止を行い、「httpd.conf」は同じようにApacheの制御をする。
なお、Tomcat/4.0.5用とTomcat/5.5.27用のserver.xmlが同時にある場合は、Tomcat/5.5.27が優先されて起動する。したがって前作業によって「/var/apache/tomcat55/conf/server.xml」が残っているならば削除する。
/var/apache/tomcat/conf/server.xml (Tomcat/4.0.5)
/var/apache/tomcat55/conf/server.xml (Tomcat/5.5.27)
rcスクリプトはランレベルが推移したときに、実行するのでシステムの起動と終了とTomcat、Apacheは同期して、自動起動と自動終了する。手動では、次のようにスクリプトに「start」引数を加えてタイプすればTomcat、apacheが起動して、「stop」引数を加えてタイプすれば終了する。
    # /etc/init.d/apache start
        
    # /etc/init.d/apache stop
        
   
  
これまでは直接Tomcat の8080ポートを指定して JSP、サーブレットのサンプル画面へ入っていたが、上記の「stop」と、「start」の操作をしてTomcat、Apacheを再起動した後は連携が有効になり、下記8080ポートの指定不要なURLの指定によって、ApacheからTomcatの「JSP Examples」、「Servlet Examples」へ入れるようになる。
http:// server_addr /examples/servlets
「Apache/1.3.22とTomcat/4.0.5の連携」と同じように「/etc/apache/httpd.conf」を修正する。これはすでに修正済みのはずなので省略する。「/etc/apache/tomcat.conf」はコネクタが「mod_webapp」に既定されているので、これを「mod_jk」に変更する。
/etc/apacheディレクトリに移動して、「tomcat.conf.org」の名前でバックアップをとり、viで「tomcat.conf」の編集に入る。
    # cd /etc/apache
        
    # cp -p tomcat.conf tomcat.conf.org
        
    # vi tomcat.conf
        
   
  
コメントアウトするのは「mod_webapp」の定義、コメントインするのは「mod_jk」の定義である。網伏せの部分が修正した結果になる、すなわちコメントインされている場合はコメントアウト、コメントアウトされている場合はコメントインして、同名(:w)でセーブする。なお末尾の「JkMount /jsp-examples/* worker1」の行は原文にはない、追記する。
    #
    # Tomcat configuration file for apache - uses mod_webapp
        
    # as the connector.  Tomcat must already be running and listening
        
    # on port 8008 before apache starts.  This is typically handled
        
    # by the S50apache startup script.
        
    #
    # This file should be 'include'd by the main apache config file.
        
    #
    # Load warp connector module
        
    #
    
     #LoadModule webapp_module     libexec/mod_webapp.so
     #AddModule mod_webapp.c
    
    #
    # Describe connections and contexts - default to examples only
        
    #
    
     #WebAppConnection     conn    warp   localhost:8008
     #WebAppDeploy  examples     conn   /examples/
    
    #
    # Connector information - off by default for security reasons
        
    #
    # WebAppInfo  /webapp-info
        
     
    #
    # When Apache Tomcat 5.5 is used mod_jk module has to be used instead
        
    # of mod_webapp. In such case comment out above lines and uncomment
        
    # and modify lines bellow.
        
    #
     
    
     LoadModule jk_module   libexec/mod_jk.so
    
     
    # You will need to create a file with worker definition with similar
        
    # contents (e.g. /etc/apache/workers.properties):
        
    #
    # worker.list=worker1
        
    # worker.worker1.type=ajp13
        
    # worker.worker1.host=localhost
        
    # worker.worker1.port=8009
        
     
    
     JkWorkersFile /etc/apache/workers.properties
        
     JkShmFile  /var/apache/logs/mod_jk.shm
        
     JkLogFile  /var/apache/logs/mod_jk.log
        
     JkLogLevel    info
        
     JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
        
     JkMount    /servlets-examples/* worker1
        
     JkMount    /jsp-examples/* worker1
        
    
   
  JkWorkersFile:ワーカの定義ファイルのパスネーム
JkShmFile:共有メモリファイルのパスネーム
JkLogFile:ログファイルのパスネーム
JkLogLevel:ログレベル
JkLogStampFormat:日付/時刻フォーマット
JkMount:Tomcatのワーカに転送するURLパス。書式は次のとおり。
JkMount <URL prefix> <Worker name>
網伏せの部分はコメントインして、他の部分は削除して、別名(:w workers.properties)でセーブして、viを終了する。
        …
    削除
    
     worker.list=worker1
     worker.worker1.type=ajp13
     worker.worker1.host=localhost
     worker.worker1.port=8009
    
    削除
        …
   
  worker.list <ワーカ名>:ワーカ名のリスト
worker.<ワーカ名>.type:ワーカのタイプ
worker.<ワーカ名>.host:接続するホスト名
worker.<ワーカ名>.port:接続するポート番号
Tomcat側では先に行った「Tomcat/5.5.27の起動方法」のようにserver.xml をテンプレートからコピーするだけでよい。Tomcaが起動すればAJP/1.3プロトコルの受信を始める。
    # cd /var/apache/tomcat55/conf
        
    # cp -p server.xml-example server.xml
        
   
  
        <!-- Define an AJP 1.3        
     Connector on port 8009 -->
        
         <Connector        
     port="8009"
                 
     enableLookups="false" redirectPort="8443"        
     protocol="AJP/1.3" />
        
    
   
これはApache/1.3.22とTomcat/4.0.5に同じなので参照されたい。
「JSP Examples」、「Servlet Examples」のURLは下記のようになる。
http:// server_addr /servlets-examples/
Apacheのプロキシ機能を使用してTomcatと連携する。httpd.confに連携に使用する必要なモジュール(mod_proxy_http, mod_proxy_ftp, mod_proxy, mod_proxy_connect)はすでにロードするように定義済みなので、ProxyPass ディレクティブを追加するだけでよい。
viにより、ProxyPass ディレクティブを追加する。
    # cd /etc/apache
        
    # vi httpd.conf
        
   
  ファイル末尾に「:$」で移動して、次の2行を追加する。
proxypass /jsp-examples/ http://localhost:8080/jsp-examples/
       
   proxypass /servlets-examples/ http://localhost:8080/servlets-examples/
       
   
  これはApache/2.0.63とTomcat/5.5.27に同じなので参照されたい。
「JSP Examples」、「Servlet Examples」のURLは下記のようになる。
http:// server_addr /servlets-examples/
apache用のrcスクリプト(/etc/init.d/apache)を下記の網伏せ部分のように編集してapache2に対応させる。
     #!/sbin/sh
     #
     # Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     
     # Use subject to license terms.
     
     #
     #ident "@(#)apache.sh 1.6 08/04/04 SMI"
     
     
    
     CONF_FILE=/etc/apache2/httpd.conf
     if [ -f ${CONF_FILE} ]; then
 
 APACHE_HOME=/usr/apache2
 RUNDIR=/var/run/apache2
 CF=`egrep '^[ \t]*proxypass[ \t]' $CONF_FILE`
 
     else
    
 APACHE_HOME=/usr/apache
 CONF_FILE=/etc/apache/httpd.conf
 RUNDIR=/var/run/apache
    
 CF=`egrep '^[ \t]*include[ \t]*/etc/apache/tomcat.conf' $CONF_FILE`
 
     fi
    
     PIDFILE=${RUNDIR}/httpd.pid
     TOMCAT_CF=/var/apache/tomcat/conf/server.xml
     TOMCAT55_CF=/var/apache/tomcat55/conf/server.xml
     
     if [ ! -f ${CONF_FILE} ]; then
     
 exit 0
     
     fi
     
     if [ ! -d ${RUNDIR} ]; then
     
 /usr/bin/mkdir -p -m 755 ${RUNDIR}
     
     fi
     
     # see if we need to start/stop tomcat also
     
     
     if [ -n "$CF" -a -f $TOMCAT55_CF ]; then
     
 TOMCAT=yes55
 TC_USER=`egrep '^[ \t]*User[ \t]' $CONF_FILE | nawk '{print $2}'`
     
     elif [ -n "$CF" -a -f $TOMCAT_CF ]; then
     
 TOMCAT=yes
 TC_USER=`egrep '^[ \t]*User[ \t]' $CONF_FILE | nawk '{print $2}'` 
    
     else
 TOMCAT=no
     fi
    
     TC_USER=`echo $TC_USER|awk '{print $1}'`
 
    
     
     case "$1" in
     
     start|startssl|sslstart|start-SSL)
 /bin/rm -f ${PIDFILE}
     
 cmdtext="starting"
 if [ "x$TOMCAT" = xyes55 ]; then
     
    
  (CATALINA_HOME=/usr/apache/tomcat55; export CATALINA_HOME; \
 
    
      CATALINA_BASE=/var/apache/tomcat55; export CATALINA_BASE; \
     
      JAVA_HOME=/usr/java; export JAVA_HOME; \
     
      /bin/su $TC_USER -c \
     
      "$CATALINA_HOME/bin/startup.sh") \
     
      >/dev/null 2>&1
     
 elif [ "x$TOMCAT" != xno ]; then
     
    
  (CATALINA_HOME=/usr/apache/tomcat; export CATALINA_HOME; \
 
    
      CATALINA_BASE=/var/apache/tomcat; export CATALINA_BASE; \
     
      JAVA_HOME=/usr/java; export JAVA_HOME; \
     
      /bin/su $TC_USER -c \
     
             "$CATALINA_HOME/bin/startup.sh") \
     
             >/dev/null 2>&1
     
 fi
 ;;
     restart)
 cmdtext="restarting"
 ;;
     stop)
 cmdtext="stopping"
 if [ "x$TOMCAT" = xyes55 ]; then
     
    
  (CATALINA_HOME=/usr/apache/tomcat55; export CATALINA_HOME; \
 
    
      CATALINA_BASE=/var/apache/tomcat55; export CATALINA_BASE; \
     
      JAVA_HOME=/usr/java; export JAVA_HOME; \
     
      /bin/su $TC_USER -c \
     
      "$CATALINA_HOME/bin/shutdown.sh") \
     
      >/dev/null 2>&1
     
 elif [ "x$TOMCAT" != xno ]; then
     
    
  (CATALINA_HOME=/usr/apache/tomcat; export CATALINA_HOME; \
 
    
      CATALINA_BASE=/var/apache/tomcat; export CATALINA_BASE; \
     
      JAVA_HOME=/usr/java; export JAVA_HOME; \
     
      /bin/su $TC_USER -c \
     
      "$CATALINA_HOME/bin/shutdown.sh") \
     
      >/dev/null 2>&1
     
 fi
 ;;
     *)
 echo "Usage: $0 {start|stop|restart}"
     
 exit 1
     
 ;;
     esac
     
     echo "httpd $cmdtext."
     
     
     /bin/sh -c "${APACHE_HOME}/bin/apachectl $1" 2>&1 &
     
     status=$?
     
     if [ $status != 0 ]; then
     
 echo "exit status $status"
     
 exit 1
     
     fi
     exit 0
     
   
  rcスクリプトを見れば分かるように、httpd.confにApacheの実行ユーザーが定義されている。 Apacheはnobodyであり、apache2はwebservdである。このため/var/apache/tomcat55以下のnobodyユーザーのディレクトリを調べて、webservdユーザーに変更する。
# find /var/apache/tomcat55 -user nobody
  
    …
# find /var/apache/tomcat55 -user nobody|xargs chown -R webservd
  
   
  
これまでのどの方法でも良いから、Tomcat を起動することが出来たら、JSPまたはServletによってOracleへの接続が可能になる。Oracleデータベースに接続して、DBアクセスの結果を表示する、ごく簡単なJSPを例示する。
Oracleへ接続するためには、まずJDBCドライバをTomcat にロードさせなければならない。JDBCドライバは/opt/app/oracle/product/10.2.0/jdbc/lib/配下に下記のものが置かれている。
ojdbc14_g.jar JDBCクラス(デバッグ、トレース)
ojdbc14dms.jar JDBCクラス - Dynamic Monitoring Serviceサポート
ojdbc14dms_g.jar JDBCクラス(デバッグ、トレース) - Dynamic Monitoring Serviceサポート
classes12dms.jar JDBCクラス - Dynamic Monitoring Serviceサポート
既にインストールされているJavaのバージョンは、1.5系なのでojdbc14系が最適であり、そのうち軽量、シンプルな「ojdbc14.jar」を使用する。
     # cd /var/apache/tomcat55/webapps/jsp-examples/WEB-INF/lib
        
     # cp /opt/app/oracle/product/10.2.0/jdbc/lib/ojdbc14.jar .
        
     # chmod o+r ojdbc14.jar
        
    
   
     # mkdir -p /var/apache/tomcat/webapps/examples/WEB-INF/lib
        
     # cd /var/apache/tomcat/webapps/examples/WEB-INF/lib
        
     # cp /opt/app/oracle/product/10.2.0/jdbc/lib/ojdbc14.jar .
        
     # chmod o+r ojdbc14.jar
        
    
   
「USER_TABLES」から「TABLE_NAME」を読み取りそれを表示するJSPを作成する。出来るだけ短くするために、クローズ処理さえも省いたが、目的には十分である。ファイルパスは下記のとおり。
    <%@ page language="java" pageEncoding="Windows-31J" contentType="text/html;charset=Windows-31J" %>
        
    <%@ page import="java.sql.*" %>
        
    <%
    try {
        
      Class.forName("oracle.jdbc.driver.OracleDriver");
      String url = "jdbc:oracle:thin:@localhost:1521:orcl";
        
      Connection con = DriverManager.getConnection(url,"scott", "tiger");
        
      Statement stmt = con.createStatement();
        
      String sql = "select table_name from user_tables";
        
      ResultSet rs = stmt.executeQuery(sql);
        
      while(rs.next()){
        out.println(rs.getString("TABLE_NAME")+"<br>        
    ");
      }
    } catch (Exception e) {
        
      e.printStackTrace();
    }
    %>
   
  
ブラウザで下記のURLを指定する。
(Tomcat単体起動の場合はserver_addr:8080)Tomcat/4.0.5・・・「http://server_addr/examples/jsp/db.jsp」
Tomcat/5.5.27・・・「http://server_addr/jsp-examples/db.jsp」
Screen 97
 
  
  
    

0 件のコメント:
コメントを投稿