Symfoware

Symfowareについての考察blog

Jetty + Eclipse + run-jetty-run環境でJNDIを使用しJDBCコネクションを取得する

Tomcat等でデータベースに接続するアプリケーションを作成する場合、
コネクションをプーリングし、データソースはJNDIで管理する。
というのが一般的かと思います。

Tomcatでは、JNDI + JDBCの設定を行ったことがあるのですが、
Jettyでは初体験。

しかも、実行環境ではなくEclipseプラグインのrun-jetty-runで
動かしたJettyでJNDI + JDBCの設定を有効にしてみたいと思います。

ちなみに、run-jetty-run Pluginのインストールはこちら。
Jettyのインストールと、Eclipseプラグインの設定(run-jetty-run) その2


※そうとうはまりました。




必要なモジュールの準備



Jetty自体はrun-jetty-runに同梱されているもので動きますが、
実行時に必要となるライブラリがありますので、Jetty 7本体を
ダウンロードしておきます。

http://ftp.yz.yamagata-u.ac.jp/pub/eclipse/jetty/stable-7/dist/
こちらから、jetty-distribution-7.2.0.v20101020.zipをダウンロードして解凍します。



コネクションのプーリングには、Apache CommonsのDBCPを使うことにしました。
http://commons.apache.org/dbcp/
こちらから、commons-dbcp-1.4.jarを取得しておきます。

また、dbcpはpoolに依存していますので、
http://commons.apache.org/pool/
こちらから、commons-pool-1.5.5.jarを取得しておきます。



今回は、HiRDBと接続を試してみようと思いますので、HiRDB接続用のJDBCドライバ
pdjdbc2.jarを用意しておきます。
これは標準インストールで「C:\win32app\hitachi\hirdb_s\CLIENT\UTL」に
あるかと思います。





jetty.xmlの編集



JNDIの設定は、jetty.xmlファイルへ記載します。


<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">

    <!-- =========================================================== -->
    <!-- Server Thread Pool -->
    <!-- =========================================================== -->
    <Set name="ThreadPool">
        <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
            <Set name="minThreads">10</Set>
            <Set name="maxThreads">100</Set>
        </New>
    </Set>

    <!-- =========================================================== -->
    <!-- Set connectors -->
    <!-- =========================================================== -->
    <Set name="connectors">
        <Array type="org.eclipse.jetty.server.Connector">
            <Item>
                <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
                    <Set name="host">localhost</Set>
                    <Set name="port">8080</Set>
                    <Set name="maxIdleTime">30000</Set>
                    <Set name="Acceptors">10</Set>
                </New>
            </Item>
        </Array>
    </Set>
    
    <!-- =========================================================== -->
    <!-- JNDIを使用するために必要 -->
    <!-- =========================================================== -->
    <Array id="plusConfig" type="java.lang.String">
        <Item>org.eclipse.jetty.webapp.WebInfConfiguration</Item>
        <Item>org.eclipse.jetty.webapp.WebXmlConfiguration</Item>
        <Item>org.eclipse.jetty.webapp.MetaInfConfiguration</Item>
        <Item>org.eclipse.jetty.webapp.FragmentConfiguration</Item>
        <Item>org.eclipse.jetty.plus.webapp.EnvConfiguration</Item>
        <Item>org.eclipse.jetty.plus.webapp.PlusConfiguration</Item>
        <Item>org.eclipse.jetty.webapp.JettyWebXmlConfiguration</Item>
        <Item>org.eclipse.jetty.webapp.TagLibConfiguration</Item>
    </Array>
    
    <!-- =========================================================== -->
    <!-- Set handlers -->
    <!-- =========================================================== -->
    <Set name="handler">
        <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
            <Set name="handlers">
                <Array type="org.eclipse.jetty.server.Handler">

                    <!-- ======================================================= -->
                    <!-- Configure a web application with web.xml -->
                    <!-- ======================================================= -->
                    <Item>
                        <New id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
                            <Set name="contextPath">/</Set>
                            <Set name="war">D:\workspace\jetty\webapps</Set>
                            <!-- ここがミソ -->
                            <!-- 「JNDIを使用するために必要」で宣言した内容を設定 -->
                            <Set name="configurationClasses"><Ref id="plusConfig" /></Set>
                        </New>
                    </Item>
                </Array>
            </Set>
        </New>
    </Set>
    
    <!-- プーリングするJDBC接続の設定 -->
    <New id="dataSource" class="org.eclipse.jetty.plus.jndi.Resource">
        <Arg><Ref id="wac"/></Arg>
        <Arg>jdbc/sample</Arg>
        <Arg>
            <New class="org.apache.commons.dbcp.BasicDataSource">
                <Set name="driverClassName">JP.co.Hitachi.soft.HiRDB.JDBC.HiRDBDriver</Set>
                <Set name="Url">jdbc:hitachi:hirdb://DBID=22200,DBHOST=localhost</Set>
                <Set name="Username">USER1</Set>
                <Set name="Password">USER1</Set>
            </New>
        </Arg>
    </New>
    <!-- =========================================================== -->
    <!-- extra options -->
    <!-- =========================================================== -->
    <Set name="stopAtShutdown">true</Set>
