Name [resource], nicht gebunden, in diesem Zusammenhang. Nicht in der Lage zu finden [jdbc]
Ich bin neu, um die Verbindung zu MySQL über JDBC mit tomcat. Ich habe ein Super tutorial hier bin aber kämpfen. Ich habe sichergestellt, mein EC2-Sicherheitsgruppe konfiguriert ist, um MYSQL-port 3306 0.0.0.0/0 und HTTP-port 80 0.0.0.0/0. Ich bin derzeit immer die Fehlermeldung: Name [jdbc/bbytesting], nicht gebunden, in diesem Zusammenhang. Nicht in der Lage zu finden [jdbc].
Hier ist der 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)
Hier sind die Schritte, die ich durchgeführt haben, bis zu diesem Punkt:
Heruntergeladen MySQL-JDBC-Treiber und stellen Sie im lib-Ordner
JDBC-Ressource-Konfiguration
<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>
Rückkehr Datenbank status code:
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;
}
Hier ist die Verbindung Klasse-code:
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;
}
}
Und was ist das problem?
Leere catch-Blöcke sind eine schreckliche Idee. Wenn eine Ausnahme ausgelöst wird, die Sie nicht kennen. Wenigstens drucken Sie die stack-trace.
Sie sind immer eine Fehlermeldung
keine Fehlermeldung, aber noch wichtiger ist keine Antwort auf returnString.
Ich habe den stack-trace. Irgendein feedback?
Leere catch-Blöcke sind eine schreckliche Idee. Wenn eine Ausnahme ausgelöst wird, die Sie nicht kennen. Wenigstens drucken Sie die stack-trace.
Sie sind immer eine Fehlermeldung
keine Fehlermeldung, aber noch wichtiger ist keine Antwort auf returnString.
Ich habe den stack-trace. Irgendein feedback?
InformationsquelleAutor jKraut | 2015-09-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ausnahme erklärt es perfekt: Das ist, warum Sie sollten nie, nie mit leeren catch-Blöcke.
Ihre JNDI-Datenquelle-lookup fehlschlägt. Sie müssen voran, es mit "java:/comp/env", wie diese Tomcat-docs sagen Sie:
https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html
InformationsquelleAutor duffymo
Sind Sie mit
awsurl
in der Verbindungs-URL, die muss zusätzliche Berechtigungen für den Benutzer. Wenn die Anwendung und die Datenbank läuft auf dem gleichen server finden, indemlocalhost
oder127.0.0.1
.Wenn Sie brauchen, um Ihre Anwendung den Zugriff auf diesen server durch
awsurl
, gehen Sie auf die mysql-Eingabeaufforderung mysql root Benutzer und führenGRANT
:Für einen globalen Zugriff.
Für den Zugriff von einer bestimmten IP-Adresse (ggf. die IP des server, auf dem Sie Ihre Anwendung ausführen)
Ich auch empfehlen, die Sie testen den Zugriff auf die Datenbank von dem server, der Sie Ihre Anwendung ausführen mit Befehl:
Kein Leerzeichen zwischen dem Schalter -p und Passwort
Müssen Sie möglicherweise installieren Sie mysql-client-Paket ausführen, mysql Befehl.
InformationsquelleAutor James Jithin