Java初心者でもできるPCへのJCoを使ったSAPシステム接続環境構築

Javaを全然使ったことない筆者が、SAPシステムへ接続するためJCo(SAP Java Connector)を含めたJava環境構築しました。その際の手順です。約1日程度で構築しましたが、Java知っている人ならもっと速いです(Javaコンパイル手順や文法などを見ながらやっていたので時間かかりました)。

#前提
この記事を最初に投稿したのは2017年12月で、JCo3.0.17が最新でした。一部の情報を最新化しています。
使用するJCoは2020年5月時点で最新の3.1.2です。
~~JCo3.0.17はJava 9に未対応なのでJava 8で環境構築しています。SAP推奨はSAP JVMなのですが、今回はOracle JVMにしています(SAPのサイトからダウンロードして解凍が手間だったため)。~~
Windows10 64-bit環境に構築しています。

以下の情報は必ず、事前にチェックしておきましょう。すべて、SAP Support Portalの認証が必要です。

|情報源|内容|
|:--|:--|
|[SAP Connector Information](https://support.sap.com/en/product/connectors/jco.html)|SAPのコネクタに関する最新情報<br>※たまに誤りある場合があるので、リンクするノートは参照しておく(ノートが正しい)|
|[ノート2786882「SAP JCo 3.1 release and support strategy」](https://launchpad.support.sap.com/#/notes/0002786882)|JCo3.1に関する最新情報|
|[各種ノートとKBA](https://support.sap.com/en/my-support/knowledge-base.html#section_1391401241)|コンポーネント"BC-MID-CON-JCO"でJCoに関する留意する情報がないか事前チェック


#構築手順
##1. JDKインストール
###1.1. JDKダウンロード
[Java SE Downloadページ](http://www.oracle.com/technetwork/java/javase/downloads/index.html)からJDKをダウンロードします。最新のJava 9ではないので、少し下までスクロールします。
※初心者には何をインストールするかわからなかったので、[「JavaのJDK/JRE/Server JREの使い分け」](http://d.hatena.ne.jp/ozuma/20140318/1395150599)を参考にしました。JDKはJREを内包しているらしい。
![JDKInstall01.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/c9659e89-3dca-d28e-7456-5016c6fe18f0.jpeg)

ライセンス条項に同意してWindows x64向けをダウンロード。
![JDKInstall02.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/5a011aa6-63ba-115a-e0ce-1d0e064da830.jpeg)

###1.2. JDKインストール
[「【初心者でもすぐわかる】JDKのインストール方法 Windows編」](https://eng-entrance.com/java-install-jdk-windows)を参考にインストールしました。
ダウンロードしたインストールファイルを実行します。
![JDKInstall03.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/78f40baa-3938-6ed1-3bdc-8256f4b1a519.jpeg)
![JDKInstall04.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/8c116908-b5d7-a8e6-2407-c7b6dd9f4c64.jpeg)
![JDKInstall05.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/fbce8d0a-d48f-a673-b4c9-4bd6136bc022.jpeg)
![JDKInstall06.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/9d1f2f0d-5a59-2706-12ab-62f71ab392ef.jpeg)

###1.3. インストール後処理
環境がWindowsなのでWindowsボタン+R(ファイル名を指定して実行)で"sysdm.cpl"を入力。システム詳細設定で環境変数を入力します。
![JDKInstall11.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/29216cfc-7334-60d5-739c-58289a3b1596.jpeg)

システム環境変数Pathに新しいパスを追加します。
![JDKInstall12.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/af3c57d0-c24f-98d2-4534-a77860dfb293.jpeg)
![JDKInstall13.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/b8d35064-3c29-8822-9f74-aca0212320fb.jpeg)

ここで入力するのはインストールされたJDKの中のパスです。インストールしたバージョンによってパスが異なるので注意ください。
![JDKInstall14.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/536ade2f-26fb-eaf9-6a5d-d42065383d50.jpeg)

新しいシステム環境変数JAVA_HOMEも作成します。
![JDKInstall15.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/5a379bbe-050b-1640-dff4-d392d2eed80b.jpeg)

Pathに追加した時と同じパスを追加します。
![JDKInstall16.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/0992c899-418d-0303-a53d-b509c13cc8de.jpeg)

###1.4. インストール確認(バージョン表示)
コマンドラインから正しくインストールできているか確認します。下記コマンドでインストールされているJavaのバージョンを表示します。

```
java -version
```
![JDKInstall20.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/33268bc8-663a-4821-b864-8a2ff5d1c8b9.jpeg)

###1.5. インストール確認(コンパイルと実行)
最初のJavaプログラムを作り、コンパイル、実行をします。簡易確認なのでEclipseのようなIDEではなくテキストエディタで実行しています。

####1.5.1. フォルダ作成とコーディング
Cドライブに"jsample"フォルダを作成して、下記のコードをテキストエディタで"sample.java"という名前で保存(文字コードはS-JISにしていますが、他でも可能か未確認)。

```java:sample.java
class sample{
  public static void main(String args[]){
    System.out.println("Hello World!");
  }
}
```

####1.5.2. コンパイル
コマンドプロンプトで"jsample"フォルダにパスを移動して、下記コマンドを実行。

```
javac sample.java
```

sample.classというファイルが同じフォルダにできています。

####1.5.3. Java実行
この状態で下記コマンドを実行することで、"Hello World"が出力。
※classの拡張子がないことに注意ください。

```
java sample
```
![JDKInstall31.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/e3718982-ffc2-0052-4c11-ae24d941376e.jpeg)

#2. Visual Studio 2013 C/C++ runtime librariesインストール
Windows環境にはVisual Studio 2005 C/C++ runtime librariesなるものが必要です。詳細は[ノート2786882「SAP JCo 3.1 release and support strategy」](https://launchpad.support.sap.com/#/notes/0002786882)に記載があります。

> On Windows platforms, JCo 3.1 requires the Visual Studio 2013 C/C++ runtime libraries to be installed on the system. If not present, download and install the "Visual C++ 2013 Redistributable Package" from the Microsoft knowledge base article https://support.microsoft.com/en-us/help/4032938 and choose the package, which corresponds to the used Locale and JVM bit-width (x64 for 64-bit or x86 for 32-bit).

64bitなので、リンク先の`vcredist_x64.exe`をダウンロード(日本語にしています)してインストール。

#3. JCoインストール
###3.1. JCoダウンロード
[SAP Connector Information](https://support.sap.com/en/product/connectors/jco.html#section_2129803369)からJCoをダウンロードできます。「Microsoft Windows and Windows Server」の「64bit x86」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134273/8a7f6056-a839-ed5e-8e1f-5378023ddaa1.png)

###3.2. JCo展開
ローカルPCのCドライブにディレクトリ"SAPJCo"を作り、ダウンロードしたファイルを解凍して置きます。
![JCOInstall22.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/8893919f-9da3-33a6-da44-54652877c152.jpeg)

###3.3. JCoインストール後処理
「1.3. インストール後処理」と似ています。
環境がWindowsなのでWindowsボタン+R(ファイル名を指定して実行)で"sysdm.cpl"を入力。システム詳細設定で環境変数を入力します。
![JDKInstall11.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/29216cfc-7334-60d5-739c-58289a3b1596.jpeg)

システム環境変数Pathに新しいパスを追加します。
![JDKInstall12.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/af3c57d0-c24f-98d2-4534-a77860dfb293.jpeg)
![JDKInstall13.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/b8d35064-3c29-8822-9f74-aca0212320fb.jpeg)

ここJCoファイルを展開したパスを入力します。
![JCOInstall31.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/c892808f-3d5d-6df5-887c-362e0ae3b195.jpeg)

新しいシステム環境変数CLASS_PATHも作成します。
![JDKInstall15.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/5a379bbe-050b-1640-dff4-d392d2eed80b.jpeg)

「1.5.1. フォルダ作成とコーディング」で作成したパスとsapjco3.jarをパスつきでセミコロン結合して追加します(C:\jsample;C:\SAPJCo\sapjco3.jar)。
![JCOInstall32.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/e4a17b45-5011-4b19-6fb0-66ffd666b985.jpeg)

###3.4. JCoインストール後確認
コマンドプロンプトで下記を入力してインストール確認します。

```
java -jar C:\SAPJCo\sapjco3.jar
```

こんな画面が出れば成功です。
![JCOInstall41.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/785ff85c-3e8b-ea02-9e67-617f0c494da4.jpeg)

###3.5. JCoを使ったSAPシステム疎通確認
最後に以下のコードでJCoを使ったSAPシステムとの疎通確認します。Host名とユーザ・パスワードなどは適宜変更して、テキストエディタ(Eclipse等IDEでもOK)に"ConnectionTest.java"というファイル名で保存ください。ファイルを置く場所は「1.5.1. フォルダ作成とコーディング」で作ったCドライブ"jsample"フォルダにしています。

```java:ConnectionTest.java
import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
 
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;
 
public class ConnectionTest
{
    static String ABAP_AS = "ABAP_AS_WITHOUT_POOL";

//  SAPシステム情報
    static
    {
        Properties connectProperties = new Properties();
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxxx"); //host名を正しく入れる
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "00");
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "400");
        connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "fukuhara");
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "xxxx");
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "en");
        createDataFile(ABAP_AS, "jcoDestination", connectProperties);
    }    

//  SAPシステム情報のファイル作成
    static void createDataFile(String name, String suffix, Properties properties)
    {
        File cfg = new File(name+"."+suffix);
        if(!cfg.exists())
        {
            try
            {
                FileOutputStream fos = new FileOutputStream(cfg, false);
                properties.store(fos, "for tests only !");
                fos.close();
            }
            catch (Exception e)
            {
                throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
            }
        }
    }
    
    public static void main(String[] args) throws JCoException
    {
        JCoDestination destination = JCoDestinationManager.getDestination(ABAP_AS);
        System.out.println("Attributes:");

//      SAPシステム疎通
        System.out.println(destination.getAttributes());
        System.out.println();
    }
}
```

あとはJavaコンパイルをコマンドプロンプトから実行。そしてJavaプログラムの実行。SAPシステムとRFCで通信してシステム情報を取得表示します。

```
javac ConnectionTest.java

java ConnectionTest
```

![JCOInstall51.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/4cfbd55d-30a2-145e-9d22-0b739909e342.jpeg)

#Eclipseの場合
Eclipseで開発する場合は以下のようにJCoを使えるようにします。
プロジェクトで右クリックして、Properties を選択。
![JCoInstall61.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/2c4c81c6-4e59-8db9-74ea-8f2168247138.jpeg)

Java Build PathでLibrariesタブで「Add External JARs...」ボタンを押下。
![JCoInstall62.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/ae47727e-ee5c-6645-88d9-ef4aa58c824a.jpeg)

エクスプローラーでsapjco3.jarを選択して、終了。
![JCoInstall63.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/68a86e8c-e328-937a-8291-e851eabd82af.jpeg)