'NullPointerException in conn = this.jdbcFactory.getConnection();
I am using Java 1.4 and tomcat v4.0.
This is the code in my Dao:
private DataSource jdbcFactory;
public CommonDao() {
Context c = null;
if (this.jdbcFactory == null) {
try {
c= new InitialContext();
Context envCtx = (Context)c.lookup("java:comp/env");
this.jdbcFactory = (DataSource)envCtx.lookup("jdbc/mydb");
} catch (NamingException e) {
e.printStackTrace();
}
}
}
public String getParamValue(String param_name) throws SQLException, TestException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sqlString=null;
String param_value = null;
TestException fe = new TestException();
sqlString = "SELECT PARAM_VALUE " +
"FROM SAMPLE_TBL " +
"WHERE PARAM_NAME = '" + param_name + "' " ;
try {
conn = this.jdbcFactory.getConnection();
ps = conn.prepareStatement(sqlString);
rs = ps.executeQuery();
while (rs.next()) {
param_value = rs.getString("PARAM_VALUE");
}
} catch(SQLException e){
fe.setCallingObj("CommonDao.getParamValue");
fe.setErrorCode(e.getErrorCode());
fe.setErrorMessage(e.getMessage());
fe.setStackTrace(e.getStackTrace());
throw fe;
} catch (Exception e) {
e.printStackTrace();
} finally {
rs.close();
ps.close();
conn.close();
}
return param_value;
}
context.xml under META-INF:
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/mydb" global="jdbc/mydb" auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
url="jdbc:oracle:thin:@somesitexxx:xxxx:XXXXXX"
username="someusername" password="somepass" maxActive="1000"
maxIdle="1000" maxWait="500" />
</Context>
web.xml under WEB-INF:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app id="WebApp_ID">
<servlet>
<servlet-name>LoginController</servlet-name>
<display-name>LoginController</display-name>
<description></description>
<servlet-class>com.Controller.LoginController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginController</servlet-name>
<url-pattern>/LoginController</url-pattern>
</servlet-mapping>
<resource-ref>
<res-ref-name>jdbc/rdcdb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
I am using ojdbc7-12.1.0.2.jar as well but included or not I am still getting the NPE in conn = this.jdbcFactory.getConnection();
this.jdbcFactory -> is also null when debugging.
Can you help me which part I miss?
EDIT: I have now upgraded to java 8 and tomcat 7 and used ojdbc7-12.1.0.2.jar. But I am still getting the NPE exception updated error stacktrace:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.driver.OracleDriver'
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1429)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at com.Dao.CommonDao.getParamValue(CommonDao.java:72)
at com.Dao.CommonDao.checkAvailability(CommonDao.java:411)
at com.Controller.LoginController.processRequest(LoginController.java:114)
at com.Controller.LoginController.doGet(LoginController.java:64)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.driver.OracleDriver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1420)
... 27 more
Apr 28, 2022 3:16:40 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [LoginController] in context with path [/BV_PROBE] threw exception
java.lang.NullPointerException
at com.Dao.CommonDao.getParamValue(CommonDao.java:89)
at com.Dao.CommonDao.checkAvailability(CommonDao.java:411)
at com.Controller.LoginController.processRequest(LoginController.java:114)
at com.Controller.LoginController.doGet(LoginController.java:64)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
It catches SQLException: Cannot load JDBC driver class 'oracle.jdbc.driver.driver.OracleDriver'
Solution 1:[1]
Assuming that that is the only constructor ...
If jdbcFactory is null, that means that in the following code:
try {
c = new InitialContext();
Context envCtx = (Context) c.lookup("java:comp/env");
this.jdbcFactory = (DataSource) envCtx.lookup("jdbc/mydb");
} catch (NamingException e) {
e.printStackTrace();
}
either the second lookup call returned null or you threw and caught a NamingException. According to the Context javadocs, a lookup call may return null, it your application bound null to the name.
However ... on rereading your question, I noticed this:
I am using Java 1.4 and Tomcat v4.0.
These are truly ancient versions. Both are end-of-life. Tomcat 4 was end-of-life prior to 20121, and Java 1.4.2 in 2013. You are missing nearly 10 years worth of security patches.
And this:
I am using ojdbc7-12.1.0.2.jar
That is a driver for Java 7. I doubt that it will work with Java 1.4.
According to what I have read, you should be using an ojdbc.14 driver with Java 1.4. It is highly unlikely that you can find one that is compatible with a recent Oracle database.
1 - 2012 is when Tomcat 5 was officially end-of-life. The end-of-life for earlier versions was not formally announced. But the last patch release of Tomcat 4 was in 2009.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
