SAP Cloud Platform에서 온프레 시스템에 액세스해 보기 - JAVA 앱

1. 소개



SAP Cloud Platform 애플리케이션에서 온프레에 있는 시스템에 액세스하려고 시도했습니다.

기능 확인을 위해 간단한 JAVA 애플리케이션을 작성하고 SAP Cloud Platform에서 온프레 ABAP 시스템에 액세스해 보십시오.

2. 이번 만드는 애플리케이션



쉽게 응용 프로그램의 동작을 소개합니다.

2.1. 인증 화면



SAP Cloud Platform의 인증 화면입니다.


2.2. 첫 화면



모든 텍스트를 입력하고 보내기 버튼을 누르면 일반 모듈STFC_CONNECTION이 호출됩니다.
호출할 때의 파라미터REQUTEXT에 Input Text에 입력한 캐릭터 라인이 건네집니다.


2.3. 제2화면



일반 모듈STFC_CONNECTION에서 반환된 값이 표시됩니다.RESPTEXT에는 SAP Netweaver 릴리스, 현재 날짜 및 시간 및 액세스에 사용한 사용자 정보가 표시됩니다.


3. ABAP에 액세스하는 방법



JCo로 연결하려면 SAP Cloud Platform에서 설정한 대상 이름을 JCoDestinationManager#getDestination 인수에 전달하고 JCoDestination 객체를 가져옵니다. 이 개체에서 SAP Cloud Connector를 통해 사내 구축형 ABAP 서버에 연결할 수 있습니다.

다음은 p.getProperty(JCO_DESTINATION)에서 SAP Cloud Platform에 설정한 대상 이름을 얻을 수 있는 경우의 예입니다.
  return JCoDestinationManager.getDestination(p.getProperty(JCO_DESTINATION));

구체적으로는 다음과 같은 형태로 구현했습니다.
실제로는 Interface를 작성해 계승시키는 등 하는 편이 사용하기 쉬운 클래스가 될 것입니다만, 시험이므로 할애.

StfcConnection.java
public class StfcConnection {
    public static final String PRAM_REQUTEXT = "REQUTEXT";
    public static final String PRAM_ECHOTEXT = "ECHOTEXT";
    public static final String PRAM_RESPTEXT = "RESPTEXT";
    private static final String FUNCTION_NAME = "STFC_CONNECTION";
    private static final String JCO_DESTINATION = "jco.destination";
    private static final String JCO_PROPERTIES = "jco.properties";

    private String propFilePath;
    private String requText;
    private String echoText;
    private String respText;


    public StfcConnection(String propDirPath, String requText) {
        this.propFilePath = Paths.get(propDirPath, JCO_PROPERTIES).toString();

        this.requText = requText;
    }

    public void execute() throws JCoException, FileNotFoundException, IOException {
        JCoDestination d = getDestiation();
        JCoFunction f = d.getRepository().getFunction(FUNCTION_NAME);

        // 汎用モジュールの呼出パラメータ設定
        f.getImportParameterList().setValue(PRAM_REQUTEXT, requText);

        // 汎用モジュール実行
        f.execute(d);

        // 汎用モジュール実行結果の取得
        JCoParameterList exports = f.getExportParameterList();
        echoText = exports.getString(PRAM_ECHOTEXT);
        respText = exports.getString(PRAM_RESPTEXT);
    }


    private JCoDestination getDestiation() throws FileNotFoundException, IOException, JCoException {

        InputStream is = new FileInputStream(propFilePath);
        Properties p = new Properties();

        // load jco destination name
        p.load(is);
        is.close();

        return JCoDestinationManager.getDestination(p.getProperty(JCO_DESTINATION));
    }

    public String getEchoText() {
        return echoText;
    }

    public String getRespText() {
        return respText;
    }
}

4. 정리



SAP Cloud Platform에서 SAP Cloud Connector를 통해 안전하고 사내 구축형 ABAP 시스템에 액세스할 수 있었습니다.
인증까지 포함해, JAVA측의 구현은 간단하게 할 수 있게 되어 있다고 느꼈습니다.

여담: 인증



아래 도움말 페이지를 참고하여 프로그래매틱 인증을 구현했습니다.
※인증 전송의 기능 확인도 하고 싶었으므로,,,
SAP Cloud Platform - 인증 - 프로그래매틱 인증

구현에 있어서는 전용의 클래스를 준비해, 각 서블릿으로부터 호출하도록(듯이) 했습니다.

Authenication.java
public class Authenication {

  private final static Logger logger = LoggerFactory.getLogger(Authenication.class);

  protected static void login(String user) throws LoginException {
    if (user == null) {

      logger.debug("User is not logged in.");

      //authenticate the User
      LoginContext loginContext = LoginContextFactory.createLoginContext("FORM");
      loginContext.login();
    }
  }

  protected static void logout(String user) throws LoginException {
    if (user != null) {

      logger.debug("User is logged in.");

      //logout
      LoginContext loginContext = LoginContextFactory.createLoginContext("FORM");
      loginContext.logout();
    }
  }

  protected static boolean isLoggedin(HttpServletRequest request) {
    if (request.getRemoteUser() == null) {
      return false;
    } else {
      return true;
    }
  }
}

소스 코드는 GitHub에 업로드되었습니다. 참고까지.
GitHub - ScpJcoTest1

좋은 웹페이지 즐겨찾기