sexta-feira, 11 de fevereiro de 2011

Aplicação SOA

Caso de Uso:

Tínhamos que buscar alguns dados de tabelas diferentes para utilizarmos em nosso aplicativo.
Para isso, fizemos um barramento SOA (que não vou postar por motivo de sigilo da empresa...) e conectamos este cliente a ele.

Problemas resolvidos com este código:
Swing: Utilização de tabelas dentro de abas, sem a utilização de containers.
Popular tabelas com array bidimensional de strings

SOA: Transportar strings entre o barramento e o Cliente.


-----------------------------------------------------------------------------------------------------------------



-----------------------------------------------------------------------------------------------------------------
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.encoding.XMLType;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class Unitizacao implements ActionListener{
   
    JFrame tela = new JFrame();
    JTextField TfOdex;
    JTable tbData1, tbData2, tbData3, tbData4, tbData5;
    JTextArea area6 = new JTextArea();
       
    public static void main(String args[]){
       
        // Cria o Objeto para tirar o swing de um método static
        Unitizacao u = new Unitizacao();
        u.run();
    }
   
    public void run(){
       
        // Tenta utilizar uma biblioteca de aparencia para o Swing
        try{
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        }catch(Exception e){
            area6.setText(e.getMessage());
        }
       
        // Layout null para posicionamento manual dos itens
        tela.setLayout(null);
       
        // INÍCIO GRUPO DE OBJETOS DO CABEÇALHO
       
        // Objeto do texto Odex
        JLabel LbOdex = new JLabel("ODEX");
        // Objeto Font para ajustar o tipo, estilo e tamanho da fonte
        Font t = new Font("Arial", Font.BOLD, 20);
        // Atribuindo o Objeto Font ao Objeto do texto Odex
        LbOdex.setFont(t);
     // ajustar posição do elemento no JPanel: (coluna, linha, largura, altura)
        LbOdex.setBounds(10, 40, 60, 30);
               
        // Objeto da caixa de diálogo
        TfOdex = new JTextField("");
        // ajustar posição do elemento no JPanel: (coluna, linha, largura, altura)
        TfOdex.setBounds(80, 40, 370, 30);
               
        // Objeto do botão Consultar
        JButton consulta = new JButton("Consultar");
        consulta.setBounds(480, 40, 120, 30);
        // Adiciona o listner ao Botão
        consulta.addActionListener(this);
        // Determina o comando que o listener recebe ao clicar no Botão
        consulta.setActionCommand("consultar");
       
        // Objeto do botão Sair
        JButton sair = new JButton("Sair");
        sair.setBounds(630, 40, 120, 30);
        sair.addActionListener(this);
        sair.setActionCommand("sair");
       
        // FIM DO GRUPO DE OBJETOS DO CABEÇALHO
       
        // INÍCIO DO GRUPO DE OBJETOS DE ABAS
       
        // Cria o Objeto do conjunto de Abas
        JTabbedPane tabelaDePaineis = new JTabbedPane(JTabbedPane.TOP);
        tabelaDePaineis.setBounds(0, 100, 800, 500); 
       
        // ABA 1
        // Objeto da Aba 1
        JPanel painel01 = new JPanel(null);
       
        // Objeto da Tabela
        tbData1 = new JTable();
        tbData1.setBounds(5,5,685,360);
        tbData1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
       
        // Crio o objeto do Scroll e coloco a tabela dentro dele.
        JScrollPane sc = new JScrollPane(tbData1);
        sc.setBounds(5,5,780,430);
        // Indica que a scroll bar vertical é necessária
        sc.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        // Indica que a scroll bar horizontal é necessária
        sc.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
       
        // Adiciona a Scroll (com a tabela dentro) no objeto da primeira aba.
        painel01.add(sc);
     
        // ABA 2
        JPanel painel02 = new JPanel(null);
       
        tbData2 = new JTable();
        tbData2.setBounds(5,5,685,360);
        tbData2.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
       
        JScrollPane sc2 = new JScrollPane(tbData2);
        sc2.setBounds(5,5,780,430);
        sc2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
        sc2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
               
        painel02.add(sc2);
       
        // ABA 3
       
        JPanel painel03 = new JPanel(null);
       
        tbData3 = new JTable();
        tbData3.setBounds(5,5,685,360);
        tbData3.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
       
        JScrollPane sc3 = new JScrollPane(tbData3);
        sc3.setBounds(5,5,780,430);
        sc3.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
        sc3.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
               
        painel03.add(sc3);
       
        // ABA 4
       
        JPanel painel04 = new JPanel(null);
        tbData4 = new JTable();
        tbData4.setBounds(5,5,685,360);
        tbData4.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
       
        JScrollPane sc4 = new JScrollPane(tbData4);
        sc4.setBounds(5,5,780,430);
        sc4.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
        sc4.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
               
        painel04.add(sc4);
       
        // ABA 5
       
        JPanel painel05 = new JPanel(null);
        tbData5 = new JTable();
        tbData5.setBounds(5,5,685,360);
        tbData5.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
       
        JScrollPane sc5 = new JScrollPane(tbData5);
        sc5.setBounds(5,5,780,430);
        sc5.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
        sc5.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
               
        painel05.add(sc5);
       
        // ABA 6 - LOG
       
        JPanel painel06 = new JPanel(null);
       
        area6.setBounds(5,5,685,360);
         
        JScrollPane sc6 = new JScrollPane(area6);
        sc6.setBounds(5,5,780,430);
        sc6.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
        sc6.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
       
        painel06.add(sc6);
       
        // adiciona as abas no objeto de abas
        tabelaDePaineis.addTab("Informações",painel01);
        tabelaDePaineis.addTab("Detalhes",painel02);
        tabelaDePaineis.addTab("MaterialUC",painel03);
        tabelaDePaineis.addTab("MaterialCOM",painel04);
        tabelaDePaineis.addTab("Serviços",painel05);
        tabelaDePaineis.addTab("Log",painel06);
       
        // ADICIONANDO OS OBJETOS AO FRAME
       
        tela.add(LbOdex);
        tela.add(TfOdex);
        tela.add(consulta);
        tela.add(sair);
        tela.add(tabelaDePaineis);
               
        // SETANDO DETALHES DO FRAME
        tela.setTitle("Unitização"); 
        tela.setSize(800, 600);
        tela.setBounds(100,100, 800, 600);
        tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        tela.setResizable(false);
        tela.setVisible(true);   
    }
   
    public void actionPerformed(ActionEvent e){
        if(e.getActionCommand().equals("consultar")){
           
            String[][] resposta = null;
           
            // chama o método de conexão, passando o método que será invocado.
            resposta = conecta("Informacoes");
            // ajusta a tabela com o array retornado pela conexão.
            tbData1.setModel(new DefaultTableModel(resposta, new String[]{"1","2","3","4","5","6","7","8","9","10","11","12","13"}));
           
            resposta = conecta("Detalhes");
            tbData2.setModel(new DefaultTableModel(resposta, new String[]{"1","2","3","4","5","6","7","8","9","10","11","12","13"}));
           
            resposta = conecta("MaterialUC");
            tbData3.setModel(new DefaultTableModel(resposta, new String[]{"1","2","3","4","5","6","7","8","9","10","11","12","13"}));
           
            resposta = conecta("MaterialCOM");
            tbData4.setModel(new DefaultTableModel(resposta, new String[]{"1","2","3","4","5","6","7","8","9","10","11","12","13"}));
           
            resposta = conecta("Servicos");
            tbData5.setModel(new DefaultTableModel(resposta, new String[]{"1","2","3","4","5","6","7","8","9","10","11","12","13"}));

        }  
        if(e.getActionCommand().equals("sair")){
            System.exit(0);
        }
    }
   
    public String[][] conecta(String operacao){
       
        String[][] resposta = null;
        Service  service  = new Service();
        Call call;
        String odex = TfOdex.getText();
       
        try {

            call = (Call) service.createCall();
           
            // Atribuindo a URL do Servico
            // Importante: é necessário um serviço SOA para conexão
            call.setTargetEndpointAddress(new java.net.URL("<<INSERIR AQUI A URL DO BARRAMENTO SOA IMPLEMENTADO>>"));

            // Definindo o metodo a ser invocado
            call.setOperationName(operacao);

            // Definindo os parametros de entrada
            call.addParameter("odex", XMLType.XSD_STRING, ParameterMode.IN);

            // Definindo o tipo do parametro de retorno
            call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_ARRAY);
           
            // Invocando o servico
            resposta = (String[][]) call.invoke(new Object[] {odex});

        } catch (Exception ex) {
           
            String a = "Serviço "+operacao+" "+ex.getMessage();
            area6.setText(a);
        }
        return resposta;
    }
}

Nenhum comentário:

Postar um comentário