プロが教えるわが家の防犯対策術!

似たケースが検索で見つけられず
投稿させて頂きます。

JDBCをインストールしmysqlとの
連携をしたいのですがうまくいきません。

apacheとtomcatの連携に関しては
以下のページを参考にしました。
http://www.javaroad.jp/opensource/js_tomcat3.htm

そしてJDBCの設定に関しては参考にしている本が古いため
コネクションプーリングの設定がAdministratorになっており
当方のtomcat6バージョンではAdministratorが
設定できなかったため(できないですよね?)色々調べた結果
以下のファイルを設定しました。

アプリケーションルート・META-INF/context.xml
----------------------------------------------------------------
<Context displayName="Jsp_Servlet Samples" docBase="wl_jsp"
path="/wl_jsp" reloadable="true">
<Realm className="org.apache.catalina.realm.DataSourceRealm"
 ~中略(この部分は設定しなくても良いと書かれていました)~
<Resource name="jdbc/Wl_Jsp" auth="Container"
type="javax.sql.DataSource" maxActive="4" maxIdle="2" maxWait="5000"
driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/wl_jsp?useUnicode=true&characterEncoding=Windows-31J"
username="wl_jsp" password="wl_jsp"
validationQuery="SELECT count(*) FROM books" />
----------------------------------------------------------------

以下本に書かれていた設定値です
プロパティ    |概要         |設定値
----------------------------------------------------------------
JNDI名      |データソースを識別  |jdbc/Wl_Jsp
----------------------------------------------------------------
データソースURL  |接続文字列      |jdbc:mysql://localhost/wl_jsp?useUnicode=true&characterEncoding=Windows-31J
----------------------------------------------------------------
JDBCドライバクラス|ドライバクラス修飾名 |org.gjt.mm.mysql.Driver
----------------------------------------------------------------
ユーザー名    |接続時のユーザー名  |wl_jsp
----------------------------------------------------------------
パスワード    |接続時のパスワード  |wl_jsp
----------------------------------------------------------------
有効な最大接続数 |プーリングする最大数 |4
----------------------------------------------------------------
アイドル状態の最大接続数|待機時に最低維持する接続数|2
----------------------------------------------------------------
最大接続待ち時間 |接続に対しての待ち時間|5000(ミリ秒)
----------------------------------------------------------------
クエリの検証   |接続検証用のSQL命令  |SELECT count(*)FROMbooks


web.xmlについてはweb-appタグ直下に以下を追加しました。
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/Wl_Jsp</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>


mysql-connector-java-5.1.7-bin.jarファイルについては
Toncat 6.0/common/libに保存せよと本にはありますが
commonディレクトリが無いためToncat 6.0/libに保存してあります。

またCLASSPATHの設定も本にはありませんでしたが
ネットで色々調べていたらでてきましたので
以下のように設定してみましたがだめでした。
--------------------------------------------------------------
C:\Program Files\Apache Software Foundation\
Tomcat 6.0\libmysql-connector-java-5.1.7-bin.jar;
--------------------------------------------------------------


実行結果になります。
----------------------------------------------------------------
javax.servlet.jsp.JspException: DataSource が無効であるため、Connection を取得できません: "org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'"
----------------------------------------------------------------

環境です
---------------
os:windows xp home sp2
apache2.2
tomcat6.0
jdk1.6.0_10
mysql-connector-java-5.1.7-bin.jar
---------------

長乱文失礼致しました。
他に必要な設定などありますでしょうか?
アドバイス・ヒントなどありましたらお願いします。

A 回答 (6件)

> ■conf\server.xml <host>タグ下に回答番号4の補足のソースを入れ実行


> 結果:tomcat起動せず
Tomcatが起動しない事から、Tomcatの設定ファイルに誤りがある事が疑われます。
コーンソールログやlogsディレクトリ以下のログファイルに情報があるかも
しれませんので、確認してみて下さい。

Contextの書き方は、みた所間違いはなさそうです。

Contextタグをserver.xml内に書く場合は、
<Host>タグと、</Host>の間に置きましょう。

> ■conf\Catalina\localhost\context.xmlを作成し回答番号3の補則のソースを入れ実行
> 結果:jspファイル実行するも同じエラーメッセージ
Context設定ファイルは、
「conf\Catalina\localhost\」以下に配置する事も出来ますが、
server.xmlと両方に書いてはいけません、設定が重複しますので。

