...registrar classes Java como plug-in | Início Anterior Próximo

...registrar classes Java como plug-in

O WebIntegrator oferece uma série de componentes configuráveis que ajuda o desenvolvedor no momento da implementação das regras de negócio da aplicação, tais como execução de comandos de consulta e atualização em SGBD, envio de e-mail, download, etc. Além dessas funcionalidades é oferecido ao desenvolvedor a possibilidade de criar seus próprios componentes de regras de negócio e integrá-los com o WebIntegrator através do uso de conectores Java, grids Java ou funções.
Para facilitar o processo de integração e uso de componentes baseados em conectores Java, grids Java ou funções foi idealizado o conceito de plug-in. Um plug-in consiste de um arquivo .jar onde podem estar empacotados num mesmo arquivo: conectores Java, grids Java ou funções, que serão automaticamente cadastrados no WI Builder de acordo com as informações de configuração presentes no arquivo plugins.xml que, obrigatoriamente, também deverá estar presente no arquivo .jar.
Não é necessário fazer algum tipo de modificação no código-fonte dos conectores Java, grids Java ou funções já existentes para que os mesmos possam ser cadastrados como plug-in, basta empacotá-los em um arquivo .jar e prover um arquivo plugins.xml.
Para exemplificar o registro de um arquivo de plug-ins vamos assumir que possuímos as seguintes classes a serem publicadas:

Tipo | Nome da classe Java | Parâmetros de entrada | Parâmetros de saída
Função

