既存の Tomcat 5.5 アプリケーション (GeoServer 2.0.0 が役立つかもしれません) にデータベース対応の JSP を追加しようとしています。
アプリ自体はPostgresと問題なく通信できるので、データベースが起動していて、ユーザーがアクセスできるなど、すべて問題ありません。私がやろうとしているのは、追加したJSPでデータベースクエリを実行することです。Tomcat データソースの例ほとんどそのままの状態です。必要なタグライブラリは適切な場所にあります。タグライブラリの参照だけがあればエラーは発生しないので、それらの JAR を検索します。postgres jdbc ドライバー postgresql-8.4.701.jdbc3.jar は $CATALINA_HOME/common/lib にあります。
JSP の上部は次のとおりです。
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<sql:query var="rs" dataSource="jdbc/mmas">
select current_validstart as ValidTime from runoff_forecast_valid_time
</sql:query>
$CATALINA_HOME/conf/server.xml の関連セクションは、 内<Host>
にあります<Engine>
。
<Context path="/gs2" allowLinking="true">
<Resource name="jdbc/mmas" type="javax.sql.Datasource"
auth="Container" driverClassName="org.postgresql.Driver"
maxActive="100" maxIdle="30" maxWait="10000"
username="mmas" password="very_secure_yess_precious!"
url="jdbc:postgresql//localhost:5432/mmas" />
</Context>
これらの行は、webapps/gs2/WEB-INF/web.xml のタグの最後の行です。
<resource-ref>
<description>
The database resource for the MMAS PostGIS database
</description>
<res-ref-name>
jdbc/mmas
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
最後に、例外:
exception
org.apache.jasper.JasperException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver"
[...wads of ensuing goo elided]
ベストアンサー1
悪名高い java.sql.SQLException: 適切なドライバーが見つかりません
この例外は基本的に二原因:
1. JDBCドライバがロードされていない
の場合にはトムキャット、JDBC ドライバーがサーバーの独自の/lib
フォルダーに配置されていることを確認する必要があります。
他のサーバーでも JAR ファイルを配置する方法は同様です。
- グラスフィッシュ: JARファイルを
/glassfish/lib
- ワイルドフライ: JARファイルを
/standalone/deployments
あるいは、実は@Resource
例えばJNDI経由で取得したり、JPAで構成したりするサーバー管理の接続プールデータソースを使用せずpersistence.xml
、手動でいじっている場合DriverManager#getConnection()
WAR 内のカスタム クラスで低レベルの方法を使用する場合は、代わりに JDBC ドライバーを WAR に配置し/WEB-INF/lib
て実行する必要があります。
Class.forName("com.example.jdbc.Driver");
.. カスタムコード内前に最初のDriverManager#getConnection()
電話で、ないスローされる可能性のあるものをすべて無視しClassNotFoundException
、何も例外が発生しなかったかのようにコードフローを続行します。Tomcat の接続プールの JDBC ドライバーはどこに配置する必要がありますか?そしてデータベースとやり取りするサーブレットにフォームを送信すると空白ページが表示される。
2. または、JDBC URLの構文が間違っている
指定されたJDBC URLがJDBCドライバのドキュメントに準拠していることを確認する必要があります。また、通常は大文字と小文字が区別されることに留意してください。JDBC URLtrue
がDriver#acceptsURL()
ロードされたドライバーのいずれかに対しても、まさにこの例外が発生します。
の場合にはPostgreSQLそれは文書化されているここ。
JDBC では、データベースは URL (Uniform Resource Locator) で表されます。PostgreSQL® では、これは次のいずれかの形式になります。
jdbc:postgresql:database
jdbc:postgresql:/
jdbc:postgresql://host/database
jdbc:postgresql://host/
jdbc:postgresql://host:port/database
jdbc:postgresql://host:port/
の場合にはマイグレーションそれは文書化されているここ。
接続 URL の一般的な形式は次のとおりです。
protocol//[hosts][/database][?properties]
これは単純な単一ホスト接続 URL の例です。
jdbc:mysql://host1:33060/sakila
の場合にはオラクルそれは文書化されているここ。
Thin ドライバーは、これらすべてに対して次の種類の URL 形式を提供します。
SID (Oracle では使用が推奨されていません):
jdbc:oracle:thin:[<user>/<password>]@<host>[:<port>]:<SID>
サービス:
jdbc:oracle:thin:[<user>/<password>]@//<host>[:<port>]/<service>
TNS名:
jdbc:oracle:thin:[<user>/<password>]@<TNSName>