[SAP] 無償版 NetWeaver に SAP Web Dispatcher を導入する

SAP GUI による DIAG 接続は、SAProuter というプロキシ プログラムを使って中継させることができました。しかし HTTP 接続には対応していません。HTTP の場合は、適当なプロキシ ソフトを拾ってきて使えばできそうですが、SAP 謹製の SAP Web Dispatcher というプログラムを使って実現することもできます。もちろん、これも Trial 版の NetWeaver に含まれています。ありがたいですね。

SAP Web Dispatcher の本来の用途は名前の通り、複数のウェブ サーバー インスタンスを負荷分散することです。CISCO などが作っているハードウェア ロードバランサーの代わりとして(実際は併用したりしますが)使うことができます。そんな背景もあり、SAProuter と違って高機能で、設定も複雑です。今回は負荷分散することが目的ではなく、単純に中継させるだけを目的として構築してみます。

SAProuter のように経路の両端に設置する必要はなく、中継サーバー上でプログラムを実行するだけで動きます。今回は、VMware のホスト サーバーを SAP Web Dispatcher サーバーとして、ゲスト OS のサブネットと、ホスト側のサブネットを中継させます。環境は SAProuter のときと同じです。

<SAP サーバー>

  • VMware ゲスト OS
  • Windows Server 2008 x86
  • SAP NetWeaver 7.02
  • IP: 192.168.2.10 (固定 IP)
  • VMware の NIC で HostOny を指定し、ホスト OS とのみ通信できるようにしてある

<SAP Web Dispatcher サーバー>

  • VMware ホスト OS
  • Windows Server 2008 R2  SP1
  • IP (VMnet1): 192.168.2.1 (Manage Virtual Networks で設定しています)
  • IP (物理NIC): 192.168.1.3 (ただし DHCP 設定)

<SAP クライアント>

  • IP: 192.168.1.4
  • ブラウザー: IE 9.0 /  Chrome9.0
  • OS: WIndows 7 SP1 x86
  • ホスト名: adenosine (ワークグループ構成)

SAP Web Dispatcher の実体はフォルダー usr\sap\NSP\SYS\exe\uc\NTI386 に入っている sapwebdisp.exe ですが、他のモジュールとの連携もあり、以下のファイル全てを SAP Web DIspatcher サーバーの適当なフォルダーにコピーします。今回は F:\usr\sap\WD720 というフォルダーを作って、それを使います。

sapwebdisp.exe   – SAP Web Dispatcher 本体
sapwebdisp.pdb   – SAP Web Dispatcher デバッグ シンボル
sapcsa.dll       – ユーザー入力フィルタリング用のライブラリ
sapcpp47.dll     – SAP製 IO ストリームライブラリ (sapcsa.dll が使う)
wdispadmin.SAR   – 管理ツール アーカイブ
sapcar.exe       – SAR ファイル解凍プログラム
icmon.exe        – 管理ユーザーをメンテナンスするためのツール

全部 usr\sap\NSP\SYS\exe\uc\NTI386  に入っていますのでご安心を。デバッグ シンボルが入っているのは嬉しいですね。実は主要な SAP カーネル プログラムは、常にデバッグ シンボルとともに提供されています。素晴らしいです。SAP のデバッグについてはそのうち触れます。

ログ出力用に log フォルダーを作っておき、次のような構成となりました。

image

ちなみに、sapwebdisp.exe のバージョンは 7200.70.18.23869 でした。NetWeaver 7.01 に付属の sapwebdisp.exe を使っても設定手順は変わりませんが、SAProuter と同じように ICU 関連 DLL もコピーして下さい。

image

次に作るのは起動用のバッチ ファイルです。SAProuter と同じように ntscmgr.exe を使えばサービス化できますが、今回はサービス化せず、バッチファイルで起動します。

REM
REM startWebDisp.bat
REM

echo off
cls
echo SAP Web Dispatcher starting…
set WEBDISP=F:\usr\sap\WD720
sapwebdisp pf="%WEBDISP%\wd_10.pfl" -f "%WEBDISP%\log\dev_webdisp.log" -t 1

パラメーターで指定しているのは、SAP Web Dispatcher のインスタンス プロファイルとトレース ファイル、そしてトレース レベルです。そうです、SAP Web Dispatcher はそれ自身がインスタンス プロファイルを持ちます。

その他の起動オプションは以下のページをご覧ください。
http://help.sap.com/saphelp_nw70ehp1/helpdata/ja/de/89023c59698908e10000000a11402f/frameset.htm

次にインスタンス プロファイルを作ります。試行錯誤の結果、こんな感じでまとまりました。全部に意味があります。

#
# wd_10.pfl
#

# SAPSYSTEM must be set so that the shared memory areas can be created.
# The number must be different from the other SAP instances on the host.

SAPSYSTEM = 10
INSTANCE_NAME = WD720

DIR_ROOT = F:\usr\sap\$(INSTANCE_NAME)
DIR_GLOBAL =     $(DIR_ROOT)
DIR_EXECUTABLE = $(DIR_ROOT)
DIR_LOGGING =    $(DIR_ROOT)\log
DIR_ICMAN_ROOT = $(DIR_ROOT)\icmandir

# Message Server Description
# SAP Web Dispatcher connects NetWeaver Message Server

rdisp/mshost = 192.168.2.10
ms/http_port = 8100

# ICM settings

