进行SAP连接时同步(synchronizd)的重要性

这是最近在一个web项目开发中遇到的问题。项目快验收时,我负责对项目进行压力测试(JMeter)。在测试中发现凡是涉及到SAP函数调用的页面最高只能达到30秒内50个并发,而且还不稳定。于是察看SAP函数的调用代码:
1 public SimpleResource() throws SapInterfaceException {
2 pool= JCO.getClientPoolManager().getPool(POOL_NAME);
3if (pool == null){
4try {
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){
14throw new SapInterfaceException("saply", ex);
15 }

16 }

17 }
每个调用SAP函数的Java方法都会首先实例化一个SimpleResource类来建立连接池。同步就是这个问题的关键点,在不改变原有结构的基础上(项目中涉及这个SAP函数调用的地方超多)通过修改代码,添加同步特性后能达到10秒100~120个并发,基本能够满足业务需求,至于如何在提高并发数我觉得跟服务器配置有很大关系,除此我还没想到解决方案。修改后代码如下(偷点懒 -_-! ):
1 public SimpleResource() throws SapInterfaceException {
2 prepare();
3 }

4
5 public synchronized static void prepare() throws SapInterfaceException {
6 pool= JCO.getClientPoolManager().getPool(POOL_NAME);
7if (pool == null){
8try {
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){
18throw new SapInterfaceException("saply", ex);
19 }

20 }

21 }
对于像web项目这种要求大量并发的情况,连接池的建立和连接释放都要好好考虑并发处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值