Tratamento de Objetos Entre Conectores JAVA – WebIntegrator

Pessoal, conforme prometido, segue meu primeiro post, é um tutorial abordando como tratar objetos entre conectores, ou seja, exportar um objeto para a sessão do WI e outro lendo este objeto da sessão. O que me motivou a tentar fazer esse processo, foi um caso aqui no trabalho, onde eu consumia um WebService que me retornava um array de objetos e precisava usar esse objeto em outro momento dentro de outra pagina. Para resolver este problema eu criei um conetor que lia esse objeto exportado e montava um GRID JAVA(Posso fazer um outro tutorial explicando como usar essa GRID JAVA, em caso de pedidos 🙂 ) com o resultado do WebService. Bom, então vamos ao que interessa.

1 – Primeiro Passo
Primeiro vamos criar um projeto de teste, chamado projeto_objeto. (Assume-se que já saiba criar um projeto no WI):

imagem_1

Feito isto criaremos um projeto JAVA que conterá os 2 conectores, um sendo que exportará um objeto chamado  FRUTAS’ e outro conector que lerá esse objeto e mostrará na página.(Para criação do conector usaremos o NetBeans)

imagem_2

Selecione a opção Aplicação Java e clique em next.

imagem_3

Coloque o nome do projeto e clique em finalizar. Usaremos o nome ProjetoConector.

Crie a seguinte classe exportaobjeto que exportará nosso obejeto para a sessão e exportaobjetorecebe que recebe o objeto, todos no pacote br.com.projetoteste. Ficará na seguinte
disposição:

imagem_4

2- Vamos criar o conetor

Para que o WI reconheça um conector em seu projeto é necessário estender as seguintes interfaces em suas classes: InterfaceConnector, InterfaceParameters:

public class exportaobjetorecebe implements InterfaceConnector, InterfaceParameters{

}

Para corrigir o erro, faz-se necessário importar a lib do wi. Clique com o botão direito do projeto no netbeans, depois clicar no botão propriedades. Ao abrir uma janela, selecione bibliotecas, após clicar em Adicionar JAR/Pasta. Selecione a lib do WI que pode ser encontrada dentro do projeto criado pelo próprio WI(projeto_objeto).

imagem_5

Feito isto, clique na sugestão do NetBeans e importe os métodos abstratos das intefaces:
Dois métodos serão criados, o getOutputParameters() que exporta os parâmetros desejados.
Conforme exemplo a seguir:

   @Override
    public JavaParameter[] getOutputParameters() {
        JavaParameter[] out = new JavaParameter[1];
        out[0] = new JavaParameter("tmp.objeto", "Retorna Obejto");
        return out;
    }

E o getInputParameters() serve para ler os parâmetros que estão na sessão do WI. Podemos determinar os nomes do parâmetros de entrada, como no exemplo a seguir.

    @Override
    public JavaParameter[] getInputParameters() {
        JavaParameter[] in = new JavaParameter[1];
        in[0] = new JavaParameter("tmp.objeto", "Retorna Obejto");
        return in;
    }

Outro método criado e muito importante é o execute. Dentro dele é criada toda a lógica que precisamos, pois é o primeiro método que o WI executa em um conector.

    @Override
    public void execute(ExecuteParams ep) throws UserException {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

Feito isto, criaremos nosso bean que será o objeto a ser exportado, chamaremos de fruta com os seguintes campos, ds_nome, nr_preco, nr_peso.

public class fruta {
    private String ds_nome;
    private Double nr_preco;
    private Double nr_peso;

    /**
     * @return the ds_nome
     */
    public String getDs_nome() {
        return ds_nome;
    }

    /**
     * @param ds_nome the ds_nome to set
     */
    public void setDs_nome(String ds_nome) {
        this.ds_nome = ds_nome;
    }

    /**
     * @return the nr_preco
     */
    public Double getNr_preco() {
        return nr_preco;
    }

    /**
     * @param nr_preco the nr_preco to set
     */
    public void setNr_preco(Double nr_preco) {
        this.nr_preco = nr_preco;
    }

    /**
     * @return the nr_peso
     */
    public Double getNr_peso() {
        return nr_peso;
    }

    /**
     * @param nr_peso the nr_peso to set
     */
    public void setNr_peso(Double nr_peso) {
        this.nr_peso = nr_peso;
    }
}

Veremos que para exportar o objeto não será nenhum bicho de sete cabeças, faremos simplesmente instanciar nossa classe bean frutas, populá-la e chamar o método WIMap.putobj, conforme imagem a seguir:

    @Override
    public void execute(ExecuteParams ep) throws UserException {
        fruta f = new fruta();
        f.setDs_nome("MANGA");
        f.setNr_peso(1.0);
        f.setNr_preco(8.55);

        ep.getWIMap().putObj("tmp.objeto", f);
    }

Deste jeito o WI exportará o objeto fruta para a sessão do seu projeto WEB em uma variável chamada tmp.obejeto.

Agora para ler esse objeto é só fazer o processo contrário. Na classe exportaobjetorecebe leremos  essa variável tmp.objeto convertendo-a em nosso bean frutas, conforme imagem abaixo:

    @Override
    public void execute(ExecuteParams ep) throws UserException {
        fruta f = (fruta) ep.getWIMap().getObj("tmp.objeto");

        ep.getWIMap().put("tmp.ds_nome", f.getDs_nome());
        ep.getWIMap().put("tmp.nr_preco", String.valueOf(f.getNr_preco()));
        ep.getWIMap().put("tmp.nr_peso", String.valueOf(f.getNr_peso()));
    }

    @Override
    public boolean exit() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public JavaParameter[] getInputParameters() {
        JavaParameter[] in = new JavaParameter[1];
        in[0] = new JavaParameter("tmp.objeto", "Retorna Obejto");
        return in;
    }

Perceba que dessa vez usamos o método put do WI para exportar as variáveis do nosso objeto recebido da classe exportaobjeto.
Feito isto vamos compilar nosso projeto, gerar os .class e colocar dentro no nosso projeto WEB. O projeto final ficará na seguinte disposição:

imagem_4

Para jogar as classes compiladas em nosso projeto WEB é só copiar a raiz do pacote(br.com.projetoteste) e jogá-lo na pasta webapps/projetoteste/WEB-INF/classes. Caso a pasta classes não exista em seu projeto, crie-a. Ficará na seguinte disposição:

imagem_7

3- Reinicie o tomcat.

4- Executando o processo

Agora vamos fazer a chamada do conetor em uma pagina de teste que criaremos no WI.

Em uma pagina de teste selecione o Pré-Pagina. No Pré-Pagina existe uma opção Conetor Java, conforme imagem abaixo:

imagem_8

Na tela que irá se abrir, digite o caminho completo de sua classe no campo Nome da Classe, conforme imagem abaixo:

imagem_9

Volte para o pré-pagina e clique novamente em Conector Java. Faça o mesmo procedimento, porém para a classe exportaobjetorecebe.

imagem_14

Perceba que apareceu um campo em Parâmetros de Entrada, este campo será recebido do conector de cima, do qual exporta o objeto. Seu pré-página deverá ficar da seguinte maneira:

imagem_11

Agora clique na opção Editar HTML no WI e coloque os campos que são exportados do conector que lê o objeto. Ficando da seguinte maneira:

imagem_12

Agora basta apenas clicar em Vizualizar no WI.

imagem_13

Então é isso galera, espero que vocês tenham gostado do meu primeiro post, espero que seja de extrema ajuda para alguns e de estudo para outros, até o próximo post.

Anúncios