# Context設定ファイルを「conf\Catalina\localhost\」以下に配置する場合、
# ファイル名は、ウェブアプリケーション名.xmlにする気がするけど、
# これは、今回の件とは関係ないでしょう。

> ■conf\context.xml(もともとあったもの)を編集回答番号3の補則の形に編集し実行
> 結果:urlにアクセスすると以下のメッセージが表示される 説明 The requested resource () is not available.
これは、JSPに記述ミスがあるか、
遷移先のJSPが存在しないかの可能性があります。
どちらのケースかは、処理を追いかけるなどして、調べてください。
    • good
    • 0
この回答へのお礼

度々書込みありがとうございます!
おかげさまで何とかデータベースに登録までできました!

>コーンソールログやlogsディレクトリ以下のログファイルに情報があるかも
仰るとおりここにヒントがありました。
2008/12/15 22:16:28 org.apache.catalina.startup.HostConfig deployDescriptor
警告: A docBase C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\sample inside the host appBase has been specified, and will be ignored
と一つだけ警告が出ていたので
違うアプリケーションのdeployDescriptorが読み込まれている?
と予想し、Tomcat 6.0\conf\Catalina\localhost\sample.xmlを確認
したところC:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\sampleのアドレスを発見。
もしやと思いご助言頂いたアプリケーション名.xml
としたところ動きました!

しかしログファイルの警告が増えてしまいましたが^^;
2008/12/15 22:16:28 org.apache.catalina.startup.HostConfig deployDescriptor
警告: A docBase C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\wl_jsp inside the host appBase has been specified, and will be ignored
こちらに関してはまた自分で調べてみます。

長々と付き合せてしまい恐縮です。
今回は本当に色々勉強になりました。
ありがとうございました!

お礼日時:2008/12/16 00:22

こんにちわ。



なんだか誤りがたくさん出てきた見たいですね。
問題が複数潜んでいてあちらを直してもこちらがだめでを繰り返しているようなきもしてきました。
ですので一度リセットして、ひとつずつはじめていったらどうでしょうか。

まずは、インストール直後の最初の状態に戻して、Tomcatだけを起動する。

起動したら、次はWEBアプリケーションを追加してみる。
この時WEBアプリケーションには、htmlだけをおいて、アクセスできるようになるまで、Contextを調整する。

アクセスできるようになったら、DBアクセスを行わない、表示だけを行うjspを配置してみる。

jspで表示ができたら、jspにJDBC関連の記述を行うと同時に、JDBCの設定をContext内に追加し、JDBCドライバの配置をしてみて、正しく動作するまで調整。
この時、Tomcatのインストール先にあるlogファイルを必ず見て、エラーが何の要素なのかを見る。
エラー内容から問題個所が推測できるようなら、とりあえず修正を試してしてみる。だめなら、そのエラーを質問。

できる限り、一歩一歩作業をして、つまったら全設定を見直して、Tomcat再起動を繰り返して行くのがいい気がします。
そうすれば、どこまで正しいのかがはっきりします。
    • good
    • 0
この回答へのお礼

度々書込みありがとうございます!

>できる限り、一歩一歩作業をして、つまったら全設定を見直して、Tomcat再起動を繰り返して行くのがいい気がします。
そうすれば、どこまで正しいのかがはっきりします。

なるほど!プログラムの作り方がなんとなくわかりました。
デバックと言うやつですね。勉強になります。

正直、最後の方は自分でも何をどうしたか
デフォルトの状態がどうだったか把握が厳しい状況でした。
コピーしまくったbackupファイルを整理しなければ^^;

おかげさまで何とかデータベースの登録まで
できるようになりました!

書込み頂きありがとうございました!

お礼日時:2008/12/16 00:33

追記です。