</Configure>




ポイントは、

・JettyでJNDIを使用するための「plusConfig」という宣言を追加。
・org.eclipse.jetty.webapp.WebAppContextで、「configurationClasses」の
値として「plusConfig」を設定。
・「org.eclipse.jetty.plus.jndi.Resource」で、JDBCの設定を記載。


という点でしょうか。


ちなみに、
http://wiki.eclipse.org/Jetty/Feature/JNDI
ここを参考に設定を行っていたのですが、記載に誤りがあります。

plusConfigでの設定で、


org.eclipse.jetty.plus.webapp.Configuration



となっていますが、正しくは


org.eclipse.jetty.plus.webapp.PlusConfiguration



です。
「org.eclipse.jetty.plus.webapp.Configuration」というクラスは
存在しないようです。






web.xmlの編集



次に、WEB-INF/web.xmlに使用するリソースを記載します。


<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <display-name>Test WebApp</display-name>
    <servlet>
        <servlet-name>sample</servlet-name>
        <servlet-class>sample.SampleServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>sample</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

    <resource-ref>
        <description>My DataSource Reference</description>
        <res-ref-name>jdbc/sample</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

</web-app>




res-ref-nameは、jetty.xmlのorg.eclipse.jetty.plus.jndi.Resourceに
記載した名称とそろえます。





ビルドパスの構成



ダウンロードしたJetty7のlibにあるjarを3つビルドパスに加えます。
追加するjarは以下のとおり。


jetty-jndi-7.2.0.v20101020.jar
jetty-plus-7.2.0.v20101020.jar
servlet-api-2.5.jar




WEB-INF/libフォルダを作成し、データベース接続用のjarをコピー。
ビルドパスに加えます。
追加するjarは以下のとおり。


commons-dbcp-1.4.jar
commons-pool-1.5.5.jar
pdjdbc2.jar








サンプルプログラム



HiRDBに作成されているサンプルテーブル「CUSTOM」の内容を
表示するサンプルプログラムを作成しました。

SampleServlet.java


package sample;

import java.io.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.naming.InitialContext;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.DataSource;

public class SampleServlet extends HttpServlet {
    
