始める前に
ユーザー定義拡張機能は C で作成しなければなりません。 この拡張機能は、サンプル・ノード・ファイルで説明されている提供されているサンプル・ノード、 サンプル・パーサー・ファイルで説明されているサンプル・パーサー、 またはC でのメッセージ処理ノードまたは出力ノードの作成、C での入力ノードの作成、 C でのパーサーの作成の指示を利用して独自に作成したノードかパーサーのいずれかにすることができます。ユーザー定義ノードの名前は、<nodename>.lil の形式で指定する必要があります。
このセクションでは、 サポートされているすべてのプラットフォームでのユーザー定義拡張機能のコンパイル方法について説明します。
この説明の中で使用されているファイル名は、提供されているサンプルの名前です。 独自のユーザー定義拡張機能をコンパイルする場合は、これらのファイル名を自分のファイル名に置き換える必要があります。
ユーザー定義拡張機能をコンパイルする前に、 ご使用のオペレーティング・システムでサポートされている適切なコンパイラーがあることを確認してください。 適切なコンパイラーの例について、以下に示します。
Windows の場合、Microsoft Visual C++ .NET 2003
AIX の場合、 VisualAge® C++ for AIX Version 6.0
HP-UX の場合、HP ANSI C 03.52
Linux (x86 プラットフォーム) および Linux (zSeries プラットフォーム) 2.4 Kernel および 2.6 Kernel の場合、Gnu g++ (最低バージョン 3.2)
Linux (POWER プラットフォーム) の場合、Gnu g++, minimum version 3.3
Solaris x86-64 の場合、 Sun Studio 10
z/OS Language Environment (LE) z/OS 1.5、z/OS 1.6 の場合、z/OS C/C++ 1.5 以降
既存のカスタマーまたはサード・パーティー提供のユーザー定義拡張機能ライブラリーは、 変更または再コンパイルせずに、WebSphere Message Broker ブローカーで実行されます。 ただし、これらはワークベンチで手動で作成する必要があります。
サポートされている各プラットフォーム上でユーザー定義拡張機能のソースをコンパイルすると、 ロード可能インプリメンテーション・ライブラリー (LIL) ファイルが作成されます。 このファイルは、ブローカーがユーザー定義拡張機能をインプリメントするために必要なファイルです。
cd install_dir¥sample¥extensions¥nodes¥ (Windows) cd install_dir/sample/extensions/nodes (Linux および UNIX プラットフォーム)
cl /VERBOSE /LD /MD /Zi /I. /I..¥..¥..¥include¥plugin SwitchNode.c BipSampPluginUtil.c Common.c NodeFactory.c TransformNode.c -link /DLL ..¥..¥..¥lib¥imbdfplg.lib /OUT:SwitchNode.lil
xlc_r ¥ -I. \ -I /opt/IBM/mqsi/6.0/include/plugin ¥ -c SwitchNode.c ¥ -o SwitchNode.o xlc_r ¥ -I. \ -I /opt/IBM/mqsi/6.0/include/plugin ¥ -c BipSampPluginUtil.c ¥ -o BipSampPluginUtil.o xlc_r ¥ -I. \ -I /opt/IBM/mqsi/6.0/include/plugin ¥ -c Common.c ¥ -o Common.o xlc_r ¥ -I. \ -I /opt/IBM/mqsi/6.0/include/plugin ¥ -c NodeFactory.c ¥ -o NodeFactory.o xlc_r -qmkshrobj ¥ -bM:SRE ¥ -bexpall ¥ -bnoentry ¥ -o SwitchNode.lil SwitchNode.o BipSampPluginUtil.o Common.o NodeFactory.o ¥ -L /opt/IBM/mqsi/6.0/lib -l imbdfplg chmod a+r SwitchNode.lil
cc +z ¥ -I. \ -I<install_dir>/include ¥ -I<install_dir>/include/plugin ¥ -c BipSampPluginUtil.c ¥ -o <output_dir>/BipSampPluginUtil.o cc +z ¥ -I. \ -I<install_dir>/include ¥ -I<install_dir>/include/plugin ¥ -c Common.c ¥ -o <output_dir>/Common.o cc +z ¥ -I. \ -I<install_dir>/include ¥ -I<install_dir>/include/plugin ¥ -c NodeFactory.c ¥ -o <output_dir>/NodeFactory.o cc +z ¥ -I. \ -I<install_dir>/include ¥ -I<install_dir>/include/plugin ¥ -c SwitchNode.c ¥ -o <output_dir>/SwitchNode.o cc +z ¥ -I. \ -I<install_dir>/include ¥ -I<install_dir>/include/plugin ¥ -c TransformNode.c ¥ -o <output_dir>/TransformNode.o ld -b ¥ -o <output_dir>/SwitchNode.lil ¥ <output_dir>/BipSampPluginUtil.o ¥ <output_dir>/Common.o ¥ <output_dir>/NodeFactory.o ¥ <output_dir>/SwitchNode.o ¥ <output_dir>/TransformNode.o ¥ -L <install_dir>/lib ¥ -L <install_dir>/xml4c/lib ¥ -L <install_dir>/merant/lib ¥ -L <install_dir>/jre/lib/PA_RISC2.0 ¥ -L <install_dir>/jre/lib/PA_RISC2.0/server ¥ -l imbdfplg chmod a+r <output_dir>/SwitchNode.lil
以下のように Linux 上でサポートされる C コンパイラーを使用し、 ユーザー定義ノードをコンパイルしてリンクします。 なお、注意していただきたい点として、このページのコマンドは読みやすくするために行が分割されていますが、 実際に入力する際は、各コマンドを 1 行に入力してください。
/usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/opt/mqsi/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE TransformNode.c /usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/opt/mqsi/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE SwitchNode.c /usr/bin/gcc -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/opt/mqsi/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE BipSampPluginUtil.c /usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/opt/mqsi/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE Common.c /usr/bin/g++ -c -fpic -MD -trigraphs -I. -I/opt/mqsi/include -I/opt/mqsi/include/plugin -DLINUX -D__USE_GNU -D_GNU_SOURCE NodeFactory.c /usr/bin/g++ -o samples.lil TransformNode.o SwitchNode.o BipSampPluginUtil.o Common.o NodeFactory.o -shared -lc -lnsl -ldl -L/opt/mqsi/lib -limbdfplgこれらのコマンドでは、TransformNode オブジェクトと SwitchNode オブジェクトを含む、ファイル samples.lil が作成されます。
#ifdef __cplusplus extern "C"{ #endif void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory() { ... ... } #ifdef __cplusplus } #endif
cc -mt ¥ -I. \ -I<install_dir>/include ¥ -I<install_dir>/include/plugin ¥ -c SwitchNode.c ¥ -o <output_dir>/SwitchNode.o cc -mt ¥ -I. \ -I<install_dir>/include ¥ -I<install_dir>/include/plugin ¥ -c BipSampPluginUtil.c ¥ -o <output_dir>/BipSampPluginUtil.o cc -mt ¥ -I. \ -I<install_dir>/include ¥ -I<install_dir>/include/plugin ¥ -c NodeFactory.c ¥ -o <output_dir>/NodeFactory.o cc -mt ¥ -I. \ -I<install_dir>/include ¥ -I<install_dir>/include/plugin ¥ -c Common.c ¥ -o <output_dir>/Common.o cc -G ¥ -o <output_dir>/SwitchNode.lil ¥ <output_dir>/SwitchNode.o ¥ <output_dir>/BipSampPluginUtil.o ¥ <output_dir>/NodeFactory.o ¥ <output_dir>/Common.o ¥ -L <install_dir>/lib / -l imbdfplg chmod a+r <output_dir>/SwitchNode.lil
export _CC_STEPS=-1別の方法として、 次のように、以下の 2 行を MAKE ファイルに追加してエクスポートすることができます。
_CC_STEPS=-1 .EXPORT : _CC_STEPS
以下のように z/OS 上でサポートされる C コンパイラーを使用し、 ユーザー定義ノードをコンパイルしてリンクします。
cc -c ¥ -Wc,DLL -g -W0,long,langlvl¥(extended¥),EXPORTALL,TARGET¥(OSV2R8¥),float¥(ieee¥) ¥ -Wc,xplink ¥ -W0,LIST¥(./SwitchNode.lst¥) ¥ -I. -I${install_dir}/include ¥ -I${install_dir}/include/plugin ¥ -I${install_dir}/sample/include ¥ -I${install_dir}/sample/plugin ¥ -o ./SwitchNode.o ./SwitchNode.c
cc -c ¥ -Wc,DLL -g -W0,long,langlvl¥(extended¥),EXPORTALL,TARGET¥(OSV2R8¥),float¥(ieee¥) ¥ -Wc,xplink ¥ -W0,LIST¥(./SwitchNode.lst¥) ¥ -I. -I${install_dir}/include ¥ -I${install_dir}/include/plugin ¥ -I${install_dir}/sample/include ¥ -I${install_dir}/sample/plugin ¥ -o ./BipSampPluginUtil.o ./BipSampPluginUtil.c
cc -c ¥ -Wc,DLL -g -W0,long,langlvl¥(extended¥),EXPORTALL,TARGET¥(OSV2R8¥),float¥(ieee¥) ¥ -Wc,xplink ¥ -W0,LIST¥(./SwitchNode.lst¥) ¥ -I. -I${install_dir}/include ¥ -I${install_dir}/include/plugin ¥ -I${install_dir}/sample/include ¥ -I${install_dir}/sample/plugin ¥ -o ./Common.o ./Common.c
cc -c ¥ -Wc,DLL -g -W0,long,langlvl¥(extended¥),EXPORTALL,TARGET¥(OSV2R8¥),float¥(ieee¥) ¥ -Wc,xplink ¥ -W0,LIST¥(./SwitchNode.lst¥) ¥ -I. -I${install_dir}/include ¥ -I${install_dir}/include/plugin ¥ -I${install_dir}/sample/include ¥ -I${install_dir}/sample/plugin ¥ -o ./NodeFactory.o ./NodeFactory.c
cc ¥ -Wl,DLL -g -Wl,p,map -Wl,LIST=ALL,MAP,XREF,REUS=RENT ¥ -Wl,xplink ¥ -o ./SwitchNode.lil ./SwitchNode.o ./BipSampPluginUtil.o ¥ ./Common.o ./NodeFactory.o ¥ ${install_dir}/lib/libimbdfplg.x
以下のコマンドを発行することにより、ユーザー定義拡張機能のファイル許可を、グループ読み取りおよび実行に設定します。
chmod a+rx {output_dir}/SwitchNode.lil