• 締切済み

Tomcat6のコネクションプーリングについて

Tomcat6のコネクションプーリングについて 現在、以下の環境で開発を行っているのですが、 データソースからConnectionを取得できていない状況です。 過去に同様の内容が記載されていたのですが、 内容が理解できず投稿させていただいております。 【フォルダ構成】 test  |  |--META-INF  |   |  |   --context.xml  |  |--WEB-INF     |      --web.xml 【環境】 Windows XP Pro Eclipse3.3.2 apache2.2 tomcat6.0 jdk1.6.0_18 mysql-connector-java-5.1.12-bin.jar Struts2 以下に、context.xml、web.xml及び、サーブレットのコードを記載します ■web.xml=========== <?xml version="1.0" encoding="UTF-8"?> ~~(抜粋)~~ <resource-ref> <res-ref-name>test</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app> ■context.xml======= <?xml version="1.0" encoding="UTF-8"?> <Context displayName="test" docBase="test" path="/test" reloadable="false"> <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" username="root" password="root" driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=UTF-8" maxActive="4" maxWait="5000" maxIdle="2" validationQuery="select cont(*) from db_fuzoku" /> </Context> ■サーブレットコード(抜粋)===== public class test_Dao { DataSource ds; public ArrayList select(){ ArrayList list = new ArrayList(); try { // 初期コンテキストを取得 Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); // ルックアップしてデータソースを取得 ds = (DataSource) envCtx.lookup("jdbc/test"); } catch (Exception e) { e.printStackTrace(); } Connection con = null; Statement stmt = null; try { // データソースからConnectionを取得 con = ds.getConnection(); ==================== 以上、よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数2

みんなの回答

  • Lieserl
  • ベストアンサー率81% (31/38)
回答No.2

Resourceのname属性はjdbc/testなのに、 res-ref-nameはtestとしているからでは? あるいは、server.xmlに定義していないからかも?

  • Lieserl
  • ベストアンサー率81% (31/38)
回答No.1

何をもって 「データソースからConnectionを取得できていない状況です。」 と判断しましたか? エラーが発生しているのであれば、エラーメッセージを提示してもらわないと、誰も判断できません。

atenza215
質問者

補足

失礼しました。下記がエラーメッセージになります。 エラーメッセージが多いため抜粋させていただきます。 =========================================== javax.naming.NameNotFoundException: 名前 test はこのコンテキストにバインドされていません   at org.apache.naming.NamingContext.lookup(NamingContext.java:770)   at org.apache.naming.NamingContext.lookup(NamingContext.java:140)   at org.apache.naming.NamingContext.lookup(NamingContext.java:781)   at org.apache.naming.NamingContext.lookup(NamingContext.java:153)   at test_Dao.select(test_Dao.java:27)   ~~省略~~ java.lang.NullPointerException   at test_Dao.select(test_Dao.java:39)   ~~省略~~ =========================================== よろしくお願いいたします。

関連するQ&A

  • TomcatのJDBC連携について

    TomcatのJDBC連携について javax.servlet.ServletException: Cannot create JDBC driver of class '' for connect URL 'null' というエラーが消えず、知恵をお貸しください。 他にも同様のケースについて調べては見たのですが解決しません。 ■環境 Windows XP SP3 Eclipse3.6(Pleiades All in One 3.6.0.20100623) apache-tomcat-5.5.29 mysql-essential-5.1.48 ■設定 ■server.xml に下記を追加 <Context docBase="Test" path="/test" reloadable="true" source="org.eclipse.jst.j2ee.server:Test"> </Context> ■Tomcat 5.5/conf/Catalina/localhost/Test.xml に下記を記載 <Context docBase="${catalina.home}/server/webapps/test" privileged="true" antiResourceLocking="false" antiJARLocking="false"> <Resource name="jdbc/MySQL_JDBC" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=sjis" username="**" password="**" maxActive="20" maxIdle="30" maxWait="1800"/> </Context> ■Webアプリケーション配下の web.xmlに下記を追加 <resource-ref> <res-ref-name>jdbc/MySQL_JDBC</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> ■JSPソースに下記を記載 jdbc.jsp <% InitialContext initCon = new InitialContext(); DataSource ds = (DataSource) initCon.lookup("java:comp/env/jdbc/MySQL_JDBC"); Connection con = ds.getConnection(); Statement stmt = con.createStatement(); ResultSet result = stmt.executeQuery("select * from mytable;"); while (result.next()) { 表示処理 } con.close(); initCon.close(); %> 別途作成した下記JSPではデータ取得はできています。 <% Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/test?" + "user=tester&password=tester&useUnicode=true&characterEncoding=Shift_JIS"); Statement st=conn.createStatement(); ResultSet res = st.executeQuery("select * from mytable");

    • ベストアンサー
    • Java
  • JNDIでDataDourceにNullが入ってしまう

    いつもお世話になっています。 JNDIを使ってDataSourceを取得しようと思っているのですがNullが返ってきてしまってかなりハマッてます。 ご指導頂けたらと思います。 設定は下記のようになっています。 環境: jdk:1.4.2_12 tomcat:5.0 Mysql:4.0.20a-nt server.xml-------------------------------------------------- <Context docBase="C:\Documents and Settings\ESC\workspace\SNS\.deployables\SNS" path="/SNS" reloadable="true"> <Resource name="jdbc/MySQL" auth="Container" type="javax.sql.Datasource" /> <ResourceParams name="jdbc/MySQL"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <!-- Max Active <parameter> <name>maxActive</name> <value>100</value> </parameter> --> <!-- Max Idle <parameter> <name>maxIdle</name> <value>30</value> </parameter> --> <!-- Max Wait <parameter> <name>maxWait</name> <value>10000</value> </parameter> --> <parameter> <name>username</name> <value>****</value> </parameter> <parameter> <name>password</name> <value>****</value> </parameter> <parameter> <name>driverClassName</name> <value>com.mysql.jdbc.Driver</value> </parameter> <parameter> <name>url</name> <value>jdbc:mysql://localhost/dbname?useUnicode=true&amp;characterEncording=Windows-31J</value> </parameter> </ResourceParams> </Context> web.xml-------------------------------------------------- <resource-ref> <res-ref-name>jdbc/MySQL</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> java側-------------------------------------------------- InitialContext ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/MySQL"); connection = ds.getConnection(); -------------------------------------------------------- どうか宜しくお願い致します。

  • Tomcat5.0でJNDI

    お世話になります。 Tomcat5.0で、JNDIを使ってコネクションプーリングを実現しようとしてますが、なかなかうまいこといきません。 コンテキストファイル(hoge.xml)の設定 前略 <Resource name="jdbc/hoge" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/hoge">   <parameter>     <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>   </parameter>   <parameter>     <name>driverClassName</name>     <value>com.mysql.jdbc.Driver</value>   </parameter>   <parameter>     <name>url</name>     <value>jdbc:mysql://localhost/hoge</value>   </parameter>   <parameter>     <name>username</name>     <value>hogeuser</value>   </parameter>   <parameter>     <name>password</name>     <value>hogepass</value>   </parameter> 中略 </ResourceParams> 後略 これを、トムキャットホーム\conf\Catalina\localhostに置いています。 Javaの方のソース String dsString = getServlet().getInitParameter("java:comp/env/jdbc/hoge"); InitialContext context = new InitialContext(); DataSource ds = (DataSource) context.lookup(dsString); Connection connection = ds.getConnection(); 実行すると、 名前 java:/comp/env/jdbc/hoge はこのコンテキストにバインドされていません という具合に怒られます。名前はjdbc/hogeで合ってると思うのですが、他に何かおかしいところがあるでしょうか。 また他に調べるべき点はどのようなところでしょうか。 どうぞよろしくご教授ください。

  • javaのMySQL(DataSource)

    ちょっとDataSourceを使って会員登録をしてたら、エラーが出て先に進めなくなってしまったのでご教授願いたいと思い質問させていただきました。 server.xmlに、 <Resource name="MySQL_JDBC" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="MySQL_JDBC">を書いて、 web.xmlに、 <resource-ref> <res-ref-name>MySQL_JDBC</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>を書いて、 会員登録をするアクションに、 DataSource dataSource=null; public void init()throws ServletException{ try{ Context context=new InitialContext(); dataSource=(DataSource)context.lookup("java:comp/env/MySQL_JDBC"); }catch(NamingException e){ throw new ServletException(e); } } Connection conn; try{ conn=dataSource.getConnection(); Statement stmt = null; String sql="insert into member(member_id,member_pass,family_name,first_name,birth_year,birth_month,birth_day,address,post_code,mail,"+ "sex,home_tel,job) values('"+ member_id +"',"+ mempasslong +",'"+ family_name +"','"+ first_name +"',"+ birth_year +","+ birth_month +","+ birth_day +",'"+ address +"',"+ post_code +",'"+ mail +"',"+sexint+","+ home_tel +",'"+ job +")"; int result=stmt.executeUpdate(sql); }catch(SQLException e){ message = "登録失敗しました。"; request.setAttribute("message", message); return mapping.findForward("registererror"); } message = "登録完了しました。"; request.setAttribute("message", message); return mapping.findForward("success"); } }と書いて会員登録を完了させたいんですけど、会員情報を入力して実行すると、 致命的: サーブレット action のServlet.service()が例外を投げました java.lang.NullPointerException at memregister.AddressAction.execute(AddressAction.java:100) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) というエラーがでて先に進めなくなりました。エラーの場所は分かるのですが、どのように訂正すればいいと思いますか?ちなみにエラー1行目のAddressAction.java:100は、conn=dataSource.getConnection();の箇所です。

    • ベストアンサー
    • Java
  • eclipseでのJDBCについて

    eclipseのMySQLJDBCの外部接続に関して全く分からず手詰まりしているので、ご教授願いたいと思います。 プロジェクトの配下のweb.xmlにMySQLの接続情報を入力しました。一応ソースです。 web.xmlに <context-param> <param-name>jdbcDriver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> <description>JDBC Driver</description> </context-param> <context-param> <param-name>jdbcUri</param-name> <param-value>jdbc:mysql://localhost:3306/airticket?useUnicode=true&amp; characterEncoding=sjis</param-value> <description>MySQL URI</description> </context-param> <resource-ref> <res-ref-name>jdbc/MySQL_JDBC</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> を書いて、 会員登録をするクラスに、 try{ try{ //ドライバクラスをロード Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch(Exception ex) { } //データベースへ接続 String url = "jdbc:mysql:///airticket?useUnicode=true&characterEncoding=SJIS"; Connection con = DriverManager.getConnection(url); //ステートメントオブジェクトを生成 Statement stmt=con.createStatement(); String sql="insert into member(member_id,member_pass,family_name,first_name,birth_year,birth_month,birth_day,address,post_code,mail,"+"sex,home_tel,job) values('"+ member_id +"',"+ mempasslong +",'"+ family_name +"','"+ first_name +"',"+ birth_year +","+ birth_month +","+ birth_day +",'"+ address +"',"+ post_code +",'"+ mail +"',"+sexint+","+ home_tel +",'"+ job +"');"; int result=stmt.executeUpdate(sql);       stmt.executeBatch(); // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { message = "登録失敗しました。"; request.setAttribute("message", message); return mapping.findForward("registererror"); } message = "登録完了しました。"; request.setAttribute("message", message); return mapping.findForward("success"); } } って書いてクラスからweb.xmlを参照してデータベース接続したいんですが、エラーが出ずに困っています。そもそもクラスからweb.xmlの情報を参照するやりかたはあるのですか?教えてください

  • apacheとtomcat連携時においてのJDBCの設定

    似たケースが検索で見つけられず 投稿させて頂きます。 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 --------------- 長乱文失礼致しました。 他に必要な設定などありますでしょうか? アドバイス・ヒントなどありましたらお願いします。

    • ベストアンサー
    • Java
  • JNDIについて

    緊急で困っています。宜しくお願いします。 JNDIを使ってDB接続しようとしているのですがエラーが出て接続できません。 ■発生箇所---------------------------------------- public static Connection getConnection() { Connection con = null; try { InitialContext context = new InitialContext(); DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/MySQL"); con = ds.getConnection(); } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return con; } のlookupの箇所です。 ------------------------------------------ server.xml <Context>タグの中に <Resource name="jdbc/MySQL" auth="Container" type="javax.sql.Datasource"> <ResourceParams name="jdbc/MySQL"> <parameter>    <name>factory</name>   <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <!-- Max Active <parameter> <name>maxActive</name> <value>100</value> </parameter> --> <!-- Max Idle <parameter> <name>maxIdle</name> <value>30</value> </parameter> --> <!-- Max Wait <parameter> <name>maxWait</name> <value>10000</value> </parameter> --> <parameter> <name>username</name> <value>***</value> </parameter> <parameter> <name>password</name> <value>***</value> </parameter> <parameter> <name>driverClassName</name> <value>com.mysql.jdbc.Driver</value> </parameter> <parameter> <name>url</name> <value>jdbc:mysql://localhost/DB名?useUnicode=true&amp;characterEncording=Windows-31J</value> </parameter> </ResourceParams> </Resource> </Context> ---------------------------------------------- web.xml <resource-ref> <res-ref-name>jdbc/MySQL</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> ---------------------------------------------------- 必要なライブラリはTOMCAT_HOME/common/libに配置しています。 ------------エラーログ javax.naming.NamingException: Cannot create resource instance at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:132) at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source) at org.apache.naming.NamingContext.lookup(NamingContext.java:791) at org.apache.naming.NamingContext.lookup(NamingContext.java:138) at org.apache.naming.NamingContext.lookup(NamingContext.java:779) at org.apache.naming.NamingContext.lookup(NamingContext.java:138) at org.apache.naming.NamingContext.lookup(NamingContext.java:779) at org.apache.naming.NamingContext.lookup(NamingContext.java:138) at org.apache.naming.NamingContext.lookup(NamingContext.java:779) at org.apache.naming.NamingContext.lookup(NamingContext.java:151) at org.apache.naming.SelectorContext.lookup(SelectorContext.java:136) at javax.naming.InitialContext.lookup(Unknown Source) at com.llc.aison.seikei.util.DBUtil.getConnection(DBUtil.java:18) 環境: Tomcat5.0 mysql eclipse3.1.1 jdk1.4_12 以上宜しくお願いします。

    • ベストアンサー
    • Java
  • tomcat5.5 全コンテキスト共有のDBCP設定方法

    こんにちは。 Tomcat5.5のDBCP設定で悩んでいます。 調べた限りだとDBCP設定は、以下のように設定すると思います。 <Context path="/DBTest" docBase="DBTest" debug="5" reloadable="true" crossContext="true"> <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/> </Context> ただこの設定だと、webapps配下に配置する"DBTest"のみが対象となる 設定です。webapps配下に配置する全てのコンテキスト(アプリケーシ ョン)共有のDBCP設定をするにはどうしたらいいのでしょうか? 申し訳ありませんが、ご回答よろしく御願いします。

  • TomcatとMySQLのコネクションが切れる

    はじめまして、下記の様な環境でServletを運用していますが、 一日たつと(翌日になると)TomcatとMySQLのコネクションが切れており、 WEBアプリケーションにログインできなくなってしまいます。Tomcatを再起動するとコネクションは回復し、 ログインできるようになります。 なぜコネクションが勝手に切れてしまうのかが、解りませんでしたので質問しました。 よろしくお願い致します。 ・Windows Server2003 ・Tomcat6.0 ・MySQL ・JAVA Servlet エラーログ ----------------------------------------------------------------------- SQLException:No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error: ** BEGIN NESTED EXCEPTION ** com.mysql.jdbc.CommunicationsException MESSAGE: Communications link failure Last packet sent to the server was 0 ms ago. STACKTRACE: com.mysql.jdbc.CommunicationsException: Communications link failure Last packet sent to the server was 0 ms ago. -------------------------------------------------------------

    • ベストアンサー
    • MySQL
  • コネクションプールについて

    コネクションプール有とコネクションプール無でDB接続・切断を繰り返したときに どれくらい差があるか試してみようと思いWebアプリ上(フレームワークにStruts2を使用)で 下記コードを実行してみました。 dbcpConnectメソッド(コネクションプール有) と jdbcConnectメソッド(コネクションプール無) をそれぞれ千回づつループで回して実行してみました。 結果は 【コネクションプール有】実行にかかった時間:157384 ミリ秒 【コネクションプール無】実行にかかった時間:158760 ミリ秒 で大差はありませんでした。 コネクションプールを使用するともう少し早いと思っていたのですがそのようなことはないのでしょうか。 public String test4() { // コネクションプール有の接続 long start = System.currentTimeMillis(); for(int i=0; i< 1000; i++) { dbcpConnect(); } long stop = System.currentTimeMillis(); System.out.println("実行にかかった時間は " + (stop - start) + " ミリ秒です。"); // コネクションプール無の接続 start = System.currentTimeMillis(); for(int i=0; i< 1000; i++) { jdbcConnect(); } stop = System.currentTimeMillis(); System.out.println("実行にかかった時間は " + (stop - start) + " ミリ秒です。"); return "jstl4"; } public void dbcpConnect() { Connection con = null; try{ Context context = new InitialContext(); //DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/library"); DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/dhcpTest"); con = ds.getConnection(); Statement stmt = con.createStatement(); String sql = "SELECT * FROM test.test"; ResultSet rs = stmt.executeQuery(sql); } catch(Exception e) { System.out.println("Error"); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } public void jdbcConnect() { Connection con = null; try{ con = DriverManager.getConnection("jdbc:mysql://localhost", "root", "root"); Statement stmt = con.createStatement(); String sql = "SELECT * FROM test.test"; ResultSet rs = stmt.executeQuery(sql); } catch(Exception e) { System.out.println("Error"); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java