    private static final long serialVersionUID = 1L;
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException{
        
        response.setContentType("text/html; charset=utf8");
        PrintWriter out = response.getWriter();
        
        out.write("<html>");
        out.write("<head>");
        out.write("<title>JDBCサンプル</title>");
        out.write("</head>");
        out.write("<body>");
        out.write("<table border='1'>");
        out.write("<tr>");
        out.write("<td>COMPANYCD</td>");
        out.write("<td>COMPANYNAME</td>");
        out.write("<td>TELNO</td>");
        out.write("<td>ZIPCD</td>");
        out.write("<td>ADDRESS</td>");
        out.write("</tr>");
        
        try {
            // JNDI経由で、コネクションプールからコネクションを取得
            // lookupする名前は「java:comp/env/[web.xmlに記載したres-ref-name]」
            InitialContext ic = new InitialContext();
            DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/sample");
            Connection con = ds.getConnection();
            
            // 後は通常のJDBC接続と同様の処理
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM CUSTOM");
            
            
            while(rs.next()) {
                out.write("<tr>");
                out.write("<td>");
                out.write(rs.getString("COMPANYCD"));
                out.write("</td><td>");
                out.write(rs.getString("COMPANYNAME"));
                out.write("</td><td>");
                out.write(rs.getString("TELNO"));
                out.write("</td><td>");
                out.write(rs.getString("ZIPCD"));
                out.write("</td><td>");
                out.write(rs.getString("ADDRESS"));
                out.write("</td>");
                out.write("</tr>");
            }
            
            
            stmt.close();
            con.close();
        } catch (Exception e){
            e.printStackTrace();
        }
        
        out.write("</table>");
        out.write("</body>");
        out.write("</html>");

        out.close();
     }
}








実行



最終的に、Eclipseのパッケージ・エクスプローラーで表示される
形はこのようになっているはずです。

03_001_20101101222643.png


実行の構成はこんな感じ。

03_002_20101101222638.png


実行して、http://localhost:8080/にアクセスすると、見事CUSTOMテーブルの
内容が表示されました。

03_003_20101101222637.png



ここまでくるの、長かった・・・



【参考URL】
http://wiki.eclipse.org/Jetty/Feature/JNDI
http://wiki.eclipse.org/Jetty/Howto/Configure_Jetty
http://stackoverflow.com/questions/2131798/jetty-mysql-connection-pool-configuration-error-javax-naming-namenotfoundexcep






テーマ:プログラミング - ジャンル:コンピュータ

  1. 2010/11/01(月) 22:28:59|
  2. ツール開発
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Jettyのインストールと、Eclipseプラグインの設定(run-jetty-run) その2

以前、JettyのEclipse Pluginのrun-jetty-runをインストールしました。

Jettyのインストールと、Eclipseプラグインの設定(run-jetty-run)


インストールする際、

作業対象に「http://run-jetty-run.googlecode.com/svn/trunk/updatesite」を
選択していましたが・・・

GoogleCodeのプロジェクト
http://code.google.com/p/run-jetty-run/

ここから、githubのプロジェクトへ移行したようです。
http://github.com/alexwinston/RunJettyRun


GoogleCodeで公開されているバージョンでは、Jetty6対応でしたが、
githubで公開されているバージョンは、6,7,8に対応している模様。

githubのプラグインを使用したほうがよさそうです。




旧バージョンのアンインストール





※2010年11月4日追記
プラグインの削除方法がわかりました!
Eclipse プラグインの削除方法





なにも考えずに上書きでインストールしたのですが、うまく動作せず。
手動でプラグインを削除しようとしたのですが、どこかに情報が
残っているようで「既に最新バージョンが導入されている」と
判定されてしまいました。

それなので、Eclipseを丸ごと再インストールした後、プラグインの
インストールを行っています。

ちゃんと旧バージョンのアンインストールを行ってから、
最新版のインストールを行ったほうがよさそうです。

※プラグインのアンインストール方法がわからないので、具体的な手順は不明です。





run-jetty-runのインストール



Jettyのインストールと、Eclipseプラグインの設定(run-jetty-run)
この手順と同一です。

ただ、プラグインを検索する作業対象に

「http://run-jetty-run.googlecode.com/svn/trunk/updatesite」

ではなく、

「http://alexwinston.github.com/RunJettyRun/site/update」

を設定します。





インストール後の設定



設定画面が大きく変更されていました。
実行の構成画面はこんな感じです。

02_001_20101031210034.png