手前で使用しているContext の書き方のサンプルです。
参考にしてみて下さい。
----------------------------------------------------------------------
<Context path="/hogehoge" reloadable="true" docBase="D:\var\webapps\hogehoge" workDir="D:\var\webapps\hogehoge\work" >
  
  <!-- データソースリソースjdbc/hogehoge_test を作成 -->
  <Resource name="jdbc/hogehoge_test" auth="Container"
      type="javax.sql.DataSource" />
  
  <!-- jdbc/hogehoge_testにパラメータを指定 -->
  <ResourceParams name="jdbc/hogehoge_test">
    
    <!-- データベース接続用ユーザ名をhogehogeと指定 -->
    <parameter>
      <name>username</name>
      <value>hogehoge</value>
    </parameter>
    
    <!-- データベース接続用パスワードをhogehogeと指定 -->
    <parameter>
      <name>password</name>
      <value>hogehoge</value>
    </parameter>
    <parameter>
      <name>driverClassName</name>
      <value>org.gjt.mm.mysql.Driver</value>
    </parameter>
    
    <!-- 接続先データベース名hogehoge_testを指定 -->
    <parameter>
      <name>url</name>
      <value>jdbc:mysql://localhost/hogehoge_test</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>10</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>5</value>
    </parameter>
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>
  </ResourceParams>
</Context>

</Host>
----------------------------------------------------------------------
> <Resource name="jdbc/library" auth="Container"
> type="javax.sql.DataSource" />
>
> <ResourceParams name="jdbc/Wl_Jsp">
Resourceのname属性と、ResourceParamsのname属性は、関連付けする場合は、
同じ名前を指定しましょう。

> <value>jdbc:mysql://localhost/wl_jsp?useUnicode=true&characterEncoding=Windows-31J</value>
&記号はxml中ではエスケープしてあげないと遺憾ような気がします。
「&」を「&amp;」に置き換えて、
<value>jdbc:mysql://localhost/wl_jsp?useUnicode=true&amp;characterEncoding=Windows-31J</value>
じゃないかな。

> server.xmlについてなんですが
> <Context path="" ~を追加した際
> tomcatが立ち上がらなくなると言う現象がありました。
servlet.xmlに記述間違えがあると、Tomcatが起動しない場合があります。

この回答への補足

server.xmlの<host>下に追加したソースです。

<Context path="/wl_jsp" docBase="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\wl_jsp" reloadable="true" workDir="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\wl_jsp\chap6">
<Resource name="jdbc/Wl_Jsp" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/Wl_Jsp">
<parameter>
<name>driverClassName</name>
<value>org.git.mm.mysql.Driver</value>
</parameter>
<parameter>
<name>username</name>
<value></value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost/wl_jsp?useUnicode=true&amp;characterEncoding=Windows-31J</value>
</parameter>
<parameter>
      <name>maxActive</name>
      <value>4</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>2</value>
    </parameter>
    <parameter>
      <name>maxWait</name>
      <value>5000</value>
    </parameter>
</ResourceParams>
</Context>

補足日時:2008/12/15 14:42
    • good
    • 0
この回答へのお礼

ソースのサンプルありがとうございます!

参考のソースを元に検証してみましたが
うまくいきませんでした。

検証方法は以下の通りです。

■conf\server.xml <host>タグ下に回答番号4の補足のソースを入れ実行
結果:tomcat起動せず

■conf\Catalina\localhost\context.xmlを作成し回答番号3の補則のソースを入れ実行
結果:jspファイル実行するも同じエラーメッセージ

■conf\context.xml(もともとあったもの)を編集回答番号3の補則の形に編集し実行
結果:urlにアクセスすると以下のメッセージが表示される 説明 The requested resource () is not available.

どこか間違っている箇所はありますでしょうか?
また何か気づかれた点などありましたら
是非書込みをお願い致します。

お礼日時:2008/12/15 14:42

JavaSE とJavaEEを混同されているようです。


よく違いを調べましょう。

> >JavaEEの設定ファイルを配備するディレクトリは、
> META-INF の配下ではないはずです。
> 申し訳ありません。書き忘れましたが
> 当方はJavaSEを使用しています。
> 本に関してはこちらを進めているのですが
JavaSEでの設定ファイルの場所は、META-INF配下ですが、
TomcatはJavaEEの実装になりますから、
Tomcat上で動作するアプリケーションも当然JavaEEの仕様に従う必要があります。

ですから、この場合、JavaSEのつもりで設定ファイルをMETA-INF配下に配備してあるのは、
間違っている可能性が大です。

Tomcat上で動作するアプリケーションの
ファイル配置構造を確認して下さい。

