java jco 連接池的實現

SAPService.java

package com.resunly.sap;

/**
 * Created by IntelliJ IDEA.
 * User: resunly
 * Date: 11-12-22
 * Time: 下午4:24
 * To change this template use File | Settings | File Templates.
 */
import com.sap.mw.jco.IFunctionTemplate;
import com.sap.mw.jco.JCO;

import java.util.List;
import java.util.Properties;

abstract public class SAPService {

    //連接创建對象
    abstract protected JCO.Client getConnection();

    //释放连接对象
    abstract protected void releaseConnection(JCO.Client myConnection);

    //连接参数
    protected Properties getSAPProperties() {
        Properties logonProperties = new Properties();
        logonProperties.put("jco.client.ashost", "10.134.99.100");    //SAP系統的IP位址
        logonProperties.put("jco.client.client", "810");    //要登錄的用戶端
        logonProperties.put("jco.client.sysnr", "02");      //系統編號  00
        logonProperties.put("jco.client.user", "userName");        //登錄用戶名
        logonProperties.put("jco.client.passwd","password");    //用戶登錄口令
        return logonProperties;
    }

    public String sendDataToSAP(String mesCode,String holdFlag,List<String []> list){
    	String result = "";
        JCO.Client myConnection = getConnection();
        myConnection.connect();       //進行實際連接
        try {
            //如果連接不為null並且處於活動狀態
            if (myConnection != null && myConnection.isAlive()) {
                //從連接獲得一個邏輯意義上的“倉庫”物件(Repository)
                JCO.Repository myRepository =
                        new JCO.Repository("Repository",  //只是一個名字
                                myConnection); //活動的連接
                //要調用的SAP函數名稱
                String strFunc = "ZRFC_SD_PCE_0109";
                //從“倉庫”中獲得一個指定函數名的函數範本
                IFunctionTemplate ft = myRepository.getFunctionTemplate(strFunc.toUpperCase());
                
                //從這個函數範本獲得該SAP函數的物件
                JCO.Function function = ft.getFunction();
                //獲得函數的import參數列表
                JCO.ParameterList input = function.getImportParameterList();
                //JCO.Structure sFrom = input.getStructure("DESTINATION_FROM");
                input.setValue("PNK1","PLANT");
                input.setValue("O","SEND_FLAG"); 
                input.setValue(mesCode,"MSG_CODE");         
                input.setValue(holdFlag,"HOLD_FLAG");
                
                //设置table参数
                JCO.Table tDateRange = function.getTableParameterList().getTable("CMSHOLD");
                for(int i = 0; i<list.size(); i++){
                	String [] tempStr = list.get(i);
                	tDateRange.appendRow();                        //添加行
                	tDateRange.setRow(i);                          //定位行位
                	tDateRange.setValue(tempStr[0], "PO_NUM");
                	tDateRange.setValue(tempStr[1], "PO_TIE");
                	tDateRange.setValue(tempStr[2], "MSG_TEXT");
                }
                
                //執行函數
                myConnection.execute(function);

                //在執行函數後可用相同方式獲得輸出結果
                JCO.ParameterList output = function.getExportParameterList();
                
                result = (String)output.getValue("ZRETURN");

                releaseConnection(myConnection);
            } else {
                throw new Exception("No connection!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //斷開連接
            try {
                releaseConnection(myConnection);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return result;
    }


}
 


SAPServiceImpl.java

package com.resunly.sap;

/**
 * Created by IntelliJ IDEA.
 * User: resunly
 * Date: 11-12-22
 * Time: 下午4:24
 * To change this template use File | Settings | File Templates.
 */

import com.sap.mw.jco.JCO;

import java.util.List;


public class SAPServiceImpl extends SAPService {

    protected JCO.Client getConnection() {
        System.out.println("=====SAPServiceImpl.getconnect=====");

        //用上述條件創建一個連接物件
        JCO.Client myConnection = JCO.createClient(this.getSAPProperties());
        /*獲得一個到SAP系統的連接  END    */

        return myConnection;  
    }

    protected void releaseConnection(JCO.Client myConnection) {

        System.out.println("=====SAPServiceImpl.releaseConnection=====");
        //斷開連接
        myConnection.disconnect();
    }
    public String callSAPMeth(String mesCode,String holdFlag,List<String []> list) {
        SAPService service = new SAPServiceImpl();
        String result = "";
        try {
        	result = service.sendDataToSAP(mesCode, holdFlag,list);
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace(); 
        }
        return result;
    }
}

  test.java

package com.resunly.sap;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Administrator
 * Date: 11-12-22
 * Time: 下午4:24
 * To change this template use File | Settings | File Templates.
 */
public class test {
    public static void main(String args[]) {
        SAPServiceImpl sapser = new SAPServiceImpl();
        //SAPServicePoolImpl sp = new SAPServicePoolImpl();
        List<String[]> list = new ArrayList<String[]>();
        String[] array = new String[3];
        array[0] = "20101215001";
        array[1] = "1";
        array[2] = "666666";

        list.add(array);
        System.out.println(sapser.callSAPMeth("D05", "N", list));
    }
}
 

猜你喜欢

转载自resunly.iteye.com/blog/1320996