Configurando Tomcat 6 no Netbeans

Esse é um post para quem nunca configurou um servidor Web no Netbeans. Se você já fez isso, dê uma olhada em outros artigos sobre o Tomcat ou Netbeans :) .

Faça o download do Tomcat 6 no endereço: http://tomcat.apache.org/download-60.cgi e descompacte em uma pasta (escolha a versão zip ou tar.gz). Abra o Netbeans e vá na Aba Services (Window, Services). Clique com o botão direito em Servers, Add Server… Escolha Tomcat 6 e clique em Next.

Add Server Instance

Add Server Instance

Informe a localização do seu Tomcat, um usuário e uma senha e clique em Finish. Um novo servidor deve ter sido adicionado. Para alterar as configurações de inicialização e porta você pode clicar com o botão direito no servidor criado e selecionar Properties.

Servers

Servers

Você também tem a opção de editar o arquivo server.xml ou visualizar o log do servidor além de parar e iniciar o Tomcat em modo de profiling e debug. Para associar um projeto existente ao Tomcat é só clicar com o botão direito, Properties, Run e escolher o respectivo servidor.

Project Properties - blogsample

Project Properties - blogsample

Para outros servidores o processo é semelhante. Bem simples… :) Qualquer dúvida é só avisar.

Client JAX-RPC no Netbeans 6.9

O JAX-RPC é uma API que permite a invocação serviços web definido por um arquivo WSDL. Na sua nova versão foi renomeada para JAX-WS. O motivo da substituição do nome vai além da possível confusão de RPC com Webservices. Os detalhes da mudança do nome você pode encontrar aqui: http://weblogs.java.net/blog/kohlert/archive/2005/05/jaxrpc_20_renam.html

O Netbeans possui um plugin para JAX-WS, mas em alguns casos você pode precisar utilizar a versão antiga (o JAX-RPC) devido ao formato da definição de serviço especificado e ao tentar utilizar no Netbeans você pode receber o seguinte erro:

You must download JAX-RPC support plugin to create a JAX-RPC client

New Web Service Client

New Web Service Client

Ao acessar a seção de plugins, o plugin para JAX-RPC não existe. Para instalá-lo é necessário utilizar um update center de desenvolvimento que é construído periodicamente pelo hudson dos projetos do Netbeans. Vamos ao passo a passo. Abra o Netbeans, vá no menu Tools, Plugins, Settings, Add.

Plugins

Plugins

No nome coloque: “NetBeans Última Versão de Dev” e na URL coloque: http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/nbms/updates.xml.gz

Pressione OK. Vá em Available Plugins e selecione JAX-RPC Web Services (que existe agora). Clique em Install. Na próxima tela, clique em Next, concorde com os termos se deseja prosseguir e clique em Install.

NetBeans IDE Installer

NetBeans IDE Installer

Clique em Finish e Close. Crie um novo projeto Java. No novo projeto criado, clique com o botão direito, New, Other, Web Services, Web Service Client, Next. Selecione o WSDL, informe o pacote e clique em Finish. Aguarde alguns segundos e as classes geradas ficarão disponíveis em Generated Sources (jax-rpc).

IDBIPoc - NetBeans IDE 6.9.1

IDBIPoc - NetBeans IDE 6.9.1

Aí é só criar um classe Java para utilizar o que foi criado. Se você quiser pode testar o serviço acessando o nó Web Service References na aba Projects.

Test Web Service Operation

Test Web Service Operation

Ou alterar as propriedades do cliente de Web Service criado:

Project Properties - IDBIPoc

Project Properties - IDBIPoc

Aplicação completa JME com LWUIT e Floggy

Hoje estou disponibilizando para todos o acesso ao fonte de uma aplicação que a gente fez em apenas em alguns dias… para ser sincero código mesmo foi feito em apenas 4 dias (ou melhor 4 noites), tivemos mais três dias para escolha do nome,  um dia para definição da equipe, definição de logotipo e definições do caso de uso e 2 dias eu descansei e trabalhei em outras coisas… Então foram 10 dias (somente tempo livre) contando todas as etapas para a aplicação completa. A idéia genial do projeto surgiu do Egberto, alguns casos de uso e o vídeo também foi feito por ele,  testes, casos de uso, colaboração com idéias e algumas imagens como o logotipo foram feitos pelo Éver. E eu fiz o código.

