背景:因做報表需求,需要從多個SAP服務器調用RFC來收集數據,傳統jco連接都是自行配置文件注入或固定代碼到配置類,且jco會生成連接文件也不安全。本案例目的在於jco連接及密碼都配置到數據庫里,jco連接放入內存避免產生連接文件。
1.jco下載,并打入本地maven鏡像(請自行百度),然後加入maven依賴
2.jco連接信息表(Oracle)
CREATE TABLE "ERPCENTER"."S_SAP_CONFIG_T" ( "JCO_NAME" VARCHAR2(50 BYTE), "JCO_PROJECT" VARCHAR2(50 BYTE), "JCO_CLIENT" VARCHAR2(50 BYTE), "JCO_USER" VARCHAR2(50 BYTE), "JCO_PASSWD" VARCHAR2(50 BYTE), "JCO_LANG" VARCHAR2(50 BYTE), "JCO_ASHOST" VARCHAR2(50 BYTE), "JCO_SYSNR" VARCHAR2(50 BYTE), "JCO_POOL_CAPACITY" NUMBER, "JCO_PEAK_LIMIT" NUMBER, "JCO_MAX_GET_TIME" NUMBER, "CREA_USER" VARCHAR2(50 BYTE), "CREA_DATE" DATE DEFAULT sysdate, PRIMARY KEY ("JCO_NAME") )
讯享网
3.jco相關代碼及配置
①MyDestinationDataProvider.java
讯享网import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.springframework.stereotype.Component; import com.sap.conn.jco.ext.DestinationDataEventListener; import com.sap.conn.jco.ext.DestinationDataProvider; @Component public class MyDestinationDataProvider implements DestinationDataProvider { private Map<String, Properties> providers = new HashMap<String, Properties>(); public Properties getDestinationProperties(String destName) { if (destName == null) { throw new NullPointerException("請指定目錄名稱"); } if (providers.size() == 0) { return new Properties(); //throw new IllegalStateException("請加入目的連接參數屬性給提供者"); } return (Properties) providers.get(destName); } @Override public void setDestinationDataEventListener(DestinationDataEventListener listener) { throw new UnsupportedOperationException(); } public void addDestinationProperties(String destName, Properties provider) { providers.put(destName, provider); } @Override public boolean supportsEvents() { // TODO Auto-generated method stub return false; } }
②JcoConnServiceImpl.java
import java.util.Properties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.xxx.provider.user.config.MyDestinationDataProvider; import com.xxx.provider.user.entity.SSapConfigT; import com.xxx.provider.user.service.JcoConnService; import com.sap.conn.jco.JCoDestination; import com.sap.conn.jco.JCoDestinationManager; import com.sap.conn.jco.JCoException; import com.sap.conn.jco.ext.DestinationDataProvider; import com.sap.conn.jco.ext.Environment; @Service("jcoConnService") public class JcoConnServiceImpl implements JcoConnService { @Autowired private MyDestinationDataProvider myDestinationDataProvider; @Override public JCoDestination getJcoConn(SSapConfigT sc) { // TODO Auto-generated method stub Properties connectProperties = new Properties(); JCoDestination dest=null; connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST,sc.getJcoAshost()); connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,sc.getJcoSysnr()); connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT,sc.getJcoClient()); connectProperties.setProperty(DestinationDataProvider.JCO_USER,sc.getJcoUser()); connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD,sc.getJcoPasswd()); connectProperties.setProperty(DestinationDataProvider.JCO_LANG,sc.getJcoLang()); connectProperties.setProperty(DestinationDataProvider.JCO_MAX_GET_TIME,sc.getJcoMaxGetTime().toString()); connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT,sc.getJcoPeakLimit().toString()); connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, sc.getJcoPoolCapacity().toString()); System.out.println("sc.getJcoName():"+sc.getJcoName()); Properties t=myDestinationDataProvider.getDestinationProperties(sc.getJcoName()); if( t==null || t.isEmpty() ) { myDestinationDataProvider.addDestinationProperties(sc.getJcoName(), connectProperties); if(Environment.isDestinationDataProviderRegistered()) { }else { Environment.registerDestinationDataProvider(myDestinationDataProvider); } } try { dest = JCoDestinationManager.getDestination(sc.getJcoName()); System.out.println("dest:"+dest); dest.ping(); System.out.println("sap connection ok"); } catch (JCoException ex) { System.out.println(ex); dest=null; System.out.println("sap connection err"); } return dest; } }
③具體使用案例
讯享网SSapConfigT sc=sSapConfigTService.getSapConfigByName("JCO_NAME"); JCoDestination jCoDestination=jcoConnService.getJcoConn(sc); JCoFunction function = jCoDestination.getRepository().getFunction("RFC_140");

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/75805.html