Antes de começar
Você deve ter uma extensão definida pelo usuário gravada em C. Pode ser um dos nós de amostra fornecidos descritos em Arquivos de Nós de Amostra, o analisador de amostras descrito em Arquivos de Analisadores de Amostra ou um nó ou analisador criado por você mesmo utilizando as instruções de Criando um Nó de Processamento de Mensagem ou de Saída em C, Criando um Nó Input em C ou Criando um Analisador em C. O nome do nó definido pelo usuário deve estar no formato <nodename>.lil.
Esta seção fornece informações sobre como compilar extensões definidas pelo usuário para todas as plataformas suportadas.
Os nomes de arquivos utilizados nestas instruções são os das amostras fornecidas. Se você estiver compilando suas próprias extensões definidas pelo usuário, deverá substituir esses nomes de arquivos pelos seus próprios nomes de arquivos.
Antes de tentar compilar sua extensão definida pelo usuário, certifique-se de ter um compilador apropriado suportado pelo sistema operacional. Exemplos de compiladores apropriados são:
Para Windows, Microsoft Visual C++ .NET 2003
Para AIX, VisualAge C++ para AIX Versão 6.0
Para HP-UX, HP ANSI C 03.52
Para Linux (plataforma x86) e Linux (plataforma zSeries) 2.4 Kernel e 2.6 Kernel, Gnu g++, versão mínima 3.2
Para Linux (plataforma POWER), Gnu g++, versão mínima 3.3
Para Solaris x86-64, Sun Studio 10
Para z/OS LE (Language Environment) z/OS 1.5, z/OS 1.6, z/OS C/C++ 1.5 ou superior
As bibliotecas de extensões definidas pelo usuário existentes do cliente ou fornecidas por terceiros executarão em um intermediário do WebSphere Message Broker sem modificação ou recompilação, porém é preciso criá-las manualmente no workbench.
Compilar a origem para a extensão definida pelo usuário em cada uma das plataformas suportadas cria o arquivo LIL (Loadable Implementation Library) de que o intermediário necessita para implementar a extensão definida pelo usuário.
cd install_dir\sample\extensions\nodes\ (Windows) cd install_dir/sample/extensions/nodes (plataformas Linux e 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
Compile e vincule o nó definido pelo usuário no Linux da seguinte forma, utilizando um compilador C suportado. Observe que as linhas foram divididas para melhorar a leitura. Digite cada comando como uma única linha 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 -limbdfplgEsses comandos criam o arquivo samples.lil que fornece objetos TransformNode e SwitchNode.
#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=-1Como alternativa você pode incluir estas duas linhas a seu arquivo pronto para exportá-lo, da seguinte maneira:
_CC_STEPS=-1 .EXPORT : _CC_STEPS
Compile e vincule o nó definido pelo usuário no z/OS da seguinte forma, utilizando um compilador C suportado:
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
Configure as permissões de arquivo da extensão definida pelo usuário para leitura e execução de grupo emitindo o seguinte comando:
chmod a+rx {output_dir}/SwitchNode.lil