2015-09-27 15 views
1

Я новичок в подключении к MySQL с помощью JDBC с tomcat. Я слежу за отличным учебником here, но боюсь. Я обеспечил, чтобы моя группа безопасности EC2 настроена на порт MYSQL 3306 0.0.0.0/0 и HTTP-порт 80 0.0.0.0/0. В настоящее время я получаю сообщение об ошибке: Имя [jdbc/bbytesting] не связано в этом контексте. Не удалось найти [jdbc].Имя [ресурс] не связано в этом контексте. Не удалось найти [jdbc]

Вот StackTrace:

javax.naming.NameNotFoundException: Name [jdbc/bbytesting] 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 org.apache.naming.SelectorContext.lookup(SelectorContext.java:157) 
at javax.naming.InitialContext.lookup(InitialContext.java:417) 
at com.youtube.dao.MySQL308tube.MySQL308tubeConn(MySQL308tube.java:31) 
at com.youtube.rest.status.V1_status.returnDatabaseStatus(V1_status.java:61) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:483) 
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) 
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) 
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) 
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542) 
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409) 
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) 
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558) 
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
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:502) 
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:616) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1526) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1482) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Thread.java:745) 

Вот шаги, которые я уже выполненные до этого момента:

Загруженные MySQL JDBC Driver и положить в папку Lib

ресурсов JDBC Конфигурация

<Context> 

<Resource name="jdbc/bbytesting" auth="Container" type="javax.sql.DataSource" 
      maxActive="50" maxIdle="30" maxWait="10000" 
      username="username" password="password" 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://awsurl:3306/bbytesting"> 

</Context> 

Код статуса базы данных возврата:

public String returnDatabaseStatus() throws Exception { 

    PreparedStatement query = null; 
    String myString = null; 
    String returnString = null; 
    Connection conn = null; 

    try { 

     conn = MySQL308tube.MySQL308tubeConn().getConnection(); 
     query = conn.prepareStatement("select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') DATETIME " + "from sys.dual"); 
     ResultSet rs = query.executeQuery(); 

     while (rs.next()) { 
      myString = rs.getString("DATETIME"); 
     } 

     query.close(); 

     returnString = "<p>Database Status</p> " 
     + "<Database Date/Time return: " + myString + "</p>"; 

    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    finally { 
     if (conn != null) conn.close(); 
    } 

    return returnString; 
    } 

Вот подключение код класса:

public class MySQL308tube { 
    private static DataSource MySQL308tube = null; 
    private static Context context = null; 

    public static DataSource MySQL308tubeConn() throws Exception { 

    if(MySQL308tube != null) { 
     return MySQL308tube; 
    } 

    try { 

     if (context == null) { 
      context = new InitialContext(); 
     } 

     MySQL308tube = (DataSource) context.lookup("jdbc/bbytesting"); 

    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return MySQL308tube; 
} 

} 
+1

А в чем проблема? – Tunaki

+5

Пустые блоки блокировки - ужасная идея. Если вы выбрали исключение, вы не узнаете об этом. По крайней мере, распечатайте трассировку стека. – duffymo

+0

Вы получаете сообщение об ошибке –

ответ

-1

Вы используете в связи URL, который нуждается в дополнительных разрешений для пользователя awsurl. Если ваше приложение и база данных работают на одном сервере, обратитесь к localhost или 127.0.0.1.

Если вам нужно будет сделать ваш доступ к приложению этот сервер с помощью awsurl, перейдите на тузд строке, как тузд суперпользователя и выполнить GRANT:

Для глобального доступа.

GRANT ALL ON bbytesting.* TO '<user>'@'%' IDENTIFIED BY '<password>' 

Для доступа с определенного IP-адреса (возможно, IP сервера, на котором работает приложение)

GRANT ALL ON bbytesting.* TO '<user>'@'<ip_address>' IDENTIFIED BY '<password>' 

Кроме того, я рекомендую вам протестировать доступ с сервера базы запуске приложения с помощью команды:

mysql -u user_name -ppassword -h db_server_ip 

Нет пространство между переключателем -p и паролем

Возможно, вам потребуется установить пакет mysql-client для запуска команды mysql.

+0

Исключение прекрасно объясняет: вот почему вы никогда не должны иметь пустые блоки блокировки. – duffymo

1

Исключение объясняет это прекрасно: вот почему вы никогда не должны иметь пустых блоков catch.

Ошибка поиска источника данных JNDI. Вы должны предварять его с «Java:/сост/окр», как эти документы Tomcat сказать вам:

https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html

+0

@ duffymo - я обновил с помощью preend, но нашел его. однако появляется новая проблема. Невозможно создать PoolableConnectionFactory (Ошибка связи связи Последний пакет, успешно отправленный на сервер, был 0 миллисекунд назад. Драйвер не получил никаких пакетов с сервера.) – jKraut