使用websphere连接池出现一个问题,请大家帮忙.

请大家帮忙看下,服务器上的配置应该没有问题,我怀疑是操作池出现了问题,大家帮忙看下,或者给我一个比较好的使用websphere jndi连接池 的示例.

1.错误如下
[08-6-24 20:59:45:000 CST] 00000055 MCWrapper     E   J2CA0081E: 尝试在资源 jdbc/searchOil 的 ManagedConnection WSRdbManagedConnectionImpl@158e71a2 上执行方法 cleanup 时方法 cleanup 失败。捕获到异常:java.lang.NullPointerException
        at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.closeChildWrappers(WSJdbcObject.java:162)
        at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.dissociate(WSJdbcConnection.java:1204)
        at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.dissociateConnections(WSRdbManagedConnectionImpl.java:845)
        at com.ibm.ejs.j2c.MCWrapper.cleanup(MCWrapper.java:1336)
        at com.ibm.ejs.j2c.poolmanager.FreePool.returnToFreePool(FreePool.java:447)
        at com.ibm.ejs.j2c.poolmanager.PoolManager.release(PoolManager.java:1508)
        at com.ibm.ejs.j2c.MCWrapper.releaseToPoolManager(MCWrapper.java:1945)
        at com.ibm.ejs.j2c.LocalTransactionWrapper.afterCompletion(LocalTransactionWrapper.java:1130)
        at com.ibm.ws.LocalTransaction.LocalTranCoordImpl.informSynchronizations(LocalTranCoordImpl.java:1472)
        at com.ibm.ws.LocalTransaction.LocalTranCoordImpl.cleanup(LocalTranCoordImpl.java:1180)
        at com.ibm.ws.LocalTransaction.LocalTranCoordImpl.end(LocalTranCoordImpl.java:1285)
        at com.ibm.ws.webcontainer.webapp.WebAppTransactionCollaborator.postInvoke(WebAppTransactionCollaborator.java:254)
        at com.ibm.ws.webcontainer.webapp.WebApp.transactionPostInvoke(WebApp.java:3092)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:874)
        at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:80)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1802)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:84)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:469)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:408)
        at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:101)
        at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1686)
        at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java:566)
        at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java:619)
        at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java:952)
        at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java:1039)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1455)

[08-6-24 20:59:45:063 CST] 00000055 MCWrapper     E   J2CA0081E: 尝试在资源 No longer available 的 ManagedConnection WSRdbManagedConnectionImpl@158e71a2 上执行方法 destroy 时方法 destroy 失败。捕获到异常:java.lang.NullPointerException
        at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.closeChildWrappers(WSJdbcObject.java:162)
        at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.close(WSJdbcObject.java:125)
        at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.closeHandles(WSRdbManagedConnectionImpl.java:3405)
        at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.destroy(WSRdbManagedConnectionImpl.java:2746)
        at com.ibm.ejs.j2c.MCWrapper.destroy(MCWrapper.java:1544)
        at com.ibm.ejs.j2c.poolmanager.FreePool.returnToFreePool(FreePool.java:460)
        at com.ibm.ejs.j2c.poolmanager.PoolManager.release(PoolManager.java:1508)
        at com.ibm.ejs.j2c.MCWrapper.releaseToPoolManager(MCWrapper.java:1945)
        at com.ibm.ejs.j2c.LocalTransactionWrapper.afterCompletion(LocalTransactionWrapper.java:1130)
        at com.ibm.ws.LocalTransaction.LocalTranCoordImpl.informSynchronizations(LocalTranCoordImpl.java:1472)
        at com.ibm.ws.LocalTransaction.LocalTranCoordImpl.cleanup(LocalTranCoordImpl.java:1180)
        at com.ibm.ws.LocalTransaction.LocalTranCoordImpl.end(LocalTranCoordImpl.java:1285)
        at com.ibm.ws.webcontainer.webapp.WebAppTransactionCollaborator.postInvoke(WebAppTransactionCollaborator.java:254)
        at com.ibm.ws.webcontainer.webapp.WebApp.transactionPostInvoke(WebApp.java:3092)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:874)
        at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:80)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1802)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:84)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:469)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:408)
        at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:101)
        at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1686)
        at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java:566)
        at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java:619)
        at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java:952)
        at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java:1039)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1455)
