Monday, September 20, 2010

Configurar DataSource [Hibernate + Oracle + Tomcat 6] aplicação c/ Spring Roo

Criar e configurar um aplicativo c/ Spring Roo para usar JPA c/ Hibernate no Oracle é muito simples. Pelo terminal no "prompt" do Roo, inicialmente, são 5 comandos:
$ mkdir projetoteste
$ cd projetoteste
$ roo    //assumindo que o roo ja estava instalado
$ project --toplevelPackage br.com.yaw
$ persistence setup --provider HIBERNATE --database ORACLE --username eder --password 123

Esse último comando vai gerar um warning com a informação de que não foi possível encontrar o jar do Oracle no repositório Maven, a instalação do driver será manual.

Na realidade o Roo define a conexão com o banco de dados dentro do aplicativo, veja os arquivos META-INF/spring/database.properties e META-INF/spring/applicationContext.xml.

Simples assim! Agora seria usar outros comandos para criar as entidades, controladores e as telas, executando por exemplo no Tomcat 6. Veja a demo do Roo.

Mas como utilizar um DataSource definido no Tomcat? Nesse wiki algumas dicas de como configurar o DataSource no Tomcat.

A forma mais dificil de configurar o DataSource no projeto é ir ao arquivo META-INF/spring/applicationContext.xml e substituir  a definição do bean dataSource [BasicDataSource] por:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/MeuOracleDS"/>
</bean>

Ou via "prompt" do Roo no comando persistence setup:
$ persistence setup --provider HIBERNATE --database ORACLE
   --username eder --password 123 --jndiDataSource jdbc/MeuOracleDS

http://twitter.com/edermag
http://www.yaw.com.br/

Tuesday, September 14, 2010

Consumir WebService com autenticação usando o wsimport

O wsimport é uma ferramenta bem simples, aquelas de linha de comando, disponibilizada no jdk. Sua função é criar a infra-estrutura necessária para "consumir" Web Services a partir do wsdl, sem muita dor de cabeça. Na realidade o wsimport gera o código baseado no JAX-WS resolvendo a burocracia para acionar o Web Service com o mínimo de esforço.

Um exemplo de como usar o wsimport:
wsimport -p br.com.yaw.ws -s src -d bin http://url.servico/xpto?wsdl

O parametro -p indica o pacote para a geração das classes java, -s o diretório dos fontes e -d conteúdo output (binário por exemplo). Por fim, o mais importante, a caminho do wsdl.

O código gerado não é complexo e depende só do jdk, sem a necessidade de outra API ou de algum container JEE. Simples assim, é só criar uma classe c/ main e com código acionando o webservice...

De forma geral o wsimport gera uma classe Service que representa o webservice no cliente, factory do Proxy que faz a comunicação c/ o EndPoint.
Um "pseudo-código" para consumir um catalogo de produtos seria:

CatalogoProdutosService service = new CatalogoProdutosService();
CatalogoProdutos proxy = service.getCatalogoProdutosPort();
List<Produtoto> produtos = proxy.getProdutos();

E se o EndPoint exige autenticação? Muito simples, o objeto Proxy (CatalogoProdutos é uma interface) também implementa BindingProvider que provê acesso ao protocolo e contexto vinculado. Através dela configuro o usuário e senha, o código ficaria:

CatalogoProdutosService service = new CatalogoProdutosService();
CatalogoProdutos proxy = service.getCatalogoProdutosPort();
//dados para o login 
((BindingProvider)proxy).getRequestContext()
     .put(BindingProvider.USERNAME_PROPERTY, "jose");
((BindingProvider)proxy).getRequestContext()
     .put(BindingProvider.PASSWORD_PROPERTY, "123");
List<Produtoto> produtos = proxy.getProdutos();

Para usar Web Service com Http(s) primeiro é necessário importar o certificado e alterar a url do wsdl.


http://twitter.com/edermag
http://www.yaw.com.br

Thursday, September 02, 2010

A participação da YaW no TDC2010