> EEかSEかの確認は
> 以下のファイルを開き確認しました。
>
> C:\Program Files\Java\jdk1.6.0_10\LICENSE.rtf
> ---------------------------------------------------
> for the JAVA SE DEVELOPMENT KIT (JDK), VERSION 6
> ---------------------------------------------------
についてですが、
Tomcatは、JavaSE上で動作する、Servletコンテナですから、
当然、JavaSEが入ってないと動きません。
が、Tomcat自身がJavaEEの実装となりますから、
この場合、Tomcat上で動かすアプリケーションはJavaEEのアプリケーションとなります。

この違いがわかりますか?

この回答への補足

conf\context.xmlにあったソースが以下です。
---------------------------------------------
<Context>

<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>

<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->

<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->

</Context>
---------------------------------------------

それを以下のように編集しテストしました。

---------------------------------------------
<Context path="/wl_jsp" docBase="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\wl_jsp" reloadable="true" workDir="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\wl_jsp\chap6">

<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>

<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->

<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->

<Resource name="jdbc/Wl_Jsp" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/Wl_Jsp">
<parameter>
<name>driverClassName</name>
<value>org.git.mm.mysql.Driver</value>
</parameter>
<parameter>
<name>username</name>
<value></value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost/wl_jsp?useUnicode=true&amp;characterEncoding=Windows-31J</value>
</parameter>
<parameter>
      <name>maxActive</name>
      <value>4</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>2</value>
    </parameter>
    <parameter>
      <name>maxWait</name>
      <value>5000</value>
    </parameter>
</ResourceParams>
</Context>
---------------------------------------------

補足日時:2008/12/15 14:44
    • good
    • 0
この回答へのお礼

初心者の質問に付き合って頂き
ありがとうございます!

>Tomcat上で動作するアプリケーションも当然JavaEEの仕様に従う必要があります。
>Tomcatは、JavaSE上で動作する、Servletコンテナですから、
当然、JavaSEが入ってないと動きません。
が、~

なるほど。恥ずかしながら
そのあたりはまったく意識しておりませんでした。
勉強になります。
ちょっと自分なりに調べた感じをまとめてみますので
また間違っていたらご指導願いたいです!
----------------------------------------------------
JAVA EEはJAVA SEを元に作られ
JAVA SEにサーバ関連のライブラリを追加したものである。
当方の環境としてはJAVA SEを動かしながら
tomcat6内に標準装備されているJAVA EE用ライブラリを
使用している。よって構築環境はJAVA EEに従うものとする。
----------------------------------------------------

server.xmlについても提示頂いたソースを元に
少しだけテストしてみたのですが
まだ十分な検証ができておりませんので
また結果をこちらに報告させて頂きます。

丁寧な解説ありがとうございます!

お礼日時:2008/12/15 04:07

●apacheとtomcatの連携


今回のJDBCの設定に関しましては、
apacheとtomcatの連携の設定は関係ないでしょう。


●アプリケーション設定ファイル
> アプリケーションルート・META-INF/context.xml
JavaEEの設定ファイルを配備するディレクトリは、
META-INF の配下ではないはずです。
参考にしている本をよく確認しましょう。

●外部jarファイルの配置
> mysql-connector-java-5.1.7-bin.jarファイルについては
> Toncat 6.0/common/libに保存せよと本にはありますが
> commonディレクトリが無いためToncat 6.0/libに保存してあります。
これで正しいです。
tomcat 6.0の場合、外部jarファイルの配置は、
「%CATALINA_HOME%\lib」か、
または、
「アリケーションルート\WEB-INF\lib」です。

●CLASSPATHの設定
> またCLASSPATHの設定も本にはありませんでしたが
> ネットで色々調べていたらでてきましたので
> 以下のように設定してみましたがだめでした。
JavaEEでは、環境変数CLASSPATHの設定は無効です。
Tomcat 起動時に、CLASSPATHは勝手にTomcatが上書きしますので、
残念ながら無効です。

今のところ、他には変な所は見当たりませんので、
上の項目を参考にチェックしてみて下さい。

この回答への補足

EEかSEかの確認は
以下のファイルを開き確認しました。

C:\Program Files\Java\jdk1.6.0_10\LICENSE.rtf
---------------------------------------------------
for the JAVA SE DEVELOPMENT KIT (JDK), VERSION 6
---------------------------------------------------