icm/security_log = LOGFILE=$(DIR_LOGGING)\dev_icm_sec.log,MAXSIZEKB=500
icm/server_port_0 = PROT=HTTP,PORT=7778,TIMEOUT=3600,PROCTIMEOUT=3600
icm/authfile = $(DIR_ROOT)\icmauth.txt
icm/HTTPS/trust_client_with_issuer = *
icm/HTTPS/trust_client_with_subject = *

コメントにも書いてあるように、SAP Web Dispatcher にはインスタンス番号が必要です。どうやら共有メモリを確保するために使われるようです。

インスタンス プロファイルをロードする処理は、ABAP インスタンスと共通のコードが使われているようで、特有の「癖」がけっこうあります。例えば、DIR_* 系のプロファイル パラメーターを暗黙的に持っていて、何も設定していないとログファイルなどを適当に usr\sap\D## などのパスに吐き出したりします。そんなわけで、DIR_* 系のパラメーターや、インスタンス名を明示的に指定しています。

今回はインスタンス番号は 10、インスタンス名は WD720 にしました。まあ・・・なんでも構いません。

SAP Web Dispatcher と NetWeaver との接点は、メッセージ サーバーの HTTP ポート 8100 と、ICM のポート 8000 ですが、プロファイル パラメーターとして指定するのはメッセージ サーバーの情報だけで十分です。必要なインスタンス情報は、メッセージサーバーから自動的に取得してくれます。

反対側の、ユーザーが接続する側のポートを icm/server_port_0 というパラメーターで 7778 に設定しています。SAProuter を 7777 にしたからというだけの理由です。ICM を設定したのと同じパラメーター名ですが、このパラメーター自体は ICM とは直接関係ありません。単にパラメーター名が同じだけです。このへんも実装が使いまわされているのでしょうかね。タイムアウト値を、SAP Web Dispatcher 側で独自に指定できることに注意してください。ここを指定しないと、確かデフォルト値が 10 秒ぐらいになるので、ICM 側のタイムアウト値が十分に長くても、Web Dispatcher 側でタイムアウトが発生してしまいます。

icm/authfile というパラメーターで icmauth.txt というファイルを指定していますが、これはまだ作っていませんね。icmauth.txt は、Web DIspatcher の管理ユーザーが記載されたテキストファイルで、最初にコピーした icmon.exe で作成します。が、摩訶不思議なことに icmon.exe にはファイルを新規作成する力がありません。権限不足でしょうか。そんなわけで、先に空ファイルを作っておきます。icmon の シンボルがあればデバッグできるのに。

エクスプローラーで新規の空ファイル F:\usr\sap\WD720\icmauth.txt  を作成し、コマンド プロンプトから以下のコマンドを実行してください。ユーザーは Administrator で実行しています。

f:\usr\sap\WD720>icmon pf=wd_10.pfl -a
icmon=>sapparam: SAPSYSTEMNAME neither in Profile nor in Commandline
Maintain authentication file
============================

Filename (F:\usr\sap\WD720\icmauth.txt): (何も入力せずエンター)
Maintain authentication file: F:\usr\sap\WD720\icmauth.txt
======================================

    a – add user to set
    c – change passwd of existing user in set
    g – change group of existing user in set
    x – change client cert data of existing user in set
    d – delete user from set
    l – list users of set
    s – save changes of set to file
    q – quit (without saving)

–>

コマンドを実行するときに、先ほど作ったプロファイル ファイルを指定します。-a オプションが管理ユーザーをメンテナンスするためのオプションです。icmon については以下のページを参考にしてください。

http://help.sap.com/saphelp_nw70ehp1/helpdata/ja/0b/6aedff404d6b4a8cac8f1359e1b47c/frameset.htm

今回はユーザーを新たに作るので、上のメニューで “a – add user to set” を選択し、必要事項を入力していくだけです。やっていることは、次のページに書かれていることそのままです。

http://help.sap.com/saphelp_nw70ehp1/helpdata/ja/82/9e98d786f040209e6a9e8145153939/frameset.htm

Filename (F:\usr\sap\WD720\icmauth.txt):
Maintain authentication file: F:\usr\sap\WD720\icmauth.txt
======================================

    a – add user to set
    c – change passwd of existing user in set
    g – change group of existing user in set
    x – change client cert data of existing user in set
    d – delete user from set
    l – list users of set
    s – save changes of set to file
    q – quit (without saving)

–> a
User name: icmadm
Enter new password: ********
Re-enter password: ********
Group name: admin
Subject value of client cert: CN=template,*
new entry locally created

Press <RETURN> to continue (何も入力せずエンター)
Maintain authentication file: F:\usr\sap\WD720\icmauth.txt
======================================

    a – add user to set
    c – change passwd of existing user in set
    g – change group of existing user in set
    x – change client cert data of existing user in set
    d – delete user from set
    l – list users of set
    s – save changes of set to file
    q – quit (without saving)

–> s

old file renamed to F:\usr\sap\WD720\icmauth.txt.bak
changes saved to file F:\usr\sap\WD720\icmauth.txt

Press <RETURN> to continue (何も入力せずエンター)
Maintain authentication file: F:\usr\sap\WD720\icmauth.txt
======================================

    a – add user to set
    c – change passwd of existing user in set
    g – change group of existing user in set
    x – change client cert data of existing user in set
    d – delete user from set
    l – list users of set
    s – save changes of set to file
    q – quit (without saving)

–> q

f:\usr\sap\WD720>

アカウントは何でも OK なので、icmadm / pswd_ICM と入力しました。忘れても、icmon で再登録できます。ちなみに icmauth.txt の内容は、こんな感じになっていました。