Queríamos participar do concurso da Nokia, mas não deu tempo de assinar a aplicação e ela não ficou como queríamos, então não ganhamos, mas valeu como esperiência. Como estávamos prevendo o desenvolvimento com mais gente e acabou não dando certo, eu adotei uma estrutura de pacotes semelhante ao desenvolvimento web, já que a maioria que entrou no projeto vinha desse contexto e não de desenvolvimento mobile. O código ainda tem alguns bugs, não está limpando alguns campos, mas a aplicação está funcional, embora não esteja otimizada. Tem também alguns erros de inglês no vídeo… vamos corrigir depois :)

Utilizamos LWUIT e Floggy de framework para a aplicação. Abaixo está a descrição do projeto.

GREENHOUSE

Sua consciência ecológica!


“O efeito estufa é gerado pela derrubada de florestas, lançamento de gases poluentes na atmosfera, principalmente os que resultam da queima de combustíveis fósseis. Esse efeito ocasiona o super aquecimento do nosso planeta. O aplicativo greenhouse será sua consciência ecológica, informando a você a quantidade de árvores necessárias para consumir o CO2 produzido, de acordo com o meio de transporte automotivo.”

O projeto foi feito com Netbeans 6.9. O código fonte encontra-se disponível para download pelo subversion: http://gvlabs.org/svn/mobile/Greenhouse/

Se você deseja somente instalar no seu celular, segue o download da aplicação: http://www.thiagovespa.com.br/apps/Greenhouse.zip

Se você não sabe utilizar o subversion no Netbeans, aqui tem um breve tutorial: http://www.thiagovespa.com.br/blog/2010/09/20/subversion-no-netbeans/

Instalação do ambiente:

  1. Fazer download do Netbeans Completo (Já vem com o JME) e instalar. Quem tiver interesse pode instalar o JME SDK 3.0 também: http://java.sun.com/javame/downloads/sdk30.jsp
  2. Abrir o Netbeans, ir em Tools, Plugins e atualiza-lo.
  3. Fazer o download do Perl: http://strawberry-perl.googlecode.com/files/strawberry-perl-5.12.0.1.msi e instalar
  4. Reiniciar o computador
  5. Baixar o SDK da Nokia Symbian^3 0.8: http://www.forum.nokia.com/info/sw.nokia.com/id/ec866fab-4b76-49f6-b5a5-af0631419e9c/S60_All_in_One_SDKs.html
  6. Instalar o SDK da Nokia. A partir de agora você já pode abrir o emulador da Nokia
  7. Abrir o Emulador e configurar data e hora. Pode usar o teclado do computador, não precisa usar somente o teclado do celular.

Configuraçõe Adicionais – Netbeans

Configurar o emulador da Nokia

  1. Tools, Java Platform, Add Platform, Java ME MIDP Platform, Next
  2. Verificar se encontrou o emulador da Nokia, Next
  3. Finish

Configurar a lib do LWUIT

  1. Faça o Download do LWUIT em: http://java.sun.com/javame/technology/lwuit/ no botão Download LWUIT
  2. Descompacte ele em uma pasta
  3. Vá no netbeans, Tools, Libraries
  4. New Library…, Library Name: LWUIT, Library Type: Class Libraries
  5. Add Jar/Folder, Escolher o LWUIT.jar que está na pasta lib do LWUIT, Apertar Ok

Configurar a lib do Floggy

  1. Faça o Download do Floggy em: http://floggy.sourceforge.net/download.html na seção Main Bundle
  2. Descompacte ele em uma pasta
  3. Vá no netbeans, Tools, Libraries
  4. New Library…, Library Name: Floggy, Library Type: Class Libraries
  5. Add Jar/Folder, Escolher o floggy-persistence-framework.jar que está na pasta lib do Floggy, Apertar Ok
  6. Abrir o arquivo build.xml (Visualizar por Window, Files) e mudar a propriedade floggy.path para o caminho da instalação do floggy (Favor não commitar o build.xml com suas alterações)

Configurar o Checkstyle (somente para commiters)

  1. Ir em Tools, Plugin
  2. Settings, Add
  3. Name: Checkstyle, URL: http://www.sickboy.cz/checkstyle/autoupdate/autoupdate-2.xml – OK
  4. Avaliable Plugins, Reload Catalog
  5. Selecionar Checkstyle beans plugin e library, Install
  6. Confimar as opções até o final

Espero que gostem. Quem quiser contribuir para melhorar esse projeto é só me avisar que eu libero acesso como commiter no repositório.

