Monday, January 21, 2013

Aplicações 3 camadas com o OpenSwing - parte 1

OpenSwing é um framework Java open source destinado principalmente ao o desenvolvimento de aplicações gráficas desktop. Ele reúne uma suíte de componentes visuais baseados na API Swing tradicional, porém seus componentes são um pouco mais avançados do que o Swing toolkit a medida em que eles provêem uma série de recursos adicionais - ou recursos prontos - visando facilitar e agilizar o desenvolvimento de aplicações comerciais.

Dentre esses recursos podemos citar o binding entre tabelas e formulários, e os objetos do modelo negócios; botões prontos para as funções de CRUD;   uma template que agiliza a crição de aplicções MDI (Multiple Document Interface); entre outros.

Para um exemplo mais detalhado sobre os recursos citados consulte a src demo do framework na página de download do mesmo. Thiago Vespa também exemplifica de maneira interessante esses recursos.

Desenvolvimento do lado do servidor

Embora os componentes para desenvovimento desktop sejam mais úteis e produtivos do que os componentes Swing tradicionais, eles não são, na minha opinião, o recurso mais interessante disponíbilizado pelo OpenSwing.

O recurso mais interessante na minha opinião é a possibilidade de desenvolver aplicações Swing com  processamento do lado do servidor de maneira muito simples. O programador sequer precisa utilizar diretamente as classes networking de Java, nem Servlets, para estabelecer essa conexão. Segue um projeto de exemplo passo-a-passo:

Faça download da versão 2.4.5 do OpenSwing em sourceforge.net/projects/oswing/files/oswing/.

Abra sua IDE favorita (estou utilizando NetBeans 7.2) e crie um projeto web chamado AplicaçãoServidor e outro projeto desktop chamado AplicacaoCliente. Para o projeto web utlizei o servidor Apache Tomcat 7.0.34. Observe a estrutura dos projetos recém criados:



Agora você deve adiconar ao classpath dos projetos as classes do framework OpenSwing. Elas estão no diretório build da pasta que você acabou de baixar, OpenSwing2.4.5.

Aplicação Web

O arquivo web.xml de sua aplicação web deve ficar como segue (para mais detalhes sobre a função de cada tag, consulte a documentação online em oswing.sourceforge.net/server.html):

    
    
        controller
        org.openswing.swing.server.Controller                    
        
            sessionIdGenerator
            org.openswing.swing.server.DefaultSessionIdGenerator
        
        
            logger
            org.openswing.swing.logger.server.ConsoleLogger
                
        
            objectsReceiver
            org.openswing.swing.util.server.HessianObjectReceiver
           
        
     connectionSource
            org.openswing.swing.server.PoolerConnectionSource
        
        1
    
    
    
        50
    
    
    
        
        controller
        /controller
                        
    

Agora faça o deploy de sua aplicação web. Em seguida acesse a seguinte url no seu browser: http://localhost:8082/AplicacaoServidor/controller (meu tomcat está na porta 8082). Se você visualizar a seguinte mensagem, sua aplicação foi publicada corretamente:




Na Parte 2 deste post daremos continuidade ao exemplo, estabelecendo a comunicação entre a aplicação cliente e apĺicação do lado do servidor.

Friday, January 18, 2013

Problemas na sugestão automática de "imports" no NetBeans 7.2

Para minha surpresa, recentemente percebi que a sugestão automática de imports no NetBeans 7.2 não estava mais funcionando para classes do pacote java.*. Por exemplo, caso eu digitasse:
class A implements Serializable{}
A única dica fornecida pela IDE era perguntar se desejava criar a interface Serializable no pacote atual, ou seja, faltava a sugestão deseja importar java.io.Serializable. Nos dias atuais ninguém quer ficar escrevendo declarações de import :)

Felizmente parece que o problema foi resolvido limpando o cache do NetBeans. No Linux, fechei a IDE e apenas executei o seguinte comando:
sudo rm -rf ~/.cache/netbeans/7.2/*
Ao abrir a IDE novamente, o recurso de importação automática voltou a funcionar corretamente para todos os pacotes.