2.配置的JNDI连接池,测试过连接正常,但是连接次数过过就会提示如上错误,或者直接提示connction未关闭.
我把我写的辅助类,和配置文件,以及调用类发出来,大家帮我看下.

配置文件:
dataSourceName=jdbc/searchOil
factory=com.ibm.websphere.naming.WsnInitialContextFactory
url=iiop://localhost:2809/
DataProvider=OracleDB
CoreDataProvider=OracleDB   

辅助类:
public class DBConnection
{

    private java.sql.Connection FConnection = null;
        private static DBConnection FInstance = new DBConnection();        
        private Context FContext = null;
        /**
        * 初始化
        */
        private void InitContext()
        {
            try
                {
                    Hashtable env = new Hashtable();
                        env.put( Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
                        FContext = new InitialContext(env);        
                        System.out.print("-----" + FContext);
                        //FContext = new InitialContext();

                } catch(Exception e)
                {
                System.out.println("不能初始化连接工厂环境,"+e.toString() );
                }
        }
        /**
         * 获取给定JNDI名的数据源
        */
    public DataSource getDataSource(String JNDIName)
        {
            javax.sql.DataSource ds = null;
            try
            {
                ds = ( javax.sql.DataSource)FContext.lookup(JNDIName) ;
                } catch( Exception e1)
                   {
                       System.out.println( "查找数据源异常," + e1.toString() );
            }
            return ds;
    }
        private String getJNDIName()
    {
            String result = "";
            try
            {
                      java.net.URL url =DBConnection.class.getResource("/db_config.properties");
                    
                    System.out.println("url"+url);
                        InputStream is = (InputStream) url.getContent();
                        Properties props = new Properties();
                        props.load(is);
                        result = props.getProperty( "dataSourceName");
                                //System.out.println( result);
            } catch (Exception e)
            {
                        e.printStackTrace();
                }
                  return result;
        }
                  /**
                   * 构造函数,完成Context初始化并获取数据连接
                   */
        private DBConnection()
        {                  
            InitContext();
            String jndi = getJNDIName();
            DataSource ds = getDataSource( jndi);
            if( ds == null)
                  {
                      System.out.println( "无法获得指定名称的jndi!");
                  }        
                  try
                  {
                          FConnection = ds.getConnection();
                  } catch( Exception e)
                  {
                      System.out.println( "获取连接错误," + e.toString());
                  }
    }
        synchronized public static DBConnection getInstance()
        {
            return FInstance;
        }
        public Connection getConnection()
        {
                return FConnection;
        }
        public Statement newStatement()
        {
                if( FConnection == null)
                        return null;
            Statement st = null;        
                try
                {
                        st = FConnection.createStatement();                        
                } catch( Exception e)
                {
                        e.printStackTrace();
                        System.out.println( "Error Trace in NewStatement() : " + e.getMessage());
                }
                        
                return st;
        }
        public static void main(String[] args)
        {
                DBConnection db = DBConnection.getInstance();
                db.getConnection();
                        
                System.out.println( "hello,world!");
        }
                        
}
调用方法
try {
                        java.sql.ResultSet rs = null;
                        Statement stmt = null;
                        DBConnection db = DBConnection.getInstance();
                        stmt = db.newStatement();
                        String sql = "select jd_id from km_a04  where sjjd_id = '"+id+"'";
                        rs = stmt.executeQuery(sql);
                        while(rs.next()) {
                                jdId.add(rs.getString(1));
                                getMorejdId(jdId,rs.getString(1));
                        }
                        rs.close();
                        stmt.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
参与15

提问者

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2008-06-24
  • 关注会员:0 人
  • 问题浏览:19961
  • 最近回答:2012-05-14
  • X社区推广