# Authentication file for ICM and SAP Web Dispatcher authentication
icmadm:$apr1$lfzz6v4.$ZYlfRGerjhM.dwX4Lokfo0:admin:CN=template,*:noflags

単純な構造ですね。”pswd_ICM “ という文字列が、何らかのハッシュ アルゴリズムで赤字の文字列に変換されているだけです。これは SAP の常套手段です。

そんなこんなで、フォルダーの中がこんな感じになりました。
icmon.exe を実行したときに、トレースファイル dev_icmon とバックアップファイル icmauth.txt.bak が勝手にできました。
image

ではいよいよ実行ですが、その前に、SAP サーバー側でファイアー ウォールの設定をします。開けるポートは、8100 と 8100 です。どちらか片方でも欠けるとエラーになるので、気を付けてください。

0007

いよいよ実行です。コンソールはこんな出力になるはずです。
image

起動すると、log フォルダーの中に以下の 3 種類のログが出力されるはずです。それぞれ確認し、エラーや警告が出力されていないことを確認してください。
image

SAP Web Dispatcher 701 と 720 の大きな違いは、720 になって ABAP システムログ (トランザクション SM21) 形式のログ ファイルを出力するようになったことでしょうか。それが SLOG<インスタンス番号>.LOG というファイルです。ただし、テキストエディタで見てもよく分かりません。

初回起動時、プロファイル パラメーター DIR_ICMAN_ROOT で指定したフォルダーに wdispadmin.SAR が解凍されます。SAR ファイルというのは、SAP 独自形式の圧縮ファイルです。なぜ JAR のように ZIP 形式を採用しなかったのは、SAP のプライドなんでしょうか。圧縮/解凍は、予めコピーしておいた sapcar.exe を使って自動的に行われます。

image

この icmandir フォルダーに解凍されたファイル群は、SAP Web Dispatcher の管理コンソールの Web アプリケーションです。この管理コンソールにログオンするときに、先ほど icmon.exe で作ったアカウント icmadm を使います。この Web アプリケーションは ICP というファイル形式になっていて、C のような文法で書かれています。SAP 独自のエンジンと思いますが、他では見たことがありません。ITS 時代の Business HTML とも違う。

何はともあれ、無事起動したようです。最後に、SAP Web Dispatcher サーバーのファイアウォール設定で、7778 ポートを開けておきます。

image

ようやく舞台が整いました。では、ブラウザーでアクセスします。

前回の記事にも書きましたが、クッキー生成の関係で、ホスト名の文字列はピリオドを 2 以上含んでいなければなりません。ここでもそのルールが適用され、ピリオドを 2 つ含めた文字列でSAP Web Dispatcher サーバーにアクセスしなければなりません。今回、SAP Web Dispatcher サーバーはワークグループ構成なので、前回と同様に、クライアント PC の hosts エイリアスで対応します。hosts ファイルに以下の行を追加します。

192.168.1.3    adenosine    adenosine.sap.local

まずは管理コンソールにアクセスします。URL は以下です。
http://adenosine.sap.local:7778/sap/admin

ログオン認証が必要になるので、ここで icmon.exe で作成した icmadm アカウントを入力します。

image

無事表示されました!

image

この管理ツールを使うと、設定されているパラメーターの確認や、ログの表示、管理ユーザーのメンテナンス、ワーカースレッドやメモリの状態など、多様な表示/編集することができます。

次は NetWeaver にログオンしてみましょう。前回の記事では、SOA Manager と Webgui に以下の URL でログオンしました。
http://win2008-nw702.sap.local:8000/sap/bc/gui/sap/its/webgui
http://win2008-nw702.sap.local:8000/sap/bc/webdynpro/sap/appl_soap_management

SAP Web Dispatcher は接続先をディスパッチするだけでアクセス パスは変更しないので、今回の場合は ”win2008-nw702.sap.local:8000” をそのまま “adenosine.sap.local:7778” で置き換えるだけです。すなわち、

http://adenosine.sap.local:7778/sap/bc/webdynpro/sap/appl_soap_management
http://adenosine.sap.local:7778/sap/bc/gui/sap/its/webgui

にアクセスします。

まずは SOA Manager。ログオン画面が出てくるので、SAP ユーザーでログオンします。

image

image

無事表示されました。

image

webgui も同様に問題なくアクセスできます。

image

これで、SAP GUI、ブラウザーを使って、ともに外部のサブネットから NetWeaver へアクセスできるようになりました。簡単な図を作りましたので、参考までに。

topology

広告

[SAP] HTTP を使って NetWeaver に接続する

多くの場合、NetWeaver ABAP には SAP GUI という SAP 独自のクライアント アプリケーションを使ってログオン、及び、各操作を行います。一方、NetWeaver Java の場合はもちろん、ブラウザーがクライアント アプリケーションとなります。逆に SAP GUI を使うことはできません。

以前にも触れたことがありますが、SAP GUI と NetWeaver との通信に使われるプロトコルは、DIAG と呼ばれる(おそらく)仕様が非公開のプロトコルが使われています。しかしながら NetWeaver ABAP も Java と同じように、ブラウザからアクセスすることもできます。Java でいう JSP のような技術は ABAP にも存在し、名前は BSP = Business Server Page といいます。ASP という名前にしなかったのは、マイクロソフトの Active Server Page に対する配慮でしょうか。

現在の NetWeaver 7.x では、HTTP を処理するコンポーネントは ICM (Internet Communication Manager) に統合されています。NetWeaver 7.1x 系では確か Java でも ICM が HTTP 要求を処理しているはずです。プロセスでいうと icman です。こいつが HTTP ポートを開けています。

