package org.jeecg.config.sap;
|
|
import com.sap.conn.jco.*;
|
import com.sap.conn.jco.ext.DestinationDataProvider;
|
import com.sap.conn.jco.ext.Environment;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.PostConstruct;
|
import java.io.File;
|
import java.io.FileOutputStream;
|
import java.util.Properties;
|
|
@Component
|
@Slf4j
|
public class SapRfcConnectionManager {
|
|
@Value("${sap.rfc.destination}")
|
private String destinationName;
|
|
@Value("${sap.rfc.ashost}")
|
private String ashost;
|
|
@Value("${sap.rfc.sysnr}")
|
private String sysnr;
|
|
@Value("${sap.rfc.client}")
|
private String client;
|
|
@Value("${sap.rfc.user}")
|
private String user;
|
|
@Value("${sap.rfc.passwd}")
|
private String passwd;
|
|
@Value("${sap.rfc.lang}")
|
private String lang;
|
|
private String poolSize = "5";
|
|
private String idleTimeout = "10000";
|
|
private String peekLimit = "10";
|
|
private JCoDestination destination;
|
|
/**
|
*
|
* @throws JCoException
|
*/
|
@PostConstruct
|
public void init() throws Exception {
|
Properties connectProperties = new Properties();
|
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, ashost);
|
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, sysnr);
|
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, client);
|
connectProperties.setProperty(DestinationDataProvider.JCO_USER, user);
|
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, passwd);
|
connectProperties.setProperty(DestinationDataProvider.JCO_LANG, lang);
|
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, peekLimit);
|
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, poolSize);
|
connectProperties.setProperty(DestinationDataProvider.JCO_EXPIRATION_TIME, idleTimeout);
|
|
// 创建动态目的地(避免依赖 SM59 配置)
|
// CustomDestinationDataProvider provider = new CustomDestinationDataProvider();
|
// provider.addDestination(destinationName, connectProperties);
|
|
// 设置全局目的地提供者
|
// Environment.registerDestinationDataProvider(provider);
|
|
log.info("properties = " + connectProperties);
|
|
//生成配置文件,JCoDestinationManager.getDestination()调用时会需要该连接配置文件,后缀名需要为jcoDestination
|
FileOutputStream fos = null;
|
String suffix = "jcoDestination";
|
File cfg = new File(destinationName + "." + suffix);
|
if (!cfg.exists()) {
|
try {
|
fos = new FileOutputStream(cfg, false);
|
connectProperties.store(fos, "for tests only !");
|
fos.close();
|
} catch (Exception var9) {
|
throw new Exception("Unable to create the destination file " + cfg.getName(), var9);
|
} finally {
|
if (null != fos) {
|
fos.close();
|
}
|
}
|
}
|
|
// 获取目的地
|
this.destination = JCoDestinationManager.getDestination(destinationName);
|
}
|
|
/**
|
*
|
* @return
|
*/
|
public JCoDestination getDestination() {
|
return destination;
|
}
|
|
/**
|
*
|
*/
|
public void destroy() {
|
if (destination != null) {
|
// destination;
|
}
|
}
|
}
|