2016-04-26 4 views
0

Я нашел много вопросов и ответов на этом сайте, связанных с проблемой, но не смог найти решение моей проблемы, так что, наконец, пришлось снова отправить этот же вопрос!javax.naming.NameNotFoundException | JNDI lookup

Я создаю простой сервлет DBCPDataSourceExample, и получить соединение с DataSource свойства которых я представил в server.xml & context.xml из Apache Tomcat v8 сервера приложений.

Ниже 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 отображение:

<Resource name="jdbc/harsh" global="jdbc/MyDB" auth="container" type="javax.sql.DataSource" /> 

Если что-то не так с кодом 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) 

Код строки, где точки StackTrace на это:

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

Добавьте полную стекцию, пожалуйста, – Jens

+0

Я добавил стек трассировки. Пожалуйста, проверьте. –

+0

Вы пытались изменить «jdbc/harsh» на этот «jdbc/MyDB» –

ответ

1

Добавляем ресурсы в server.xml в то же время нам нужно для создания ссылки ресурса, где требуется context.xml.

В нашем случае, мы сохраняем context.xml в META-INF нашей войны и образец записи выглядит

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

Пожалуйста, подтвердите ввод context.xml.

Также убедитесь, что вы разместили драйвер mysql в каталоге lib tomcat.

+0

Ну, я поместил 'context.xml' в папку META-INF моего приложения. Теперь ошибка: 'java.sql.SQLException: не удается создать драйвер JDBC класса '' для подключения URL 'null'' в строке: ' connection = dts.GetConnection(); ' Теперь я предполагаю, что это просит о подключении, которые находятся в server.xml –

+0

Ваш context.xml содержит запись, как показано ниже, ' ' – logztechstuff

+0

Да. Я могу предоставить свойства соединения в context.xml, и это должно работать. Но мой вопрос в том, как я могу получить доступ к свойствам, определенным в server.xml, если я не хочу предоставлять эти свойства в context.xml? –

0

В файле Server.xml, я думаю, вам нужно указать номер порта в URL-адресе. например url = "jdbc: mysql: // localhost: 3306/storyBoard"

+0

Я пробовал и получил эту ошибку: 'java.sql.SQLException: Невозможно создать драйвер JDBC класса '' для подключения URL 'null'' –

+0

Убедитесь, что вы добавили драйверы jdbc с вашим проектом –

Смежные вопросы