Topic: 如果在线人数有上百人的话,就会当掉。以下是关键程序代码,谢谢捧场!!

  Print this page

1.如果在线人数有上百人的话,就会当掉。以下是关键程序代码,谢谢捧场!! Copy to clipboard
Posted by: bibiye
Posted on: 2004-10-22 19:24

并发人数一多的话为什么会当机,以下是关键程序代码,希望各位兄弟能帮忙分析一下,或许互有裨益!谢谢捧场!!

为了防止程序中有连接没有关闭,
我在代码中加了一个连接的管理,
如果连接数超过29个,
就关闭所有连接,
再重新取,
但问题依旧,
所以来这里恳请请各位兄弟的帮忙了!

关键是请各位兄弟分析一下以下代码的缺点,包括逻辑思路,语法的定义使用等哪里还存在问题!

package com.xindeco.common.dbconn ;

import java.sql.* ;
import javax.sql.* ;
import java.util.* ;
import java.io.* ;
import javax.naming.* ;

public class DbConn
{

public ResultSet rs = null ;
public Statement stmt = null ;
private CustomizedResultSet crs = null ;
public Connection conn = null ;
static private Hashtable pools = new Hashtable(); //存放DB连接
static private ArrayList vector = new ArrayList(); //存放标志
static private int x = 0; //存放标志

private long lt ;
private long lt1 ;

public DbConn ()
{
this.getConnByWeblogicPool () ;
}

//根据txdatasource的JNDI取得conn
private void getConnByWeblogicPool ()
{
String url = "" ;
String user = "" ;
String password = "" ;
DataSource ds = null ;
Context ctx = null ;

try
{
//如果正在使用的连接超过29个,将全部关闭
if(x > 29){
for(int i = 0; i<vector.size();){
Object o = pools.get(vector.get(i));
Connection c = (Connection)o;
if(c!=null && !c.isClosed()){
x--;
//System.out.println ("关闭无效连接后还剩下x="+x);
pools.remove(vector.get(i));
vector.remove(i);
c.close () ;
}
}
}

ctx = this.getInitialContext () ;
ds = (javax.sql.DataSource) ctx.lookup ("graduate") ;
synchronized(this){
conn = ds.getConnection () ;
if (conn != null)
{
++x;
//System.out.println ("建立连接个数xxxx=" + (++x)) ;
lt = System.currentTimeMillis();
vector.add(String.valueOf(lt));
pools.put(String.valueOf(lt),conn);
stmt = conn.createStatement
(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY
) ;
}
}
}
catch (Exception e)
{
throw e;
}

}

static final private Context getInitialContext ()
throws Exception
{

Properties properties = null ;

try
{
properties = new Properties () ;
properties.put (Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory") ;
return new InitialContext (properties) ;
}
catch (Exception ex)
{
//ex.printStackTrace () ;
throw ex ;
}
}

synchronized public void close ()
{
try
{
if (stmt != null && !conn.isClosed ())
{
stmt.close () ;
stmt = null ;
}
if (stmt1 != null && !conn.isClosed ())
{
stmt1.close () ;
stmt1 = null ;
}
if (rs != null && !conn.isClosed ())
{
rs.close () ;
rs = null ;
}
if (conn != null && !conn.isClosed ())
{
pools.remove (String.valueOf (lt)) ;
vector.remove (String.valueOf (lt)) ;
conn.close () ;
conn = null ;
--x;
//System.out.println ("关闭后还剩连接个数111xxxx=" + (--x)) ;
}
}
catch (Exception ex)
{
//ex.printStackTrace () ;
}
}

}

2.Re:如果在线人数有上百人的话,就会当掉。以下是关键程序代码,谢谢捧场!! [Re: bibiye] Copy to clipboard
Posted by: findjob
Posted on: 2004-10-22 19:50

怎么贴代码都不付责任哩。
禁用笑脸标记
把代码放在[code][/code]中
让人看了会舒服点。

3.Re:如果在线人数有上百人的话,就会当掉。以下是关键程序代码,谢谢捧场!! [Re: bibiye] Copy to clipboard
Posted by: bibiye
Posted on: 2004-10-23 13:39

呵,谢谢楼上的,以前没注意到,以后我会注意的。

4.Re:如果在线人数有上百人的话,就会当掉。以下是关键程序代码,谢谢捧场!! [Re: bibiye] Copy to clipboard
Posted by: findjob
Posted on: 2004-10-23 16:34

奇怪?既然你选择从datasource中来获取连接,干嘛又自己来管理连接?

5.Re:如果在线人数有上百人的话,就会当掉。以下是关键程序代码,谢谢捧场!! [Re: bibiye] Copy to clipboard
Posted by: faint
Posted on: 2004-10-25 17:20

这段程序我个人认为其基本上没有存在的意义,原因如下:

1.同楼上所言,如果你是通过weblogic datasource来取数据库连接,weblogic已经帮的管理一道了,你做的只是管理了一下pooledConnection具体的实例,但是这种管理基本上没有意义。

2.你可能不是非常明确数据连接connection对象关闭的在J2EE环境和J2SE环境中的意义。在J2EE中关闭数据库连接只是把数据连接放回到连接池中而已,并不是真正的关闭。服务器段的资源未被真正的释放。

3.具体当机的问题是个很麻烦的问题,需要看database,application server当时具体的状况。

以上是我个人的观点,有错误的地方请指出。

6.Re:如果在线人数有上百人的话,就会当掉。以下是关键程序代码,谢谢捧场!! [Re: bibiye] Copy to clipboard
Posted by: tiexuexue
Posted on: 2004-11-03 14:28

把你的weblogic connection pool设大一点就行了

7.Re:如果在线人数有上百人的话,就会当掉。以下是关键程序代码,谢谢捧场!! [Re: bibiye] Copy to clipboard
Posted by: shawnma
Posted on: 2004-11-04 16:42

关注~~~~

8.Re:如果在线人数有上百人的话,就会当掉。以下是关键程序代码,谢谢捧场!! [Re: bibiye] Copy to clipboard
Posted by: lot1
Posted on: 2004-11-04 23:48

Your code is NOT doing any pooling, only to count the connection number in use, if it is > 29, close all connection in use - your application would surely crash when 29 connections are in use and the 30th comes.


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923