Antes de começar
Você deve ter uma extensão definida pelo usuário escrita em C. Pode ser um dos nós de amostra fornecidos descritos em Arquivos de Nós Sample, o analisador de amostra descrito em Arquivos de Analisadores de Amostra ou um nó ou um 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ó de Entrada em C ou de 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 Studio Versão 7.1
Para AIX, VisualAge C++ para AIX Versão 5.0.2
Para HP-UX, o HP ANSI C 03.37
Para Linux, gcc Versão 2.95.3
Para Solaris, o SparcCompiler SC6.2
Para z/OS, z/OS Versão 1.3 ou Versão 1.4
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 <java_home>/jre/lib/PA_RISC2.0 \ -L <java_home>/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/gcc -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/gcc -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/gcc -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/gcc -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/gcc -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. Se ocorrer uma exceção no nó, ela não será manipulada corretamente e o intermediário abortará e será reiniciado.
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\) \ -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\) \ -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\) \ -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\) \ -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 \ -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