2016-04-26 27 views
0

解決済みの問題に関連するこのサイトの多くの質問と回答が見つかりましたが、私の問題の解決策を見つけることができませんでした。javax.naming.NameNotFoundException | JNDIルックアップ

私は、単純なサーブレットDBCPDataSourceExampleを作成し、私はアプリケーションサーバV8 のApache Tomcatのserver.xml & context.xmlで提供しているうちDataSourceプロパティから接続を取得しています。以下

DBCPDataSourceExampleサーブレットである:

import javax.sql.DataSource; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class DBCPDataSourceExample extends HttpServlet { 

protected void doGet(HttpServletRequest request, HttpServletResponse respone) throws IOException { 
    Connection connection = null; 
    PreparedStatement statement = null; 
    ResultSet resultSet = null; 
    Context ctx ; 
    try { 
     try { 
      ctx = new InitialContext(); 
      Context ic= (Context) ctx.lookup("java:/comp/env"); 
      DataSource dts = (DataSource) ic.lookup("jdbc/harsh"); 
      connection = dts.getConnection(); 
     } catch (NamingException e) { 
      e.printStackTrace(); 
     } 
     statement = connection.prepareStatement("select * from stories"); 
     resultSet = statement.executeQuery(); 
     while (resultSet.next()) { 
      System.out.println("storyId: " + resultSet.getString("storyId")); 
      System.out.println("storyTitle: " + resultSet.getString("storyTitle")); 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } finally { 
     if (resultSet != null) try { resultSet.close(); } catch (SQLException e) {e.printStackTrace();} 
     if (statement != null) try { statement.close(); } catch (SQLException e) {e.printStackTrace();} 
     if (connection != null) try { connection.close(); } catch (SQLException e) {e.printStackTrace();} 
    } 

} 
} 

server.xmlResourceマッピング:

<GlobalNamingResources> 
<!-- Editable user database that can also be used by 
    UserDatabaseRealm to authenticate users 
--> 
<Resource name="UserDatabase" auth="Container" 
      type="org.apache.catalina.UserDatabase" 
      description="User database that can be updated and saved" 
      factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
      pathname="conf/tomcat-users.xml" /> 

<Resource name="jdbc/MyDB" 
      global="jdbc/MyDB" 
      auth="Container" 
      type="javax.sql.DataSource" 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost/storyBoard" 
      username="root" 
      password="" 

      maxActive="100" 
      maxIdle="20" 
      minIdle="5" 
      maxWait="10000"/> 
</GlobalNamingResources> 

context.xmlResourceマッピング:

xmlコードに問題がある場合、私は見つけられません。助けてください!ここで

は、コンソールからスタックトレースです:

javax.naming.NameNotFoundException: Name [jdbc/harsh] is not bound in this Context. Unable to find [jdbc]. 
at org.apache.naming.NamingContext.lookup(NamingContext.java:818) 
at org.apache.naming.NamingContext.lookup(NamingContext.java:166) 
at com.dbcp.DBCPDataSourceExample.doGet(DBCPDataSourceExample.java:31) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659) 
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Unknown Source) 

スタックトレースポイントこのあるために、コードの行:私たちは、私たちに必要な平均時間にserver.xmlでリソースを追加

   DataSource dts = (DataSource) ic.lookup("jdbc/harsh"); 
+0

完全なスタックトレースを追加してください – Jens

+0

スタックトレースを追加しました。チェックしてください。 –

+0

"jdbc/harsh"を "jdbc/MyDB"に変更しようとしました –

答えて

1

context.xmlが必要なリソースリンクを作成します。我々の場合には

、我々はあなたのcontext.xmlエントリを有効にしてください私たちの戦争のMETA-INFおよびサンプルエントリ中のcontext.xmlが

<ResourceLink name="email.host.name" global="email.host.name" type="java.lang.String"/>

のように見え続けます。

また、mysqlドライバをtomcatのlibディレクトリに配置していることを確認してください。

+0

私のアプリケーションのMETA-INFフォルダに 'context.xml'を入れました。今度はエラーがあります: 'java.sql.SQLException:接続URL 'null'に対しての行のJDBCドライバを作成できません: ' connection = dts。 server.xmlにある接続の詳細を問い合わせていると思います。 –

+0

context.xmlには、 のメッセージが含まれています。 ' – logztechstuff

+0

はい。私はcontext.xmlで接続プロパティを提供することができ、それはうまくいくはずです。しかし、私の質問は、context.xmlでこれらのプロパティを提供したくない場合は、ここからserver.xmlで定義されたプロパティにアクセスするにはどうすればいいですか? –

0

あなたのServer.xmlファイルには、URLにポート番号を入力する必要があると思います。 たとえば、url = "jdbc:mysql:// localhost:3306/storyBoard"

+0

'java.sql.SQLException:接続URL 'null'に対してクラス 'JDBCドライバを作成できません。 –

+0

jdbcドライバが追加されていることを確認してくださいあなたのプロジェクトで –

関連する問題