使用するJettyのバージョンとjetty.xmlのパスを指定します。

今回は、Jettyのバージョンを「7」、jetty.xmlをEclipseで作成した
プロジェクトの直下に配置しています。





jetty.xmlの内容



ほぼ、サイトに公開されているサンプルのままです。

※ここの「Example Jetty 7 and 8 jetty.xml」
http://github.com/alexwinston/RunJettyRun



<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">

    <!-- =========================================================== -->
    <!-- Server Thread Pool -->
    <!-- =========================================================== -->
    <Set name="ThreadPool">
        <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
            <Set name="minThreads">10</Set>
            <Set name="maxThreads">100</Set>
        </New>
    </Set>

    <!-- =========================================================== -->
    <!-- Set connectors -->
    <!-- =========================================================== -->
    <Set name="connectors">
        <Array type="org.eclipse.jetty.server.Connector">
            <Item>
                <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
                    <Set name="host">localhost</Set>
                    <Set name="port">8080</Set>
                    <Set name="maxIdleTime">30000</Set>
                    <Set name="Acceptors">10</Set>
                </New>
            </Item>
        </Array>
    </Set>
    
    <!-- =========================================================== -->
    <!-- Set handlers -->
    <!-- =========================================================== -->
    <Set name="handler">
        <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
            <Set name="handlers">
                <Array type="org.eclipse.jetty.server.Handler">

                    <!-- ======================================================= -->
                    <!-- Configure a web application with web.xml -->
                    <!-- ======================================================= -->
                    <Item>
                        <New class="org.eclipse.jetty.webapp.WebAppContext">
                            <Set name="contextPath">/</Set>
                            <Set name="war">D:\workspace\jetty\webapps</Set>
                        </New>
                    </Item>
                </Array>
            </Set>
        </New>
    </Set>
    
    <!-- =========================================================== -->
    <!-- extra options -->
    <!-- =========================================================== -->
    <Set name="stopAtShutdown">true</Set>
</Configure>





変更した箇所は、

「Configure a web application with web.xml」とコメントのある箇所付近の


<Set name="war">D:\workspace\jetty\webapps</Set>



ここをWEB-INFフォルダや、web.xmlファイルを作成したパスに変更してやります。


ちなみに、web.xmlファイルは前回と同様です。


<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  version="2.5">

  <display-name>Test WebApp</display-name>
  <servlet>
    <servlet-name>sample</servlet-name>
    <servlet-class>sample.SampleServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>sample</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

</web-app>








Eclipseプロジェクトの内容とサンプルソース



ほぼ前回と同様です。
変更箇所は、jetty.xmlが追加されたことでしょうか。

Eclipse上のパッケージ・エクスプローラーでは、このように表示されているはずです。


02_002_20101031210032.png



動作確認に使用したソースも前回と同様。



package sample;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SampleServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        response.setContentType("text/html; charset=utf8");
        PrintWriter out = response.getWriter();

        out.println("SampleServlet");

        out.close();
    }
}






これで、EclipseのプラグインからJetty 7を起動することができました。







テーマ:プログラミング - ジャンル:コンピュータ

  1. 2010/10/31(日) 21:01:34|
  2. ツール開発
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Jettyのインストールと、Eclipseプラグインの設定(run-jetty-run)


※2010年10月31日追記

githubで公開されているプラグインの方が最新版でした。
Jettyのインストールと、Eclipseプラグインの設定(run-jetty-run) その2




以前、JettyのインストールとEclipseプラグインの設定を試してみました。

Jettyのインストールと、Eclipseプラグインの設定

しかし、この時は使い方がよくわからず・・・


Jetty6を開発に使う
こちらで、run-jetty-runというプラグインが紹介されていましたので、
試してみることにしました。

また、Jettyのバージョンも7にあがっていたので、改めて
Jettyのインストールから行ってみます。




Jettyのダウンロード



