Antes de empezar
Debe tener una extensión definida por el usuario escrita en C. Puede ser uno de los nodos de ejemplo proporcionados que se describen en el apartado Archivos de nodo de ejemplo, el analizador de ejemplo que se describe en el apartado Archivos de analizador de ejemplo o un nodo o analizador que haya creado el usuario utilizando las instrucciones del apartado Creación de un nodo de proceso de mensajes o de salida en C, Creación de un nodo de entrada en C o Creación de un analizador en C. El nombre del nodo definido por el usuario debe tener el formato <nombrenodo>.lil.
Este apartado proporciona información sobre cómo compilar extensiones definidas por el usuario para todas las plataformas soportadas.
Los nombres de archivo utilizados en estas instrucciones son los de los ejemplos proporcionados. Si está compilando sus propias extensiones definidas por el usuario, deberá sustituir estos nombres de archivo por sus propios nombres de archivo.
Antes de intentar compilar la extensión definida por el usuario, asegúrese de tener un compilador apropiado soportado por el sistema operativo. Los compiladores siguientes son apropiados:
Para Windows, Microsoft Visual C++ .NET 2003
Para AIX, VisualAge C++ para AIX Versión 6.0
For HP-UX, HP ANSI C 03.52
Para Linux (plataforma x86) y Linux (plataforma zSeries) 2.4 Kernel y 2.6 Kernel, Gnu g++, versión mínima 3.2
Para Linux (plataforma POWER), Gnu g++, versión mínima 3.3
Para Solaris x86-64, Sun Studio 10
Para z/OS Language Environment (LE) z/OS 1.5, z/OS 1.6, z/OS C/C++ 1.5 o superior
Aunque las bibliotecas de extensiones existentes definidas por el usuario proporcionadas por el cliente o por terceros se ejecuten en un intermediario de WebSphere Message Broker sin realizar ninguna modificación o recompilación, tendrá que crearlas manualmente en el entorno de trabajo.
La compilación del origen para la extensión definida por el usuario en cada una de las plataformas soportadas crea el archivo de biblioteca de implementación cargable (LIL) que el intermediario necesita para implementar la extensión definida por el usuario.
cd dir_instalación\sample\extensions\nodes\ (Windows) cd dir_instalación/sample/extensions/nodes (plataformas Linux y 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<dir_instalación>/include \ -I<dir_instalación>/include/plugin \ -c BipSampPluginUtil.c \ -o <dir_salida>/BipSampPluginUtil.o cc +z \ -I. \ -I<dir_instalación>/include \ -I<dir_instalación>/include/plugin \ -c Common.c \ -o <dir_salida>/Common.o cc +z \ -I. \ -I<dir_instalación>/include \ -I<dir_instalación>/include/plugin \ -c NodeFactory.c \ -o <dir_salida>/NodeFactory.o cc +z \ -I. \ -I<dir_instalación>/include \ -I<dir_instalación>/include/plugin \ -c SwitchNode.c \ -o <dir_salida>/SwitchNode.o cc +z \ -I. \ -I<dir_instalación>/include \ -I<dir_instalación>/include/plugin \ -c TransformNode.c \ -o <dir_salida>/TransformNode.o ld -b \ -o <dir_salida>/SwitchNode.lil \ <dir_salida>/BipSampPluginUtil.o \ <dir_salida>/Common.o \ <dir_salida>/NodeFactory.o \ <dir_salida>/SwitchNode.o \ <dir_salida>/TransformNode.o \ -L <dir_instalación>/lib \ -L <dir_instalación>/xml4c/lib \ -L <dir_instalación>/merant/lib \ -L <dir_instalación>/jre/lib/PA_RISC2.0 \ -L <dir_instalación>/jre/lib/PA_RISC2.0/server \ -l imbdfplg chmod a+r <dir_salida>/SwitchNode.lil
Utilizando un compilador C soportado, compile y enlace el nodo definido por el usuario en Linux como se indica a continuación. Tenga en cuenta que las líneas se han partido para facilitar la lectura. Entre cada mandato como una sola línea de entrada.
/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 -limbdfplgEstos mandatos crean el archivo samples.lil, que proporciona los objetos TransformNode y SwitchNode.
#ifdef __cplusplus extern "C"{ #endif void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory() { ... ... } #ifdef __cplusplus } #endif
cc -mt \ -I. \ -I<dir_instalación>/include \ -I<dir_instalación>/include/plugin \ -c SwitchNode.c \ -o <dir_salida>/SwitchNode.o cc -mt \ -I. \ -I<dir_instalación>/include \ -I<dir_instalación>/include/plugin \ -c BipSampPluginUtil.c \ -o <dir_salida>/BipSampPluginUtil.o cc -mt \ -I. \ -I<dir_instalación>/include \ -I<dir_instalación>/include/plugin \ -c NodeFactory.c \ -o <dir_salida>/NodeFactory.o cc -mt \ -I. \ -I<dir_instalación>/include \ -I<dir_instalación>/include/plugin \ -c Common.c \ -o <dir_salida>/Common.o cc -G \ -o <dir_salida>/SwitchNode.lil \ <dir_salida>/SwitchNode.o \ <dir_salida>/BipSampPluginUtil.o \ <dir_salida>/NodeFactory.o \ <dir_salida>/Common.o \ -L <dir_instalación>/lib / -l imbdfplg chmod a+r <dir_salida>/SwitchNode.lil
export _CC_STEPS=-1De forma alternativa, puede añadir estas dos líneas al archivo make (makefile) para exportarlo, como se indica a continuación:
_CC_STEPS=-1 .EXPORT : _CC_STEPS
Utilizando un compilador C soportado, compile y enlace el nodo definido por el usuario en z/OS como se indica a continuación:
cc -c \ -Wc,DLL -g -W0,long,langlvl\(extended\),EXPORTALL,TARGET\(OSV2R8\),float\(ieee\) \ -Wc,xplink \ -W0,LIST\(./SwitchNode.lst\) \ -I. -I${dir_instalación}/include \ -I${dir_instalación}/include/plugin \ -I${dir_instalación}/sample/include \ -I${dir_instalación}/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${dir_instalación}/include \ -I${dir_instalación}/include/plugin \ -I${dir_instalación}/sample/include \ -I${dir_instalación}/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${dir_instalación}/include \ -I${dir_instalación}/include/plugin \ -I${dir_instalación}/sample/include \ -I${dir_instalación}/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${dir_instalación}/include \ -I${dir_instalación}/include/plugin \ -I${dir_instalación}/sample/include \ -I${dir_instalación}/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 \ ${dir_instalación}/lib/libimbdfplg.x
Establezca los permisos de la extensión definida por el usuario en lectura y ejecución para grupo emitiendo el siguiente mandato:
chmod a+rx {dir_salida}/SwitchNode.lil