Tomcat でアプリケーション用のデータ ソースをセットアップしようとして、髪を引っ張っていました。私が取った手順は
次の内容で META-INF/context.xml を作成します
<Context> <Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@gpqa6.myserver.com:1526:gpqa6" username="foo" password="foobar" maxActive="20" maxIdle="30" maxWait="-1" /> </Context>
WEB-INF/web.xml に次のテキストを入力します。
<resource-ref> <description>Datasource</description> <res-ref-name>jdbc/mydb</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
コードでの使用
public class MyServlet extends HttpServlet { private DataSource ds; public void init() { try { Context ctx = new InitialContext(); ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mydb"); } catch (NamingException e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //this is where the exception is thrown Connection conn = ds.getConnection(); //...do stuff with the connection }
しかし、次のエラーが発生し続けます
「マッピング中に例外が発生しました。エラー: PoolableConnectionFactory を作成できません (ORA-01017: 無効なユーザー名/パスワード; ログオンが拒否されました) org.apache.tomcat.dbcp.dbcp.SQLNestedException: PoolableConnectionFactory を作成できません (ORA-01017: 無効なユーザー名/パスワード; ログオン拒否された"
ユーザー名とパスワードが正しいことはわかっています。次のコードが機能するため
Class.forName("oracle.jdbc.OracleDriver").newInstance();
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@gpqa6.myserver.com:1526:gpqa6", "foo", "foobar");
無効な URL を入力しようとしましたが、それでも同じエラーが発生します。どうしたの???
また、Tomcat には、WebLogic や Glassfish と同様に、データ ソースをテストする何らかの方法がありますか?