http://ftp.yz.yamagata-u.ac.jp/pub/eclipse/jetty/stable-7/dist/
こちらから、jetty-distribution-7.2.0.v20101020.zipをダウンロードして解凍します。

今回は、D:\jetty7というフォルダに解凍しました。
この中にstart.jarがありますので、実行するとサーバーが起動します。

コマンドプロンプトを起動して、D:\jetty7に移動。
java -jar start.jarを実行します。


C:\Users\Administrator>cd /d D:\jetty7

D:\jetty7>java -jar start.jar
properties={jetty.home=D:\jetty7, OPTIONS=Server,ext,jmx,jsp,resources,websocket}
2010-10-26 22:26:02.547:INFO::jetty-7.2.0.v20101020
2010-10-26 22:26:02.687:INFO::Deployment monitor D:\jetty7\webapps at interval 1
2010-10-26 22:26:02.781:INFO::Deployment monitor D:\jetty7\contexts at interval 1
2010-10-26 22:26:02.781:INFO::Deployable added: D:\jetty7\contexts\test.xml
2010-10-26 22:26:03.421:INFO::Extract jar:file:/D:/jetty7/webapps/test.war!/ to
C:\Users\Administrator\AppData\Local\Temp\jetty-0.0.0.0-8080-test.war-_-any-\webapp
2010-10-26 22:26:08.849:INFO:org.eclipse.jetty.servlets.TransparentProxy:Transpa
rentProxy @ /javadoc to http://download.eclipse.org/jetty/stable-7/apidocs
2010-10-26 22:26:08.896:INFO::Deployable added: D:\jetty7\contexts\javadoc.xml
2010-10-26 22:26:09.037:INFO::Started SelectChannelConnector@0.0.0.0:8080




ブラウザを起動して、http://localhost:8080/にアクセス。
以下の画面が表示されたら、起動に成功しています。

01_001_20101026235327.png


コマンドプロンプトで、Ctrl + Cを押すとサーバーが停止します。






run-jetty-runプラグインのインストール



http://code.google.com/p/run-jetty-run/wiki/GettingStarted
こちらを参考にインストールを行いました。


Eclipseの[ヘルプ]-[新規ソフトウエアのインストール]を選択。

01_002_20101026235327.png


作業対象に「http://run-jetty-run.googlecode.com/svn/trunk/updatesite」と
入力して追加ボタンをクリック。

01_003_20101026235327.png


リポジトリの追加画面が表示されるので、適当な名前を入力します。
こんかいは「run-jetty-run」と入力しました。

01_004_20101026235327.png


しばらく待つと、「Jetty Integration」という項目が表示されます。
チェックをつけて、次へを押します。

01_005_20101026235327.png


インストールされる項目の確認画面が表示されます。
Run Jetty Run Featureが表示されていることを確認して次へ。

01_006_20101026235326.png


ライセンスの確認画面が表示されます。
内容を確認し「使用条件の条項に同意します」を選択して完了。
ソフトウエアのインストールが開始されます。

01_007_20101026235558.png


インストール中、以下の警告が出ると思いますが、OKを押して
インストールを続行します。

01_008_20101026235558.png


インストールが終わると、Eclipseの再起動を求められます。
「今すぐ再起動」を選択しました。

01_009_20101026235558.png







Eclipseでプロジェクトの作成



Jettyで簡単なサーブレットを動かすプログラムを作ってみます。
通常のEclipseプロジェクトと同じく、[ファイル]-[新規]-[Javaプロジェクト]
を選択します。

01_010_20101026235558.png


プロジェクト名はjettyとしました。
次へを押して、設定を続けます。

01_011_20101026235558.png


ライブラリタブを選択し、外部jarの追加を押します。

01_012_20101026235557.png


jettyをインストールしたフォルダのlibにあるservlet-api-2.5.jarを
追加します。

01_013_20101026235643.png


完了を押して、プロジェクトを作成します。

01_014_20101026235643.png


sampleというパッケージを作成し、SampleServletというサーブレットを作成しました。
プログラムの内容は以下のとおり。