Nos dias 20, 21 e 22 de Agosto aconteceu a 4a Edição do The Developers Conference, o TDC2010, evento de desenvolvedores para desenvolvedores, organizado pela Globalcode. Nesse ano a Globalcode inovou trazendo variedade de assuntos com 13 trilhas, em parceria com outras Empresas/Grupos/Profissionais Independentes, aumentando o "menu" tornando o evento completo a um valor simbólico. E de quebra com transmissão online, favorecendo principalmente o pessoal fora de SP.

O evento foi incrível, uma mistura fantástica de assuntos e comunidades em uma vibe bem interessante com muita troca de informação e networking, além da chance de rever vários amigos, quem foi sabe o que estou falando. Pra quem não foi pode ter uma idéia do que rolou nos diversos posts resumindo o que rolou no TDC2010.

Um detalhe que tornou nossa (eu e o Rafael Nunes) participação ainda mais especial é que esse foi a nossa primeira participação como YaW. Apoiamos e participamos de várias palestras em diferentes trilhas como ouvintes e palestrantes trocando um pouco de nossa experiencia com a galera. Outro ponto foi que no TDC2010 apresentamos mais 10 demonstrações, afinal evento de desenvolvedores nada melhor que código.

Na sexta logo após a abertura do evento, apresentei a primeira palestra da Trilha de JavaEE falando sobre a evolução do JSF, melhorias e o amadurecimento da versão 2.0 com a possibilidade de adotar suítes de componentes customizadas. Fiz demonstrações com as suites PrimeFaces, RichFaces e ICEFaces todas incorporadas ao ScrumToys. Na sequência o Rafael apresentou como desenvolver com JSF no Google App Engine.


A tarde, na Trilha de Spring, apresentei palestra falando sobre opções de desenvolvimento RIA com o Spring Framework junto com o Rafael. Comentei sobre o GWT, pontos fortes e fracos, e de como ele poderia ser integrado ao Spring em mais de uma opção de arquitetura com uma demonstração usando GwtRPCController. O Rafael demonstrou como é possível integrar Adobe Flex com Spring MVC.


Depois disso, na Trilha Mobile, assisti a palestra do amigo Fernando Ribeiro contando um pouco dos desafios e as oportunidades desenvolvimento BlackBerry para o mercado Corporativo com muito bom humor e riqueza de conteúdo, característico do Fribeiro. Ainda na trilha Mobile, no fim do dia, rolou um painel com representantes das principais plataformas mobile e o ponto de vista de cada um em relação a oportunidades e inovação.

Já no sábado pela manhã, assisti algumas palestras na Trilha de NOSQL, como leigo no assunto estou naquela fase de descoberta e novidades. Valeu muito para adquirir um pouco mais de conhecimento além de pegar várias dicas e referências para estudo. Depois do almoço, na Trilha Java, apresentei uma palestra sobre JavaFX partindo de um ponto de vista divertido, aonde destrinchei um jogo de Quebra-Cabeças aonde as peças são montadas dinâmicamente a partir de uma imagem. Não poderia faltar algo mais "corporativo", demonstrei um CRUD puro com JavaFX, um outro exemplo de CRUD usando JPA reaproveitando uma estrutura em Java e por fim um exemplo de integração com serviço na Web no Google App Engine acessado via REST.


Depois assisti uma ótima palestra sobre linguagens dinâmicas na JVM, onde fui apresentado ao Quercus uma alternativa de integrar PHP com Java, apresentado pelo Jefferson Prestes. Pra fechar o dia uma passada rápida na Trilha de Ruby, e mais bate-papo com amigos que encontrei no evento.

Já no Domingo não estive presente fisicamente acompanhei o TDC2010 pelo twitter. Aliás a hash #TDC2010 foi um sucesso no twitter, ficamos até no TrendsBR, um ótimo foto on-line do evento outra oportunidade para quem não foi acompanhar o que estava rolando!

O TDC2010 foi único, gostei a definição/analogia que o Jorge Diz fez aqui. Deixou saudades!


http://www.yaw.com.br
http://twitter.com/edermag