[jboss-user] [JCA/JBoss] - Re: idle time out question

arparikh do-not-reply at jboss.com
Mon Feb 19 10:26:31 EST 2007


Here is the code snippets.


Below is the getConnection which returns Connection object

public void init(String resourceId, String resourceName, boolean defaultResource) throws DBException {
	try {
	Context initCtx = new InitialContext();
	Context envCtx = (Context) initCtx.lookup("java:comp/env");
            this.m_sources.put(resourceId, envCtx.lookup(resourceName));
            if (defaultResource) {
                this.m_defaultResourceId = resourceId;
            }
	}
	catch (NamingException ne) {
		throw new DBException(ne);
	}
	}
    
public Connection getConn(String resourceId) throws DBException {
        if (resourceId == null) {
            resourceId = this.m_defaultResourceId;
        }
        
	try {
        DataSource dataSource = (DataSource) this.m_sources.get  (resourceId);
            if (dataSource == null) {
                m_logger.error("###### FATAL ERROR -- DATA SOURCE NULL #######");
            }
            Connection conn = dataSource.getConnection();
            if (conn == null) {
                // try again????
                conn = dataSource.getConnection();
                if (conn == null) {
                    m_logger.error("###### FATAL ERROR -- CONNECTION NULL #######");
                }
            }
			conn.setAutoCommit(true);
            return conn;
		}
		catch (SQLException se) {
			throw new DBException(se);
		}
	}

Below is the code where we call getConnection to the connection object. We are getting NullPointer where we do conn.close(). The thing that I am wondering is if we are getting null conn, we should get null pointer at conn.setAutoCommit in getConnection or conn.createStatement. But instead we are getting on conn.close



    public void doSelect(String p_sql, int[] p_dataTypes) throws DBException
    {
        Connection conn = null;
        Statement sqlStmt = null;
        ResultSet resultSet = null;
        RecSet recset = new RecSet(this.m_resourceId);
        
        try
        {
            conn = DBConnMgr.getInstance().getConn(this.m_resourceId);
           // The above code getConn which is pasted above
            if (conn != null) {
            	m_logger.info("@@@@ We got the connection object");
            } else {
            	m_logger.info("######## DBSelect.doSelect CONNECTION IS NULL!!! ########");
            }
            sqlStmt = conn.createStatement();
            
            /*
            if (p_dataTypes != null)
            {
                for (int i = 0; i < p_dataTypes.length; i++)
                {
                    //sqlStmt.defineColumnType(i+1, p_dataTypes);
                }
            }
            */
            
            resultSet = sqlStmt.executeQuery(p_sql);            
            
            //operate on resultSet here
        }
        catch (SQLException se)
        {
            if (DBConnMgr.getInstance().isFatalError(se))
            {
                throw new DBException("Exception: " + se + ": " + se.getErrorCode() +
                        "\n" + "Database is down " + "\n", se.getErrorCode());
            }
            else
            {
                throw new DBException("Exception: " + se + ": " + se.getErrorCode() +
                        "\n" + "Could not perform " + p_sql + "\n");
            }
        }
        finally
        {
            try
            {
                if (resultSet != null)
                {
                    resultSet.close();
                }
                if (sqlStmt != null)
                {
                    sqlStmt.close();
                }
            }
            catch (SQLException se)
            {
                throw new DBException("Exception: " + se + "\n" +
                        "Could not close sql statement" + "\n");
            }
            finally
            {
                try
                {
                   conn.close();               
                }
                catch (SQLException se)
                {
                    m_logger.info("Failed to close DB connection");
                }             
            }
        }
        
        m_logger.debug("Successful " + p_sql + "\n");
        
        
    }

Thanks for the assistance

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4018868#4018868

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4018868



More information about the jboss-user mailing list