package sample;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SampleServlet extends HttpServlet {
    
    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException{

        response.setContentType("text/html; charset=utf8");
        PrintWriter out = response.getWriter();

        out.println("SampleServlet");

        out.close();
     }
}




SampleServletという文字列を表示するだけの簡単なプログラムです。



次に、webappsというフォルダをプロジェクト内に作成し、
そのフォルダの中にさらにWEB-INFというフォルダを作成します。

WEB-INFの中にサーブレットを呼び出すためのweb.xmlを配置します。
web.xmlの内容は以下のとおり。


<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <display-name>Test WebApp</display-name>
    <servlet>
        <servlet-name>sample</servlet-name>
        <servlet-class>sample.SampleServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>sample</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>





ここまでで、Eclipseのパッケージ・エクスプローラーに
表示されいる内容は以下のようになるはずです。

01_015_20101026235643.png






run-jetty-runによるjettyの起動



プロジェクト名を右クリックして[実行]-[実行の構成]を選択します。

01_016_20101026235643.png


実行構成の画面が表示されるので、Jetty Webappを右クリック。
[新規]を選択します。

01_017_20101026235643.png


最初はこんな設定画面になります。

01_018_20101026235643.png


HTTPSを使用するためには、Keystoreが必要となりますが、今回は不要です。
HTTPSのポート番号を削除すればKeystoreを要求されなくなります。

また、下のほうのWeb App dirにはjettyプロジェクトに作成したwebappsフォルダを
指定してやります。

01_019_20101026235734.png


設定が終わったら実行ボタンを押します。
コンソールにこんな内容が表示されるはずです。

01_020_20101026235734.png


ブラウザでhttp://localhost:8080/にアクセスすると、サーブレットが
実行され以下の内容が表示されるはず。


01_021.png


ちなみに、ちゃんとデバッグ実行も行えます。





Jettyのインストールは不要かも



Eclipseのコンソールに出力される内容をよく見てみると、

2010-10-26 23:46:03.770::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
ProjectClassLoader: entry=D:\workspace\jetty\bin
ProjectClassLoader: entry=D:\jetty7\lib\servlet-api-2.5.jar
2010-10-26 23:46:03.913::INFO: jetty-6.1.6
2010-10-26 23:46:04.365::INFO: Started SelectChannelConnector@0.0.0.0:8080




・・・jetty7をインストールしたはずなのですが、jetty-6.1.6という表示が。
jettyをインストールしたフォルダの選択画面とかはなかったので、
おそらくrun-jetty-runプラグインに同梱されているjettyが起動しているのだと思います。

それなので、jetty7のインストールは不要で、servlet-api-2.5.jarだけ
入手して参照してやればよいのかもしれません。









テーマ:プログラミング - ジャンル:コンピュータ

  1. 2010/10/27(水) 00:00:05|
  2. ツール開発
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Tomcat + Eclipseでデバッグできる環境を作成する

Jetty + Eclipseでデバッグ環境を作成するのは難しそうなので、
Tomcat + Eclipseでデバッグできる環境を作成します。

以前も環境を作成したことがあるのですが、Eclipseのバージョンが2、
Tomcatのバージョンが4.1の頃の話なので、復習の意味も込めて
手順をまとめます。



Eclipse



使用しているEclipseは
Pleiades All in One 日本語ディストリビューション
http://mergedoc.sourceforge.jp/
ここのJava版を使用していますので、Tomcat Launcherはインストール済みです。



Tomcat



Tomcatを
http://tomcat.apache.org/download-60.cgi
ここからBinary Distributionsのcoreをダウンロードし、展開しました。

展開したフォルダをC:\apache-tomcat-6.0.20に保存しています。


Eclipseの設定



Eclipseのメニューから[ウィンドウ]-[設定]を開きます。

001_20090913183516.png

