0

For my project i want to use tomcat connection pooling for oracle DB using jndi and getting exception while executing the below code:

This is the exception which i am getting:

  javax.naming.NameNotFoundException: Name java: is not bound in this Context
    at org.apache.naming.NamingContext.lookup(NamingContext.java:803)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at com.iton.dbcp.DBUtil.getConnection(DBUtil.java:28)
    at com.iton.dbcp.TestServlet.doGet(TestServlet.java:35)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
   icationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
  ilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.p
rocessConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpo
  int.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFol
  lowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:684)
    at java.lang.Thread.run(Thread.java:662)

These are the files which i am using for the connection pool

i was placed the below configuration in /conf/server.xml :

<Resource name="jdbc/pooldb" auth="Container" type="javax.sql.DataSource"
 maxActive="5" maxIdle="2" maxWait="1000"                         factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            driverClassName="oracle.jdbc.driver.OracleDriver"
            url="jdbc:oracle:thin:@localhost:1521:pooldb"/>

DBUtil1.java:

package com.iton.dbcp;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class DBUtil1 {

public static Connection getConnection() throws NamingException, SQLException {

    Context initContext = new InitialContext();
    Context envContext = (Context) initContext.lookup("java:/comp/env");
    DataSource ds = null;
    Connection conn = null;
    try {
        ds = (DataSource) envContext.lookup("jdbc/pooldb");
    } catch (Exception e) {
        e.printStackTrace();
    }
    if (envContext == null) {
        System.out.println("envcontext is null");
    }
    if (ds == null) {
        System.out.println("datasource is null");
    }
    if (ds != null){
      conn = ds.getConnection("pooldb","pooldb");
    }
    return conn;
}
 }

TestServlet.java:

package com.iton.dbcp;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public TestServlet() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws      ServletException, IOException {

    Connection con = null;
    try {
        con = DBUtil.getConnection();
        System.out.println("opened conncetion:::::::::: "+con);
        Statement stmt = con.createStatement();
        stmt.executeUpdate("create table iton(sno varchar(10), name varchar(10))");
        stmt.close();
        DBUtil.closeConncetion(con);
        System.out.println("Closeddddddddddddddd: "+con);

    } catch (NamingException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
   }

web.xml: http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> TestApp

<description>Oracle Test App</description>
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/pooldb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<servlet>
<servlet-name>abscd</servlet-name>
<servlet-class>com.iton.dbcp.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>abscd</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

</web-app>

in /conf/context.xml:

 <!-- The contents of this file will be loaded for each web application -->
 <Context>

<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>

<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->

<ResourceLink global="jdbc/pooldb" name="jdbc/pooldb" type="javax.sql.DataSource"/> 
</Context>

please resolve this issue

3 Answers 3

1
Context envContext = (Context) initContext.lookup("java:/comp/env");

should be:

Context envContext = (Context) initContext.lookup("java:comp/env");

The Java environment context is java:comp/env. Remove that / before comp and you should be good to go.

Sign up to request clarification or add additional context in comments.

1 Comment

Thaks for ur reply i removed slash(/) but it is not working
0

I think you are missing your server.xml entries. First, you need to configure the JNDI DataSource in Tomcat by adding a declaration for the resource to server.xml file, which resides inside the /conf directory of your Tomcat installation

Enter you applications specify value.

<Resource name="jdbc/your datasource" auth="Container"
   type="javax.sql.DataSource" removeAbandoned="true"
   removeAbandonedTimeout="30" maxActive="100"
   maxIdle="30" maxWait="10000" username=""
   password=""
   driverClassName="oracle driver"
   url="database connection string"/>

</Context>

Comments

0

This error:

javax.naming.NameNotFoundException: Name java: is not bound in this Context

Is caused by this line:

Context envContext = (Context) initContext.lookup("java:/comp/env"); // INCORRECT

Q: What happens if you change your code to initContext.lookup("java:comp/env");?

Q: Is there any chance you've inadvertantly changed the default context?

This link might help:

What does java:comp/env/ do?

Make sure useNaming is "true":

http://tomcat.apache.org/tomcat-5.5-doc/catalina/funcspecs/fs-admin-objects.html

Finally,

Changing embedded Tomcat from v6 to v7 causes InitialContext lookup to fail

http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.