Subversion no Netbeans

Esse é um artigo simples para quem nunca mexeu com Subversion, mas tem curiosidade de saber como funciona e o que é. Aprendendo uma vez em uma ferramenta como Netbeans, fica fácil utilizar em outras ferramentas como o Subclipse (instalação explicada aqui), Subversive, Tortoise, RapidSVN, … Os nomes e conceitos são os mesmos para qualquer ferramenta.

O Subversion ou SVN para os íntimos :) é um sistema de controle de versões (revisões). O objetivo dele é controlar versões de documentos e códigos-fonte, dessa forma, o código fica centralizado em um servidor permitindo verificar um histórico de quem alterou algum arquivo, restaurar versões anteriores, é excelente para o trabalho em equipe distribuídas e permite criar diversos ramos (branches) de desenvolvimento. No wikipedia tem uma breve explicação sobre SVN. Recomendo a leitura desse artigo para quem quer aprender Subversion sem o uso de ferramentas gráficas.

Você vai precisar do Netbeans e de um repositório de Subversion. Caso não consiga nenhum repositório gratuito, fale comigo que eu arrumo pra você. Para colocar algum projeto no repositório é só clicar com o botão direito no projeto, Versioning, Import into Subversion Repository, informe a url do repositorio, o usuário e a senha. Clique em Next.

Se por acaso você receber a seguinte mensagem:

==[IDE]== Sep 20, 2010 11:58:17 AM Connecting to Subversion Repository…
Authorization failed
svn: OPTIONS of ‘http://www.thiagovespa.com.br/svn/samples’: authorization failed: Could not authenticate to server: rejected Basic challenge (http://www.thiagovespa.com.br)

Você deve ser um  usuário de Ubuntu. Existe um bug ainda em aberto sobre isso: https://bugs.launchpad.net/ubuntu/+source/subversion/+bug/473139

No bug aberto explica como resolver, mas a forma mais rápida que encontrei foi digitar: svn checkout ${endereco_svn} e informar o usuário e senha e milagrosamente o Subversion começa a funcionar no Netbeans.

Informe uma pasta do repositório para o projeto ou aceite a sugerida e escreva alguma descrição e clique em Next. Marque os arquivos que deseja enviar (commitar) para o servidor e clique em Finish.

Import

Import

Projeto já no repositorio. Para baixar as alterações de outros usuários, é só clicar com o botão direito no projeto, Subversion, Update. Para efetivar suas alterações no servidor, clicar com o botão direito no arquivo alterado ou projeto e selecionar a opção Commit, informar o que foi alterado e clicar em Commit.

Commit

Commit

Todas as outras ferramentas de Subversion utilizam o mesmo conceito de Import, Update e Commit. Existem outros recursos interessantes, como o histórico (botão direito, Subversion, Search History). Permite ver as diferenças entre versões entre outras opções. Qualquer dúvida é só avisar.

Testando o OpenSwing

Um amigo meu me falou de um framework que ele ouviu falar muito bem para aplicações desktops chamando OpenSwing. Fiquei curioso e resolvi testar. Segundo o site, o OpenSwing é um conjunto de componentes gráficos avançados de código aberto baseados no Swing. Além disso, é um framework com suporte a binding entre o modelo de dados e componentes baseado em MVC. Parece promissor.

Baixei o Netbeans 6.8 completo (as versões 6.9.x e 7.0 estão com problemas ao editar a parte gráfica) e o framework. Instalei o Netbeans e descompactei o OpenSwing. Apesar da versão no site ser recente, a documentação está bastante desatualizada. O Netbeans utilizado na documentação é o 4.1… muito antigo. Pela especificação, os componentes seguem os padrões JavaBeans, portanto creio que não deva ser um problema para todas as versões do Netbeans e outras IDEs. Vamos aos passos para configuração.

Inicie o Netbeans, crie um novo projeto: clique em File, New Project, Java Application, Next. Eu não selecionei o Java Desktop Application porque ele utiliza o Swing Application Framework JSR-296 (não é o Swing!). Esse framework está inativo pela JCP. Em Project Name, coloque um nome, no meu caso coloquei: TestOpenSwing. Desmarque a opção de criar uma classe Main (Create Main Class). Clique em Finish.

Selecione Tools, Libraries, New Library. Coloque um nome, como OpenSwing e pressione OK. Clique em Add JAR/Folder. Selecione todos os jars da pasta build do OpenSwing e pressione OK.

