1
public SimpleResource() throws SapInterfaceException
{
2
pool = JCO.getClientPoolManager().getPool(POOL_NAME);
3
if (pool == null)
{
4
try
{
5
Properties properties = new Properties();
6
BufferedInputStream in = new BufferedInputStream(
7
SimpleResource.class
8
.getResourceAsStream(PROPERTIES_FILE));
9
properties.load(in);
10
in.close();
11
JCO.addClientPool(POOL_NAME, MAX_CONNECTION_COUNT, properties);
12
pool = JCO.getClientPoolManager().getPool(POOL_NAME);
13
} catch (Exception ex)
{
14
throw new SapInterfaceException("saply", ex);
15
}
16
}
17
}
每個調用SAP函數的Java方法都會首先實例化一個SimpleResource類來建立連接池。同步就是這個問題的關鍵點,在不改變原有結構的基礎上(項目中涉及這個SAP函數調用的地方超多)通過修改代碼,添加同步特性后能達到10秒100~120個并發,基本能夠滿足業務需求,至于如何在提高并發數我覺得跟服務器配置有很大關系,除此我還沒想到解決方案。修改后代碼如下(偷點懶 -_-! ):


2

3



4



5

6

7

8

9

10

11

12

13



14

15

16

17

1
public SimpleResource() throws SapInterfaceException
{
2
prepare();
3
}
4
5
public synchronized static void prepare() throws SapInterfaceException
{
6
pool = JCO.getClientPoolManager().getPool(POOL_NAME);
7
if (pool == null)
{
8
try
{
9
Properties properties = new Properties();
10
BufferedInputStream in = new BufferedInputStream(
11
SimpleResource.class
12
.getResourceAsStream(PROPERTIES_FILE));
13
properties.load(in);
14
in.close();
15
JCO.addClientPool(POOL_NAME, MAX_CONNECTION_COUNT, properties);
16
pool = JCO.getClientPoolManager().getPool(POOL_NAME);
17
} catch (Exception ex)
{
18
throw new SapInterfaceException("saply", ex);
19
}
20
}
21
}
對于像web項目這種要求大量并發的情況,連接池的建立和連接釋放都要好好考慮并發處理。



2

3

4

5



6

7



8



9

10

11

12

13

14

15

16

17



18

19

20

21