br.com.xpto.webintegrator.function.MyFunctionRandom
-
-
Conector Java
br.com.xpto.webintegrator.connector.MyConnector
tmp.param.in
tmp.param.out
Conector Java de pós-página
br.com.xpto.webintegrator.connector.MyPosConnector
tmp.param.in
tmp.param.out
Grid Java
br.com.xpto.webintegrator.grid.MyJavaGrid
tmp.param.in
tmp.param.error
Primeiramente vamos cadastrar a classe br.com.xpto.webintegrator.function.MyFunctionRandom como sendo a função myrandom. Toda classe Java quando registrada como função do WebIntegrator possui um id pelo qual essa classe poderá ser referenciada num projeto do WebIntegrator. O arquivo plugins.xml para a definição dessa função ficaria assim:
<?xml version="1.0" encoding="ISO-8859-1"?>
<REGISTER>
<NAMESPACE>xpto-plugins</NAMESPACE>
<FUNCTIONS>
<FUNCTION ID="myrandom" CLASS="br.com.xpto.webintegrator.function.MyFunctionRandom"/>
</FUNCTIONS>
</REGISTER>
Vejamos o que essas linhas querem dizer, a tag REGISTER é o nó-raiz do arquivo plugins.xml. A tag NAMESPACE indica o identificador sob o qual as classes Java cadastradas por esse plug-in ficaram associadas, cada arquivo .jar deve garantir que em seu arquivo plugins.xml a tag NAMESPACE esteja definida com um identificador único para aquele arquivo.
A tag FUNCTIONS agrupa o registro de cada uma das funções que devem ser feitos através da tag FUNCTION que possui os atributos ID e CLASS que informam, respectivamente, qual o id da função e qual a classe Java que está associada àquele id. Para fazer o registro de mais uma função bastaria definir uma outra tag FUNCTION dentro da tag FUNCTIONS. Todos os atributos da tag FUNCTION são de preenchimento obrigatório.
Uma característica interessante dos plug-ins é que os conectores ou grids Java registrados como tal aparecem listados como componentes de pré-página ou pós-página nas telas do WI Builder. O registro de um conector Java é feito através da tag PLUGIN onde são informados o título do conector, a classe Java, os parâmetros de entrada e os parâmetros de saída. Para o registro do conector br.com.xpto.webintegrator.connector.MyConnector o arquivo plugins.xml ficaria assim:
<?xml version="1.0" encoding="ISO-8859-1"?>
<REGISTER>
<NAMESPACE>xpto-plugins</NAMESPACE>
<FUNCTIONS>
<FUNCTION ID="myrandom" CLASS="br.com.xpto.webintegrator.function.MyFunctionRandom"/>
</FUNCTIONS>
<PLUGINS>
<PLUGIN PID="MyConnector">
<TITLE>Meu Conector</TITLE>
<CLASS>br.com.xpto.webintegrator.connector.MyConnector</CLASS>
<TYPE>CONNECTOR</TYPE>
<PARAMETERS>
<IN>
<PARAMETER ID="tmp.param.in">
<DESCRIPTION>Parâmetro de Entrada</DESCRIPTION>
<HINT>[DICA] Parâmetro de entrada do conector Meu Conector</HINT>
<VALUE>|tmp.param.in|</VALUE>
</PARAMETER>
</IN>
<OUT>
<PARAMETER ID="tmp.param.out">
<DESCRIPTION>Parâmetro de saída do conector Meu Conector</DESCRIPTION>
</PARAMETER>
</OUT>
</PARAMETERS>
</PLUGIN>
</PLUGINS>
</REGISTER>
Alguns detalhes da configuração acima merecem ser destacados. Primeiramente toda classe Java configurada como plug-in deve possuir um id único dentro do seu namespace que deve ser configurado através do atributo PID da tag PLUGIN. A tag TITLE contém o texto que será exibido na listagem de componentes do WI Builder que está associado a esse conector. A tag CLASS indica a classe Java do conector. A tag TYPE serve para indicar o tipo de plug-in que se está cadastrando, neste caso um conector, sendo que os valores possíveis são CONNECTOR, para indicar o registro de uma clase Java que seja um conector, e JAVAGRID para indicar o registro de uma classe Java que seja um grid Java. Os possíveis parâmetros de entrada e de saída que um plug-in venha a ter é feito através da tag PARAMETERS por meio das tags IN e OUT respectivamente.
O conector Java acima foi cadastrado de tal maneira que ele poderá ser utilizado tanto no pré-página quanto no pós-página, se existir algum conector a ser cadastrado que possua a restrição de apenas poder ser executado ou no pré-página ou no pós-página o desenvolvedor poderá utilizar a tag USEDIN indicando em qual evento de página ele será executado. Se a execução apenas puder ocorrer em um pré-página o conteúdo da tag dever ser PRE, se apenas puder ser executado em um pós-página o conteúdo deve ser POS.
A configuração do arquivo plugins.xml que segue abaixo inclui o cadastro do conector br.com.xpto.webintegrator.connector.MyPosConnector que apenas pode ser executado num pós-página.
<?xml version="1.0" encoding="ISO-8859-1"?>
<REGISTER>
<NAMESPACE>xpto-plugins</NAMESPACE>
<FUNCTIONS>
<FUNCTION ID="myrandom" CLASS="br.com.xpto.webintegrator.function.MyFunctionRandom"/>
</FUNCTIONS>
<PLUGINS>
<PLUGIN PID="MyConnector">
<TITLE>Meu Conector</TITLE>
<CLASS>br.com.xpto.webintegrator.connector.MyConnector</CLASS>
<TYPE>CONNECTOR</TYPE>
<PARAMETERS>
<IN>
<PARAMETER ID="tmp.param.in">
<DESCRIPTION>Parâmetro de Entrada</DESCRIPTION>
<HINT>[DICA] Parâmetro de entrada do conector Meu Conector</HINT>
<VALUE>|tmp.param.in|</VALUE>
</PARAMETER>
</IN>
<OUT>
<PARAMETER ID="tmp.param.out">
<DESCRIPTION>Parâmetro de saída do conector Meu Conector</DESCRIPTION>
</PARAMETER>
</OUT>
</PARAMETERS>
</PLUGIN>
<PLUGIN PID="MyPosConnector">
<TITLE>Meu Conector de Pós-Página</TITLE>
<CLASS>br.com.xpto.webintegrator.connector.MyPosConnector</CLASS>
<TYPE>CONNECTOR</TYPE>
<USEDIN>POS</USEDIN>
<PARAMETERS>
<IN>
<PARAMETER ID="tmp.param.in">
<DESCRIPTION>Parâmetro de Entrada</DESCRIPTION>
<HINT>[DICA] Parâmetro de entrada do conector Meu Conector de Pós-Página</HINT>
<VALUE>|tmp.param.in|</VALUE>
</PARAMETER>
</IN>
<OUT>
<PARAMETER ID="tmp.param.out">
<DESCRIPTION>Parâmetro de saída do conector Meu Conector de Pós-Página</DESCRIPTION>
</PARAMETER>
</OUT>
</PARAMETERS>
</PLUGIN>
</PLUGINS>
</REGISTER>
O registro de classes Java que representem um grid Java é semelhante ao registro de conectores Java com a particularidade que o valor da tag TYPE deve ser JAVAGRID. O outro detalhe é que como todo componente Grid Java apenas é executado em eventos de pré-página o desenvolvedor não precisará definir a tag USEDIN com o valor PRE pois isso é feito automaticmanete pelo sistema registrador de plug-ins. Logo abaixo segue o exemplo de como ficaria o nosso arquivo plugins.xml ao inserirmos a definição do grid Java br.com.xpto.webintegrator.grid.MyJavaGrid.
<?xml version="1.0" encoding="ISO-8859-1"?>
<REGISTER>
<NAMESPACE>xpto-plugins</NAMESPACE>
<FUNCTIONS>
<FUNCTION ID="myrandom" CLASS="br.com.xpto.webintegrator.function.MyFunctionRandom"/>
</FUNCTIONS>
<PLUGINS>
<PLUGIN PID="MyConnector">
<TITLE>Meu Conector</TITLE>
<CLASS>br.com.xpto.webintegrator.connector.MyConnector</CLASS>
<TYPE>CONNECTOR</TYPE>
<PARAMETERS>
<IN>
<PARAMETER ID="tmp.param.in">
<DESCRIPTION>Parâmetro de Entrada</DESCRIPTION>
<HINT>[DICA] Parâmetro de entrada do conector Meu Conector</HINT>
<VALUE>|tmp.param.in|</VALUE>
</PARAMETER>
</IN>
<OUT>
<PARAMETER ID="tmp.param.out">
<DESCRIPTION>Parâmetro de saída do conector Meu Conector</DESCRIPTION>
</PARAMETER>
</OUT>
</PARAMETERS>
</PLUGIN>
<PLUGIN PID="MyPosConnector">
<TITLE>Meu Conector de Pós-Página</TITLE>
<CLASS>br.com.xpto.webintegrator.connector.MyPosConnector</CLASS>
<TYPE>CONNECTOR</TYPE>
<USEDIN>POS</USEDIN>
<PARAMETERS>
<IN>
<PARAMETER ID="tmp.param.in">
<DESCRIPTION>Parâmetro de Entrada</DESCRIPTION>
<HINT>[DICA] Parâmetro de entrada do conector Meu Conector de Pós-Página</HINT>
<VALUE>|tmp.param.in|</VALUE>
</PARAMETER>
</IN>
<OUT>
<PARAMETER ID="tmp.param.out">
<DESCRIPTION>Parâmetro de saída do conector Meu Conector de Pós-Página</DESCRIPTION>
</PARAMETER>
</OUT>
</PARAMETERS>
</PLUGIN>
<PLUGIN PID="MyJavaGrid">
<TITLE>Meu Grid Java</TITLE>
<CLASS>br.com.xpto.webintegrator.grid.MyJavaGrid</CLASS>
<TYPE>JAVAGRID</TYPE>
<PARAMETERS>
<IN>
<PARAMETER ID="tmp.param.in">
<DESCRIPTION>Parâmetro de Entrada</DESCRIPTION>
<HINT>[DICA] Parâmetro de entrada do grid Java Meu Grid Java</HINT>
<VALUE>|tmp.param.in|</VALUE>
</PARAMETER>
</IN>
<OUT>
<PARAMETER ID="tmp.param.error">
<DESCRIPTION>Parâmetro de saída do grid Java Meu Grid Java</DESCRIPTION>
</PARAMETER>
</OUT>
</PARAMETERS>
</PLUGIN>
</PLUGINS>
</REGISTER>
Para fazer a publicação dessas classes como plug-ins empacote-as em um arquivo com extensão .jar juntamente com o arquivo plugins.xml sendo que esse arquivo deverá estar na raiz do arquivo JAR. O conteúdo do arquivo JAR para o nosso estudo de caso seria o que está sendo exibido abaixo:
No WI Builder acesse as opções do menu Opções e em seguida clique no ícone de cadastro de plug-ins identificado pela imagem . No campo Arquivo JAR indique o caminho do arquivo JAR que representa os plug-ins a serem instalados, a opção Global quando marcada indica que os plug-ins a serem instalados estarão disponíveis para todos os projetos que forem desenvolvidos pelo WI Builder caso você queira limitar a disponibilidade dos plug-ins a apenas alguns dos projetos disponíveis deverá ser a instalação especificamente em cada um dos projetos.
Após a instalação ou remoção de um arquivo de plug-ins é altamente recomendado que a(s) aplicação(ões) web a ele relacionada(s) seja(m) reiniciada(s).