設定画面の左側のツリーで[Tomcat]を選択し、
Tomcatのバージョン:バージョン6.x
Tomcatホーム:C:\apache-tomcat-6.0.20
を指定します。

これで設定は完了です。
左上のTomcatボタンを押すと、Tomcatが起動します。

002_20090913183516.png

ブラウザでhttp://localhost:8080/にアクセスすると、起動が確認できます。



サンプルプログラム



簡単なプログラムを作成してみます。
Eclipseのメニューから[ファイル]-[新規]-[プロジェクト]を選択します。

新規プロジェクトのウィザードが表示されるので、
[Java]-[Tomcatプロジェクト]を選択します。

003_20090913183516.png

プロジェクト名は適当にtom_sampleとしました。

004_20090913183516.png

コンテキスト名称は/tom_sampleのまま完了します。

005_20090913183516.png


こんな構成でプロジェクトが作成されると思います。

006_20090913183516.png


また、C:\apache-tomcat-6.0.20\conf\Catalina\localhostに
tom_sample.xmlというファイルが作成されていると思います。

このファイルが自動生成されるおかげで、Tomcatを起動すると
http://localhost:8080/tom_sampleというURLにアクセスすると、
Eclipseで見ているプロジェクトのフォルダが参照可能となります。


eclipseのtom_sampleプロジェクトにあるWEB-INF/srcを右クリックして
サンプルプログラムを作成します。

[右クリック]-[新規]-[クラス]を選択。
パッケージ名:sample
名前:SampleServlet
スーパークラス:javax.servlet.http.HttpServlet
としました。

007_20090913183520.png


サンプルは適当に・・・



package sample;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SampleServlet extends HttpServlet {

    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // ContentTypeを設定
        response.setContentType("text/html; charset=Shift_JIS");
        // 出力用PrintWriterを取得
        PrintWriter out = response.getWriter();
        // 出力
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello World From Servlet</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("Hello World From Servlet");
        out.println("</body>");
        out.println("</html>");

    }
}





いつも書き方を忘れるのですが、WEB-INFにweb.xmlを配置します。

■web.xml


<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<servlet>
    <servlet-name>tom_sample</servlet-name>
    <servlet-class>sample.SampleServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>tom_sample</servlet-name>
    <url-pattern>/call</url-pattern>
</servlet-mapping>
</web-app>





上のservletタグの中で、サーブレットの名前とクラスの関連付け、
下のservlet-mappingタグの中で、サーブレットの名前と
実際に呼び出されるときのURLを定義します。

上記の記載で、
http://localhost:8080/tom_sample/call
にアクセスしたとき、
・callというURLだから、tom_sampleを呼び出す。
・tom_sampleの実体はsample.SampleServlet
という解決が行われます。


これで、Tomcatランチャーのボタンを押して
http://localhost:8080/tom_sample/call
にアクセスすると、
Hello World From Servlet
と表示されると思います。





  1. 2009/09/20(日) 12:34:39|
  2. ツール開発
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

EclipseでJettyアプリケーションのデバッグ

※メモ書きです。
結局、うまくいきませんでした。

Debugging Jetty with Eclipse

ここを参考にすれば、Jetty + Eclipseでデバッグができそう。

デバッグの構成で、クラス名に
org.mortbay.xml.XmlConfiguration
を指定。

このクラスはjettyをインストールしたフォルダのlibにある
jetty-6.1.20.jar
にあります。

このjarは
jetty-util-6.1.20.jar
servlet-api-2.5-20081211.jar
に依存しているので、三つまとめてクラスパスに含めておきます。


引数タブで、jettyをインストールしたフォルダのetcにある
jetty.xmlを指定します。

これでデバッグを実行すると、logsとwebappsフォルダがないという
エラーが発生します。

・・・どうやら、eclipseのフォルダにwebアプリケーションの
構成を作らないといけない模様。

ここでくじけました。
デバッグはtomcat + Eclipseでやったほうがはやそう。


  1. 2009/09/19(土) 17:38:41|
  2. ツール開発
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