話を ABAP に絞ります。HTTP 通信は ICM が担当しますが、中のロジックはもちろん ABAP 側で処理します。ブラウザから来た HTTP リクエストを ICM がうまいこと処理して、最終的にはABAP プログラムであるイベント ハンドラにリクエストが届き、ワークプロセスでそれを処理します。で、HTTP 応答を ICM 経由で返します。じゃあ、ICM と ワークプロセスの通信はどうなってるの、という疑問が出てきます。このへんはちゃんと確かめていませんが、おそらくメッセージ サーバーを使って HTTP で通信しています。メッセージサーバーにも HTTP ポート (39##) があります。SAP 公式手順はないですが、ICM を別サーバーで構築することもできる気がします。スタンドアロン ICM みたいな。

ちょっと知っている人は、じゃあ、ICF とか ITS ってのは何よ、と思いますね。ICF は Internet Communication Framework という名前で、ICM に統合されているかのような印象を受けます。が、こいつは ABAP です。フレームワークという名の通り、ABAP プログラムが HTTP を処理するためのフレームワークのことです。

http://help.sap.com/saphelp_nw70ehp1/helpdata/en/72/c730ddc06511d4ad310000e83539c3/frameset.htm

ICF というのはけっこう大きな実装で、全体を見るのはけっこう難しいです。というか見たことないですすみません。例えば、ABAP の HTTP リクエスト ハンドラーは ABAP クラスとして IF_HTTP_EXTENSION というインターフェースを実装しなければなりませんが、IF_HTTP_EXTENSION は ICF の一部と言えるでしょう。自分で実装したクラスは、ICF サービスとして、ICF の一部に登録することになります。細かいことは、自分で ABAP プログラムを見たり、上のヘルプ ポータルを参考にして下さい。(丸投げ)

で、次は ITS (Internet Transaction Server) ですね。結論から言うと、ITS というコンポーネントは既に存在しません。ICF サービスとして、標準の NetWeaver ABAP に含まれています。そのためか統合 ITS と呼ばれたりもします。でもこれは ICF サービスに過ぎません。その昔、SAP のアプリケーション サーバー (NetWeaver と呼ばれる前) に HTTP の機能がなかった時代に、HTTP を処理するコンポーネントが新たに作られました。これが ITS です。HTTP 要求を受け取る W-Gate と ABAP と通信する A-Gate に分かれていて、W-Gate のほうは確か IIS や Apache でも代用できたような記憶があります。このときは、まだ普通のウェブ サーバーの体をなしていて、HTML などはファイル システム上にデプロイする仕組みになっていました。現在の ICF では、ファイル システムは使わず、データベース内に独自のリポジトリを作って、それを ABAP が処理しています。そもそもスタティックな HTML はほとんど使いません。ITS 時代には、BSP の前身である HTMLBusiness という素敵な技術があって、これがまたけっこう面白いです。

現在 ITS を覚える意味はあまりないかもしれませんが、ヘルプはこれです。
http://help.sap.com/saphelp_470/helpdata/en/0d/654d356560054ce10000009b38f889/frameset.htm

統合 ITS についてはこれです。
http://help.sap.com/saphelp_nw70ehp1/helpdata/en/6c/d30ea76d444ee3b1ea48026fe0fbb6/frameset.htm

実際に動かしてみましょうか。環境はいつものこれです。

ホスト名: win2008-nw702 (ワークグループ構成)
IP: 192.168.1.3
OS: Windows Server 2008 x86 (VMware ゲスト)
RAM: 2GB (VMware による割り当て)
NetWeaver: SAP NetWeaver 7.0 EhP2 SP6
SID: NSP
インスタンス番号: 00
インストール ドライブ: C:

まずはインスタンス プロファイルに以下のパラメーターを設定し、NetWeaver を再起動します。この環境では、インスタンス プロファイルは C:\usr\sap\NSP\SYS\profile\NSP_DVEBMGS00_win2008-nw702 です、念のため。

SAPLOCALHOSTFULL = win2008-nw702.sap.local
icm/host_name_full = $(SAPLOCALHOSTFULL)
icm/server_port_0 = PROT=HTTP,PORT=80$$
icm/min_threads = 5
icm/max_threads = 10
icm/max_conn = 20
icm/keep_alive_timeout = 3600
icm/conn_timeout = 100000

ちなみにファイル全体はこんな感じ。

#
# NSP_DVEBMGS00_win2008-nw702
#

#
# basic parameters
#
SAPSYSTEMNAME = NSP
SAPSYSTEM = 00
INSTANCE_NAME = DVEBMGS00
SAPGLOBALHOST = win2008-nw702
SAPLOCALHOSTFULL = win2008-nw702.sap.local
DIR_CT_RUN = $(DIR_EXE_ROOT)\$(OS_UNICODE)\NTI386
DIR_EXECUTABLE = $(DIR_INSTANCE)\exe
dbs/ada/schema = SAPNSP

ms/server_port_0 = PROT=HTTP,PORT=81$$
rdisp/wp_no_dia = 5
rdisp/wp_no_btc = 2
rdisp/wp_no_enq = 1
rdisp/wp_no_vb = 1
rdisp/wp_no_vb2 = 1
rdisp/wp_no_spo = 1

#
# memory management
#
PHYS_MEMSIZE = 1536
em/max_size_MB = 20000
alert/MONI_SEGM_SIZE = 0
enque/table_size = 2000

rspo/local_print/method = 2
rsdb/ntab/entrycount = 5000
rsdb/ntab/ftabsize = 3000
rsdb/ntab/sntabsize = 1000
rsdb/ntab/irbdsize = 1000

abap/buffersize = 100000
rsdb/cua/buffersize = 2000
zcsa/presentation_buffer_area = 1000000
sap/bufdir_entries = 500

zcsa/table_buffer_area = 9000000
zcsa/db_max_buftab = 500
rtbb/buffer_length = 500
rtbb/max_tables = 50

#
# ICM parameters
#
icm/host_name_full = $(SAPLOCALHOSTFULL)
icm/server_port_0 = PROT=HTTP,PORT=80$$
icm/server_port_1 = PROT=SMTP,PORT=2500,TIMEOUT=120,PROCTIMEOUT=120
icm/min_threads = 5
icm/max_threads = 10
icm/max_conn = 20
icm/keep_alive_timeout = 3600
icm/conn_timeout = 100000

#
# additional parameters
#

mpi/total_size_MB = 10

注意点が 1 点あります。SAPLOCALHOSTFULL = win2008-nw702.sap.local のところで指定するホスト名です。奇妙なルールですが、後の手順を実行するためにはこの値は必ずピリオドを 2 つ以上含んだ文字列にしなければなりません。最終的にブラウザーでアクセスするときに使うホスト名になるのですが、クッキーを生成する関係でこのようなルールが生まれてしまいました。

ドメインに参加していれば FQDN がありますが、ドメインに参加していなくても、要はクライアント側でピリオドを付けたホスト名で名前解決できればいいので、hosts (%systemroot%\system32\drivers\etc\hosts) のエイリアスでアドホックに対応可能です。このサーバーはワークグループ設定なので正式な FQDN が存在せず、サーバーとクライアントの hosts ファイルに以下のようなエントリを追加する方法で対処しています。NetWeaver は、SAPLOCALHOSTFULL に指定されたホスト名が名前解決できなかった場合は起動に失敗するのでサーバー側にも必ず hosts を設定します。

192.168.2.10    win2008-nw702    win2008-nw702.sap.local

再起動が終わったら、SAP GUI でログオンし、トランザクション SMICM を実行して ICM の状況を確認します。トランザクション実行後、メニューから Goto > Services を選択して、こんな感じになってれば OK。 HTTP サービスが有効になっています。SMTP は今回は使いません。SAP からメールを送れるようになってけっこう面白いので、これもいつか紹介します。
image

次に利用する SICF サービスを有効します。通常であればトランザクション SICF から1 つずつやっていくところですが、まずは SICF_INST を実行します。
image

F4 押すと、選択肢が表示されます。 いわゆる 「F4 ヘルプ」 ですね。
image

ここでは以下の 5 つをそれぞれ選択して、有効化します。複数選択はできないので、5 回繰り返します。

  • BSPBASIS
  • WEB DYNPRO ABAP
  • WEB DYNPRO ABAP DESIGN TIME
  • WEB DYNPRO ABAP TEST APPS
  • WEB DYNPRO DBA COCKPIT

それぞれの Technical Name と ICF サービスは 1:N で結びついています。対応はテーブル ICFINSTACT の内容から見ることができます。
image

次に、SICF_INST には含まれない ICF を個別に有効化します。トランザクション SICF を実行し、最初の画面ではそのまま F8 キーを押してください。

こんな画面になります。
image

ツリー構造になっているのが SICF サービス群です。ツリーを開いて以下のサービスを見つけ、右クリックして [Activate Service] を選択してください。

  • default_host/sap/public/bc/its/mimes
  • default_host/sap/bc/gui/sap/its/webgui
  • default_host/sap/bc/webdynpro/sap/APPL_SOAP_MANAGEMENT

こんなダイアログが出てくるので、左から 2 番目の [Yes] をクリックしてください。左端の [Yes] との違いは、サブツリーのサービス全てを有効化してくれることです。分かりにくいですね。
image

次に、トランザクション SE38 を実行し、ABAP プログラム W3_PUBLISH_SERVICES を実行してください。
image

このまま F8 を押します。
image

F5 を押して全選択してから、F7 を押して Publish します。
image

このプログラム W3_PUBLISH_SERVICES では、ITS コンポーネントのパブリッシュ(デプロイ)を行ないます。GUI for HTML (webgui) を使うための準備です。webgui は、ITS の時代からある技術で、SAP GUI の画面を HTML の画面に 1:1 対応させるなかなか凄い技術です。webgui はまだ ITS サービスとしての一面が残っていて、一部の機能を使うためには、画像ファイルなどを統合 ITS 上にデプロイしなければいけません。先にも述べましたが、統合 ITS はデータベース上の特殊なリポジトリからファイルを読み込みます。それが MIME リポジトリというもので、上で有効化した default_host/sap/public/bc/its/mimes が MIME リポジトリにあたります。これを使うことで、HTTP 経由で MIME リポジトリから画像データなどを読み込めるようになります。

統合 ITS については、以下のページも参考になります。
http://help.sap.com/saphelp_nw70ehp1/helpdata/en/a6/cf3d4050d89523e10000000a1550b0/frameset.htm

これで準備は完了です。

まずは、WebDynpro for ABAP の標準的な画面として、SOA Manager の画面を見てみます。SAP GUI からトランザクション SOAMANAGER を実行してください。自動的にブラウザが起動してきます。ホスト名が SAPLOCALHOSTFULL で指定したホスト名になっていて、ポート番号は 8000 になっていることを確認して下さい。[Log On] をクリックします。
image

ログオン画面が出てきます。ここでは SAP ユーザー アカウントを入力します。ログオン対象のクライアントは、前のログオンの画面に表示されていた通り、001 です。
image

こんな画面が出れば OK です。
image

SOAMANAGER というトランザクションは、Web サービスのパブリッシュなどを行なう比較的新しいトランザクションで、SAP GUI からは操作することができず、ブラウザから操作するようになっています。全てというわけではありませんが、新しいトランザクションはウェブベースで、というのがトレンドです。

この画面は WebDynpro for ABAP という、SAP 独自のフレームワークで書かれています。画面に表示されるボタンなどのコントロールや、ABAP とのデータの連携などを簡単に作れる技術です。

試しに Google Chrome で開いたら、プロパティシートの他のタブにはコントロールが描画されませんでした。ちなみにさっきのブラウザは IE8 です。時代と逆の対応を見せる SAP は素敵です。

image

話題の IE9 で開いてみました。こちらは問題なし。

image

エンタープライズ ユーザーは、やはり IE なんですかね。

WebDynpro for ABAP の標準的な画面の次に、GUI for HTML を見てみます。次の URL に直接アクセスして下さい。
http://<SAPLOCALHOSTFULL で指定したホスト名>:8000/sap/bc/gui/sap/its/webgui

image

どうでもいい話ですが、このログオン画面に出てくる人が、ジョージ・クルーニーか、髪が生えているときのスタンリー・トゥッチに似ているとしか考えられません。絶対似てる。

それはさておき、さきほどと同様に [Log On] をクリックしてログオンします。

これが GUI for HTML です。

image

NetWeaver 7.02 になって、さらに見た目が綺麗になりました。昔は全然使えない代物でしたが、これならけっこうありです。しかしよくもまあ GUI の画面をここまで再現したものです。

比較的複雑なトランザクション SE80 を実行して、適当なプログラムを開いてみました。この程度なら普通に動く。

image

SE80 は Chrome でも動きます。プロパティ シート コントロールがダメなのでしょう。

image

もちろん IE9 でも余裕。

image

USB 3.0 にようやく対応

USB 3.0 対応の外付け HDD を入手したので、USB 3.0 のインターフェース カードを購入し、今更ながら USB 3.0 を初体験しました。インターフェース カードは 2,000 円切ってるんですね。安すぎる。

USB 3.0 さえ使えればいいので、コスト重視で選んだのがこれ。今回はロープロファイルのスロットに差します。

シリコンパワー – SPPU3V10

http://www.amazon.co.jp/%E3%82%B7%E3%83%AA%E3%82%B3%E3%83%B3%E3%83%91%E3%83%AF%E3%83%BC-Express-%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E7%94%A8-%E6%8B%A1%E5%BC%B5%E3%82%AB%E3%83%BC%E3%83%89-SPPU3V10/dp/B00450D45O

送料込みで 2,000 円とちょっと。玄人志向の USB3.0N3-PCIe と迷ったが、シリコンパワーの方が安かった。玄人志向のカードだと最新版は USB3.0N4-PCIe だけどロープロファイルは非対応。

ちなみに玄人志向は USB3.0N-LPPCI という、PCI Express じゃなくて普通の PCI 向けの USB 3.0 カードを販売しています。渋い。

0 これを買った。

基板は小さくてシンプル。チップらしいのは 1 つしか見当たらない。唯一のチップには NEC CHINA D720200F と書いてあるので、これが噂のルネサス エレクトロニクス(旧 NEC エレクトロニクス)製 μPD720200 か。

CIMG1341

http://www2.renesas.com/usb/ja/product/upd720200.html

今回は PCI Express 2.0 x16 のスロットに差します。うーん、勿体ない。そして x16 と x1 に互換性があることは最近知りました。というかウィキペディアに書いてありました。マルチモニタにするため、もともとはビデオカードが差さっていたのですが、それを引っこ抜いて入れ替えます。

CIMG1342 いまどきスロット 2 つは少ない・・・

x1 を x16 対応スロットに差すと、左側のピンがほとんど使われず、やはり勿体ない。

CIMG1345

さてここで問題発生。おそらくバスパワー用と思われる、電源ソケットが基板上にあります。電源ケーブルを用意してなかった!というのもありますが、それ以前に…

CIMG1346

ここに電源差したらフタが閉まりませんよ先生!!

まあ、この筐体が特殊すぎるだけです。なんでこの筐体をチョイスしたんだ・・・。DELL の OptiPlex を買うときは、スモールフォームファクタを選んではいけません。ちなみに黒くて大きいのは HDD です。ワンタッチで着脱が可能です。

まあいいまあいい、バスパワー使わなくても USB 3.0 は使えるよね、と期待をこめてフタを閉めた。

つなげる HDD はこれ。バッファローの HD-HU3。定番ですね。
http://buffalo.jp/products/catalog/storage/hd-hu3/

インターフェース カードのドライバーをインストールし、HDD をおそるおそる繋ぐと・・・無事認識された。よかった。バスパワーなんて要らないよね。

OS は Windows Server 2008 R2 SP1 なのだけど、バッファローお得意の Turbo USB を有効化しようとしたら、怒られた。
turbousb

いやいやいや、Windows 7 対応してるんじゃないのかよ。まあ、USB 3.0 での効果は、上に書いたバッファローのページによると 6% アップぐらいなので、とりあえずはなしでいいか。

デバイス ツリーはこうなった。
devices

さて、何かコピーしてみるテスト。お決まりですね。

どーん。

usb30_fast 96.5MB/sec !!

おお、確かにこれは速い。85~100MB/sec で推移する感じかな。USB 2.0 の 480Mbps の壁はさくっと超えてる。歓喜。バッファローのページに書いてあった 123.4MB/s にはかなわないが、満足満足。

追加注文しようかな。

[SAP] 無償版 NetWeaver に SAProuter を設定してみた

SAP とサポート契約を結ぶと、OSS (Online Service System) と呼ばれるリモートサービスを受けることできます。このサービスを使うと、SAP 側のサポート担当者は、インターネットや専用回線越しにカスタマーシステムにログオンすることが可能になっています。この回線のことを OSS 回線と呼んだり呼ばなかったりします。

この OSS 回線の両端には、必ず SAP ルーターという小さなソフトウェアがいます。すなわち SAP のサポート側と、カスタマー側です。OSS 用途以外ではほとんど脚光を浴びることのない SAP ルーターですが、実は OSS 回線の門番以外としても当然使うことができます。しかも、この SAP ルーター、例の無償版 NetWeaver にも含まれていて、好きなように使うことができます。仮想マシンのように、閉じた環境で SAP を使いたい場合など、別のサブネットから排他的に SAP GUI でログオンできるように環境を作れるのはかなり便利だと思います。手順もけっこう簡単です。

SAP ルーターについては、本家の以下のページをお読みください。けっこう分かりやすく書かれています。この中で触れられている SNC (セキュアネットワークコミュニケーション) という暗号化通信がけっこう面白いのですが、無償版には含まれていないので試せません。残念です。

http://help.sap.com/saphelp_nw70ehp1/helpdata/ja/4f/992d39446d11d189700000e8322d00/frameset.htm

今回は、以前の記事で VMware 仮想マシン (Windows Server 2008 x86) 上に入れた NetWeaver 7.02 を使います。ネットワークなどの構成は以下のようになっています。

<SAP サーバー>

  • VMware ゲスト OS
  • Windows Server 2008 x86
  • SAP NetWeaver 7.02
  • IP: 192.168.2.10 (固定 IP)
  • VMware の NIC で HostOny を指定し、ホスト OS とのみ通信できるようにしてある

<SAProuter サーバー>

  • VMware ホスト OS
  • Windows Server 2008 R2
  • IP (VMnet1): 192.168.2.1 (Manage Virtual Networks で設定しています)
  • IP (物理NIC): 192.168.1.3 (ただし DHCP 設定)

<SAP クライアント>

  • Windows 7 x86
  • SAP GUI 7.20
  • IP: 192.168.1.4 (ただし DHCP 設定)

こんな感じです。

異なるサブネットに属している SAP クライアントと SAP サーバーは、直接通信できませんが、間に SAProuter を介入させることで可能になります。これが、「ルーター」 と呼ばれる所以でしょう。また、ポート番号を絞ることができるので、ファイアウォールによる防御効果を高めることができます。

SAProuter は、無償版 NetWeaver をインストールしたときに自動的に展開されています。NetWeaver を C: ドライブにインストールした場合は、以下のファイルがあるはずです。まさにこれが SAProuter です。

C:\usr\sap\NSP\SYS\exe\uc\NTI386\saprouter.exe

Windows エクスプローラーのプロパティから、プログラムのバージョンを見ることができます。同じ無償版でも、NetWeaver 7.01 と NetWeaver 7.02 に含まれている SAProuter のバージョンは異なります。

参考までに、手元にあるファイルはこうなっていました。

NetWeaver 7.01  – 7010.29.15.58313 (リリース 701 のパッチレベル 29 ということです)

image

NetWeaver 7.02 – 7200.70.18.23869 (リリース 720 のパッチレベル 70 ということです)

image

58313 や 23869 といった細かいビルド番号は無視して構いません。

基本的には新しいバージョンほどバグが修正されていたり、新しいオプションが増えているので、今回であれば 7200.70 を使うべきでしょう。SAProuter が扱う SAP プロトコルが変わっているわけではないので、NetWeaver 7.01 にログオンするのに SAProuter 7200 を使っても問題ありません。R/3 でも問題なく動くはずです。逆に、混在させても動きますが、オプションによっては古い SAProuter が対応していなかったりします。

今回の 2 つのファイルの間には大きな違いがあり、7200.70 が単体で動作するのに対して、7010.29 の動作には以下の DLL が必要になります。

icudt30.dll
icuin30.dll
icuuc30.dll

これらの DLL も、saprouter.exe と同じフォルダーに入っているので、コピーするファイルが複数になるだけですが。この ICU*** という DLL は、SAP のものではなく、IBM の DLL です。ICU というのは、正式には IBM International Components for Unicode の略です。エクスポートされた関数名をざっと見たところ、標準 C ランタイムの IBM 版といったところでしょうか。Windows 環境であれば wchar_t 使えば終わりですが、SAP は UNIX, Linux や z/OS といったマルチ プラットフォームで動作する製品なので、このような外部ライブラリを使うことで、コード移植の手間を少なくしているのだと思われます。

具体的な手順を紹介していきます。

SAP サーバーの設定

SAProuter 用に適当なフォルダーを作り、saprouter.exe をコピーします。今回は NetWeaver の入っている usr\sap に SAProuter というフォルダーを作りました。こんな感じ。

image

niping.exe というのは、ICMP ではなく SAP プロトコルを使った ping コマンドのようなものです。saprouter.exe と同じところに入っています。今回は使いませんが、疎通確認の時よく使うので、まとめてコピーしておくと楽です。

次に、起動用のバッチファイルを作ります。こんな感じです。

REM
REM startRouter.bat
REM

echo off
cls
echo SAProuter starting…
set ROUTER=C:\usr\sap\SAProuter
saprouter -r -S 7777 -R "%ROUTER%\saprouttab" -G "%ROUTER%\saprouter.log" -J 10000000 -T "%ROUTER%\dev_saprouter" -V1 -E

ここで設定しているのは以下の通りです。

  • ポート番号: 7777
  • ルート許可テーブル ファイルの指定
  • ログファイルの指定、最大サイズ指定
  • トレース ファイルの指定、及び、トレース レベルの設定

これ以外のオプションについては、以下のページをご覧ください。

http://help.sap.com/saphelp_nw70ehp1/helpdata/ja/4f/992e1d446d11d189700000e8322d00/frameset.htm

次にルート許可テーブル ファイルを作ります。接続を許可/却下するホストや、TCP ポート番号、接続パスワードの指定を行うことができます。単なるテキストファイルです。

#
# saprouttab
#

# allow connections
# P    <source>      <dest>          <port>    <password>

P      192.168.2.1   192.168.2.10    3200      sapsap

 

上記の場合、192.168.2.1 (SAProuter サーバー) から 192.168.2.10 (自分: SAP サーバー) への TCP ポート 3200 を使った接続を許可しています。ただし接続パスワードとして sapsap という文字列が必要になります。ポート 3200 というのは、SAP GUI が SAP インスタンスへ接続するときのポートの 1 つです。

ルート許可テーブルの書き方は以下のページを見てください。中継する SAProuter の数を制限する仕様が新しく追加されたようですね。

http://help.sap.com/saphelp_nw70ehp1/helpdata/ja/4f/992dfe446d11d189700000e8322d00/content.htm

フォルダの中身がこんな感じになります。

image

ここで、startRouter.bat を実行すると、以下のウィンドウが表示されて接続の待機が始まりますので、このまま放置しておきます。起動したタイミングで、ログファイル、トレースファイルが自動的に作成されます。

image

コンソールが邪魔な場合は、以下のページに書いてあるように、saprouter.exe がもともと入っていたディレクトリにある ntscmgr.exe というユーティリティ プログラムを使って、SAProuter を Windows サービスとして登録することができます。サービスにすることで、ユーザーがログオンしなくても SAProuter を起動できるようになります。興味があれば試してみてください。普通に sc.exe でもできると思います。

http://help.sap.com/saphelp_nw70ehp1/helpdata/ja/4f/992dab446d11d189700000e8322d00/content.htm

最後に、SAP サーバーのファイアーウォール設定で、忘れずにポート 7777 を開いてください。

image

 

SAProuter サーバーの設定

SAP サーバーでの設定を使い回します。SAP サーバーで作った SAProuter フォルダーを丸ごと SAProuter サーバーの適当な場所にコピーして下さい。今回は F:\usr\sap\SAProuter としてコピーしました。

image

ドライブ名が C: から F: に変わったので、起動バッチファイルのドライブ名だけを変更します。環境に合わせて設定して下さい。

REM
REM startRouter.bat
REM

echo off
cls
echo SAProuter starting…
set ROUTER=F:\usr\saps\SAProuter
saprouter -r -S 7777 -R "%ROUTER%\saprouttab" -G "%ROUTER%\saprouter.log" -J 10000000 -T "%ROUTER%\dev_saprouter" -V1 –E

ルート許可テーブルを以下のように編集します。任意のホストから、TCP ポート 7777 への接続を許可するように設定しています。接続パスワードは password です。

#
# saprouttab
#

# allow connections
# P    <source>    <dest>        <port>    <password>

P      *           192.168.2.10  7777      password

startRouter.bat を起動し、最後に SAProuter サーバーのファイアーウォール設定で、ポート 7777 を開けておきます。

image

image

2 つの SAProuter の設定は以上です。

 

SAP クライアントの設定

環境は整ったので、SAP クライアントから SAP GUI を使ってログオンします。SAP NetWeaver と 2 つの SAProuter が起動していることを再度確認してください。

SAProuter を介してログオンするためには、SAP GUI のログオン エントリーにおいて、SAProuter ストリングというものを指定する必要があります。

SAProuter ストリングとは、中継すべき SAProuter のサーバー名やパスワードを連続して書き連ねたものです。パスワードは直書きします。そういう意味では、パスワードというよりは、チェック サムのようなものと捉えていたほうがいいかもしれません。パケット キャプチャをすると分かりますが、なんとこのパスワードは平文でネットワーク上を流れていきます。せめてハッシュぐらい使えよ、と。

http://help.sap.com/saphelp_nw70ehp1/helpdata/ja/4f/992df1446d11d189700000e8322d00/content.htm

今回の場合は以下のように入力します。構成を正しく把握していないと間違いやすいので、気を付けてください。私もよく混乱します。

/H/192.168.1.3/S/7777/W/password/H/192.168.2.10/S/7777/W/sapsap

image

あとは、いつも通りログオン可能です。

ログオン セッションの確立や切断時には、指定したログ ファイルに接続元やポート番号が時刻とともに記録されます。また、ルート許可テーブルによって許可されていない接続の要求があった場合も、ログファイルやトレースファイルに記録されます。便利です。

なお、ログオン セッション確立中に SAProuter が落ちると、SAP GUI が次のようなダイアログを表示して、セッションが切れます。つまり、SAProuter も SPOF になるので注意が必要です。

image image