如何使用JCO3.0同时访问多个SAP系统

 代码实现如下,从上到下依次调用,直到被获取连接为止。

JCOProvider类似注册中心,注册连接信息。

如有问题请参考:

如何使用JCO3.0同时访问多个SAP系统

SAP接口编程 之 JCo3.0系列(04) : 会话管理

package pmo.basiset.web.customer;

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import com.sap.conn.jco.ext.DestinationDataEventListener;
import com.sap.conn.jco.ext.DestinationDataProvider;

public class JCOProvider implements DestinationDataProvider {
    private Map providers = new HashMap();
    @Override
    public Properties getDestinationProperties(String destName) {
       if (destName == null)
           throw new NullPointerException("请指定目的名称");
       if (providers.size() == 0)
           throw new IllegalStateException("请加入一个目的连接参数属性给提供者");
       return (Properties)providers.get(destName);
   }

   // 没有实现事件处理
   @Override
   public boolean supportsEvents(){
       return false;
   }

   @Override
   public void setDestinationDataEventListener(DestinationDataEventListener listener) {
       throw new UnsupportedOperationException();
   }

   public void addDestinationProperties(String destName, Properties provider) {
       providers.put(destName, provider);
   }
}
package pmo.modules.cost.web.cntc.web.materialtract;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Properties;

import org.springframework.stereotype.Service;

import pmo.basiset.web.customer.JCOProvider;

import com.pm360.epip.base.context.Context;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.ext.Environment;

@Service("SAPConnectionPool")
public class SAPConnectionPool {

	private static final String SAP_MATER_CONN="SAP_CONN";

	public static JCoDestination getSAPDestination(){
        try {
            JCoDestination dest = JCoDestinationManager.getDestination(SAP_CONN);
            return dest;
        } catch (JCoException ex) {
                return RegetJocodestination();
        }           
    }

    /**
     * 重新获取JCODestination
     * @return
     */
    public static JCoDestination RegetJocodestination(){
        try{
        	System.out.println("开始读取properties文件!!!");
            Properties connectProperties = new Properties();
            //获取配置文件系统路径解析
            String filePath = Context.ROOT_DISK+"//WEB-INF//xxx.properties";
            BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
            if(bufferedReader != null){
            	connectProperties.load(bufferedReader);
            }
            System.out.println("properties信息="+connectProperties+"!!!");
            JCOProvider provider = new JCOProvider();
            provider.addDestinationProperties(SAP_MATER_CONN, connectProperties);
            Environment.registerDestinationDataProvider(provider);
            try {
                JCoDestination dest = JCoDestinationManager.getDestination(SAP_CONN);
                return dest;
            } catch (JCoException ex) {
                    System.out.println(ex);
                    System.out.println("重新连接失败");
            }           
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;        
    }
}

 

private List<Map<String,Object>> querySapMaterialTractGridData(boolean result,Map<String,Object> whereMap,String user) throws ServiceBussiException {
		List<Map<String,Object>> retList = new ArrayList<Map<String,Object>>();
		try {
			System.out.println("开始获取sap连接!!!");
			JCoDestination dest = SAPConnectionPool.getSAPDestination();//获取连接

			dest.ping();

			if(Validator.isEmpty(dest)){
				result = false;
				throw new ServiceBussiException("sap通道连接失败!");
			}

			System.out.print("获取连接成功!!!");

		} catch (JCoException e) {
			result = false;
			throw new ServiceBussiException("sap通信失败!");
		}
	}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值