Howdie do,JNDI在服務器初始化函數中拋出Servlet異常
我試圖將應用程序部署到我的新Tomcat託管服務。問題是我現在正在運行服務器初始化函數時得到一個Servlet異常。
下面的錯誤是:
26-May-2015 12:56:48.668 SEVERE [http-nio-12937-exec-2] org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet Controller
javax.servlet.ServletException
at controller.Controller.init(Controller.java:42)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1241)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1154)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:827)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:744)
現在,這是我的web.xml文件中,設置了數據源:
<Resource name="jdbc/drkplaya_pkRater" auth="Container"
type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/drkplaya_pkRater"
username="drkplaya_pkRater" password="" initialSize="1" maxActive="30" maxIdle="30"
maxWait="15000" removeAbandoned="true" removeAbandonedTimeout="300" logAbandoned="true"
validationQuery="select now();"
/>
<servlet>
<description></description>
<display-name>Controller</display-name>
<servlet-name>Controller</servlet-name>
<servlet-class>controller.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/gallery</url-pattern>
</servlet-mapping>
最後,這是我的初始化函數調用數據源:
public void init(ServletConfig config) throws ServletException {
try {
InitialContext initContext = new InitialContext();
Context env = (Context) initContext.lookup("java:comp/env");
ds = (DataSource) env.lookup("jdbc/drkplaya_pkRater");
} catch (NamingException e) {
throw new ServletException();
}
}
現在,這是我的本地服務器上運行的100%,但在上傳,我收到異常清單當然d以上。
在我的init函數中是否存在導致此錯誤的錯誤?
編輯:有人指出,我吞下了NameException。修復後,我知道有以下錯誤:
message javax.naming.NameNotFoundException: Name [jdbc/drkplaya_pkRater] is not bound in this Context. Unable to find [jdbc].
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: javax.naming.NameNotFoundException: Name [jdbc/drkplaya_pkRater] is not bound in this Context. Unable to find [jdbc].
controller.Controller.init(Controller.java:42)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:744)
root cause
javax.naming.NameNotFoundException: Name [jdbc/drkplaya_pkRater] is not bound in this Context. Unable to find [jdbc].
org.apache.naming.NamingContext.lookup(NamingContext.java:818)
org.apache.naming.NamingContext.lookup(NamingContext.java:166)
controller.Controller.init(Controller.java:39)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
你爲什麼吞嚥可能包含根本原因線索的'NamingException'?絕對不要這樣做,例外。總是將它們包裝爲根本原因,就像這樣拋出新的ServletException(e);'。然後你會在堆棧跟蹤中看到一個「由...引起」,最底層的通常已經代表整個答案。您的問題標題也是誤導性的。 JNDI沒有這樣做。你自己做到了。 – BalusC
我很欣賞答案,但是,這是我的第一個JNDI應用程序。我只是試圖找到我的錯誤的原因。 – Jimmy