補足日時:2008/12/15 00:38
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

>apacheとtomcatの連携の設定は関係ないでしょう。
こちらなんですが色々調べている途中以下のページで
http://www.amazon.co.jp/10%E6%97%A5%E3%81%A7%E3% …
【Apache+Tomcat環境で付属のソースを実行すると、データベース関係のプログラムでJDBCエラーがでる】
との記述があり、バージョン違いですが
そうなのかと思ってしまいました。

>JavaEEの設定ファイルを配備するディレクトリは、
META-INF の配下ではないはずです。
申し訳ありません。書き忘れましたが
当方はJavaSEを使用しています。
本に関してはこちらを進めているのですが
http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82 …
アプリケーション設定ファイルは
Administratorで行っており当方では
tomcat6のためAdministratorを使用できず
こちらのP62を参考にしました。
http://www.amazon.co.jp/%E4%BB%8A%E6%97%A5%E3%81 …
再度確認いたしましたが
アプリケーションルート/META-INF/context.xml
となっておりました。

せっかくお応え頂いたにも関わらず
当方の提示情報の不足があり申し訳ありません。

他にも確認することがあれば申し付け下さい。
また何かアドバイスがありましたらお願いします。

お礼日時:2008/12/15 00:36

こんにちわ。



Resourceと、ResourceParams要素を一緒くたにしているせいでは。

ResourceParamsにJDBC接続URLの記載が無いといけないのに、ResourceParamsが無いので、接続URLがnullとして扱われてしまい。。。
と考えると、エラーメッセージにも納得できます。

この回答への補足

お礼のserver.xmlについてなんですが
<Context path="" ~を追加した際
tomcatが立ち上がらなくなると言う現象がありました。


以下実行の際のjspファイルです。
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<fmt:requestEncoding value="Windows-31J" />
<html>
<head>
<title>データベース登録</title>
</head>
<body>
<form method="POST" action="update.jsp">
<table border="0">
<tr>
<th align="right">書名:</th>
<td><input type="text" name="title" size="40" maxlength="50" /></td>
</tr>
<tr>
<th align="right">出版社:</th>
<td><input type="text" name="publish" size="10" maxlength="15" /></td>
</tr>
<tr>
<th align="right">価格:</th>
<td><input type="text" name="price" size="4" maxlength="5" />円</td>
</tr>
<tr>
<th align="right">刊行日:</th>
<td><input type="text" name="publishDate" size="12" maxlength="10" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="sbm" value="登録" />
<input type="reset" value="クリア" />
</td>
</tr>
</table>
</form>
<c:if test="${not empty param.sbm}">
<c:catch var="err">
<sql:setDataSource var="db" dataSource="jdbc/Wl_Jsp" />
<sql:update dataSource="${db}">
INSERT INTO books(title,publish,price,publishDate) VALUES(?,?,?,?)
<sql:param value="${param.title}" />
<sql:param value="${param.publish}" />
<sql:param value="${param.price}" />
<sql:param value="${param.publishDate}" />
</sql:update>
新規登録に成功しました
</c:catch>
<c:if test="${not empty err}">
${err}
</c:if>
</c:if>
</body>
</html>

補足日時:2008/12/15 00:12
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

>ResourceParamsが無いので
ResourceParamsで検索したところ
%CATALINA_HOME%\conf\server.xmlの
<Host>下に以下を追加するとありましたので
試してみましたがだめでした。
<!--
<Context path="" docBase="ROOT" debug="0"/>
-->

<Context path="/wl_jsp" docBase="wl_jsp" reloadable="true">

<Resource name="jdbc/library" auth="Container"
type="javax.sql.DataSource" />

<ResourceParams name="jdbc/Wl_Jsp">
<parameter>
<name>driverClassName</name>
<value>org.git.mm.mysql.Driver</value>
</parameter>
<parameter>
<name>username</name>
<value></value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost/wl_jsp?useUnicode=true&characterEncoding=Windows-31J</value>
</parameter>
</ResourceParams>

</Context>

追加するファイルが間違っているのでしょうか?
内容に間違いがありますか?

また実行の際のjspソースも
補足にのせておきますので
また何かありましたら書込みをお願いします。

お礼日時:2008/12/15 00:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!