Library Manager

Library Manager

Biblioteca configurada! Agora vamos adicionar os componentes à palheta. Selecione Tools, Palette, Swing/AWT Components. Clique em New Category e nomeie: OpenSwing. Selecione a categoria criada e clique Add from Library. Selecione OpenSwing, Next, marque todos, Next, selecione OpenSwing, Finish e Close.

Palette Manager

Palette Manager

Outra configuração recomendada é alterar o comportamento do designer do Netbeans ao trabalhar com grid control. Para isso, selecione Tools, Options, Miscellaneous, GUI Builder, Altere o Layout Generation Style para Standard Java 6 Code e pressione OK. Configurações na IDE feitas, vamos à configuração do Projeto e criação de uma aplicação exemplo. Clique com o botão direito no seu projeto, Properties, Libraries, Add Library, OpenSwing, Add Library, Ok.

Project Properties

Project Properties

Vamos criar um frame MDI. Para isso é necessário criar uma classe que implemente a interface MDIController e pronto. Segue o código e o screenshot abaixo:

package br.com.thiagovespa.samples.openswing;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import org.openswing.swing.internationalization.java.BrazilianPortugueseOnlyResourceFactory;
import org.openswing.swing.internationalization.java.Language;
import org.openswing.swing.mdi.client.ClientFacade;
import org.openswing.swing.mdi.client.MDIController;
import org.openswing.swing.mdi.client.MDIFrame;
import org.openswing.swing.mdi.java.ApplicationFunction;
import org.openswing.swing.tree.java.OpenSwingTreeNode;
import org.openswing.swing.util.client.ClientSettings;

/**
* Sample App
* @author Thiago Galbiatti Vespa
*/

public class MainApplicationMDI implements MDIController {

public MainApplicationMDI() {
try {
Properties props = System.getProperties();
ClientSettings clientSettings = new ClientSettings(new BrazilianPortugueseOnlyResourceFactory(props, false), new Hashtable());
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
MDIFrame mdi = new MDIFrame(this);
} catch (ClassNotFoundException ex) {
Logger.getLogger(MainApplicationMDI.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(MainApplicationMDI.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(MainApplicationMDI.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(MainApplicationMDI.class.getName()).log(Level.SEVERE, null, ex);
}
}

public void afterMDIcreation(MDIFrame frame) {
}

public String getAboutImage() {
return null;
}

public String getAboutText() {
return "Esse software foi feito por Thiago Galbiatti Vespa\n"
+ "para demonstrar o uso do Open Swing";
}

public DefaultTreeModel getApplicationFunctions() {
DefaultMutableTreeNode root = new OpenSwingTreeNode();
DefaultTreeModel model = new DefaultTreeModel(root);
ApplicationFunction node1 = new ApplicationFunction("Primeira função", "primeira", "men.gif", null, "Esse botão executa a primeira função");
ApplicationFunction node2 = new ApplicationFunction("Segunda função", "segunda", "appicon.gif", null, "Esse botão executa a segunda função");
ApplicationFunction node2_1 = new ApplicationFunction("Função interna", "interna", "men.gif", null, "Esse botão executa a função interna");
node2.add(node2_1);
root.add(node1);
root.add(node2);
return model;
}

public ClientFacade getClientFacade() {
throw new UnsupportedOperationException("Not supported yet.");
}

public int getExtendedState() {
return JFrame.MAXIMIZED_BOTH;
}

public ArrayList getLanguages() {
ArrayList list = new ArrayList();
list.add(new Language("PT_BR", "Português do Brasil"));
return list;
}

public String getMDIFrameTitle() {
return "Aplicação Exemplo do Open Swing";
}

public void stopApplication() {
System.exit(0);
}

public boolean viewChangeLanguageInMenuBar() {
return true;
}

public boolean viewFileMenu() {
return true;
}

public boolean viewFunctionsInMenuBar() {
return true;
}

public boolean viewFunctionsInTreePanel() {
return true;
}

public JDialog viewLoginDialog(JFrame parentFrame) {
return null;
}

public boolean viewLoginInMenuBar() {
return false;
}

public boolean viewOpenedWindowIcons() {
return true;
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MainApplicationMDI();
}
});
}
}

Aplicação Exemplo do OpenSwing

Aplicação Exemplo do OpenSwing

Esse é um exemplo simples, para exemplos completos, consulte a pasta srcdemo do OpenSwing.