terça-feira, 30 de março de 2010
Ginga-J: interatividade em nossa TV, não perca essa oportunidade!
Você que é desenvolvedor Java ou gostaria de ter interatividade em nossa TV, não perca essa oportunidade!
Agora chegou a hora da comunidade mostrar a força na votação da ABNT.
O Fórum do Sistema Brasileiro de TV Digital Terrestre (SBTVD), trabalhando com vários seguimentos da indústria e universidades brasileiras, criou a importante normatização para especificação da TV Digital.
Um processo que esta sendo finalizado com a votação para aprovação da norma brasileira Ginga-J na Consulta Pública da ABNT.
Passos para a votação (com base no post do Dimas Oliveira da Sun / Oracle http://dimas4u.multiply.com/journal/item/147/Vote_Ginga):
1. Acesse o link http://www.abntonline.com.br/consultanacional/default.aspx
2. Será apresentada uma lista de CB . Escolha ABNT - CEE85 - Televisão Digital
3. O projeto da Norma 06 Vol. 4 e a errata N06 Vol. 1 serão apresentados;
4. Um cadastro de email e senha será requisitado. Com o cadastro feito, você estará apto a votar.
5. Vote com a opção "Aprovado sem restrição".
Lembrando que houve aprovação histórica do Ginga por completo (e do Ginga-J), na União Internacional de Telecomunicações (ITU-T).
O ISDB-T (Integrated Services Digital Broadcasting Terrestrial) além do Brasil o padrão já foi adotado pelo Equador, Peru, Argentina, Chile e Venezuela. Outros países como Uruguai, Honduras, El Salvador, Costa Rica, Cuba , Moçambique e África do Sul estão em negociações para adoção do padrão.
PS: Acompanhe também a lista de discussão do SouJava sobre TV Digital e a Hash #voteginga no Twitter.
Carlos Fernando Gonçalves
JUG Leader Java Noroeste
www.javanoroeste.com.br
http://twitter.com/javanoroeste
http://www.twitter.com/mercuriocfg
quarta-feira, 24 de março de 2010
2º Bate Papo do SP-GTUG - Divulgação
Para aqueles que já estiveram presentes nas atividades do SP-GTUG (encontros ou bate papos na Globalcode), e para os que ainda não puderam estar presentes, teremos um novo bate papo acerca de mais duas tecnologias do Google: AdSense e Python no GAE. Este será o nosso segundo bate papo do SP-GTUG, nos mesmos moldes dos minicursos da Globalcode.
Local e data
Conteúdo das apresentações
Resumo: Python é uma linguagem considerada frugal, simples, sem ser simplória! Entenda como construir algoritmos ninjas com essa linguagem, adotada pela Google e pelo MIT. Veremos muito, muito código, desde algoritmos clássicos até tutoriais do Google App Engine. A palestra é baseada nos seguintes livros: Learning Python, 4rd ed, Head First Programming e Programming Google App Engine. Utilizo estes livros nas disciplinas que ministro na FATEC e vou levá-los para quem quiser dar uma olhada. Por coincidência todos foram lançados em novembro do ano passado!
Ministrada por: Fernando Masanori (http://www.google.com/profiles/fmasanori)
Tomando como "gancho" a apresentação sobre programação Python, que será ministrada pelo "Masa", o SP-GTUG está iniciando um projeto para gerenciar as atividades do grupo. Ele está sendo escrito em Python e rodará no AppEngine. Este projeto foi iniciado pelo Robson Dantas e no momento está angariando colaboradores (!). Faça parte da lista de discussão do SP-GTUG e tenha acesso a mais informações.
Portanto...
Se você ficou interessado em aprender ou ter noções de Python, conhecer o pessoal do grupo que já programa nessa linguagem, conhecer mais sobre Python no GAE ou participar de projetos envolvendo ambos não perca a oportunidade de estar nesse bate papo de sábado!
Até lá e confirme sua presença!
Rodrigo Ribeiro
http://templariodatecnologia.wordpress.com
Conheça e faça parte do SP-GTUG!
Vocês conhecem (ou não) alguma tecnologia do Google ou tem interesse em conhecer outras? Querem estar por dentro das novidades sobre Android, AdSense/AdWords, GAE, GWT, Maps e outras tecnologias do Google?
Então tomem ciência da existência do SP-GTUG (Grupo de Usuários de Tecnologia Google de São Paulo). Nesse grupo discutimos as novidades das tecnologias do Google por meio de bate-papos, encontros, apresentações, lista de discussão e projetos. Abaixo estão mais informações e esclarecimentos para que vocês se sintam "encorajados" a participar das iniciativas.
Mas, o que é o SP-GTUG e como surgiu?
A idéia para formação de um GTUG em SP partiu de algumas pessoas presentes no Google Developer Day 2009. Victor B. Vieira, André Pantalião e outros foram os idealizadores do SP-GTUG, que era de imprescindível existência para uma cidade como São Paulo, pelo seu tamanho, poder econômico e tecnológico que são indiscutíveis. Outros grandes estados do Brasil, como Minas Gerais, Santa Catarina e Rio de Janeiro já tinham seus GTUG’s formados e com uma comunidade em crescimento. São Paulo não podia ficar de fora!
Quais foram as atividades do grupo até agora?
Até o momento o grupo já organizou 3 reuniões presenciais (2 encontros para geração de discussões e idéias para o crescimento do grupo e um bate-papo com apresentações, no estilo dos minicursos da Globalcode), fora as discussões e disseminação de material técnico e links informativos pela lista de discussão. Mantemos um blog para que interessados escrevam artigos técnicos e estamos "bolando" projetos para "por a mão na massa" em algumas tecnologias do Google (programação em Python no GAE, por exemplo). Abaixo temos uma foto do pessoal presente na primeira reunião do grupo, em 15/08/09, na Globalcode.
As atividades principais então se resumem nos seguintes tópicos:
- Encontros (pelo menos um por mês);
- Compartilhamento de conhecimento por:
- Apresentações;
- Mini Cursos;
- Produção de conteúdo:
- Publicação de Artigos;
- Desenvolvimento de aplicações, para servirem de exemplos.
Como faço para participar?
Nossos encontros e bate-papos tem em média a presença de 20 a 30 pessoas. Sabemos que existem muito mais pessoas interessadas em conhecer, participar ou contribuir em alguma tecnologia do Google.
Você é um deles? Tem interesse em participar das "causas" do nosso grupo? Então disponha-se a participar dos bate papos que estão por vir ! Assim teremos mais “especialistas” e interessados dispostos a trocar/gerar conhecimento.
A participação de mais colaboradores criando conteúdo no blog, participando das reuniões, enviando dicas na lista de discussão e criando projetos Open Source é o que levará o SP-GTUG a frente. Então, faça a sua inscrição e participe da lista de discussão do SP-GTUG. Fique por dentro das atividades e dê suas opiniões também!
Vejo vocês no grupo e até mais!
Rodrigo Ribeiro
http://templariodatecnologia.wordpress.com
CInTeQ 2010: Rex Black e testes ágeis
domingo, 21 de março de 2010
Aplicação web com Spring no Cloud Foundry
Pude notar que o Cloud Foundry é uma ferramenta que permite a criação e configuração de uma máquina virtual (VM) na AWS com apenas alguns cliques na interface administrativa. A VM criada pelo CF é composta por um Linux da distribuição CentOS, um Apache Web Server, um SpringSource tc Server (Tomcat adaptado) e uma instância de MySQL. Já o AWS é quem hospeda a VM totalmente configurada pelo CF. Também é possível criar diferentes máquinas virtuais diretamente na interface administrativa do AWS.
Tudo começa com a criação de uma conta no AWS e a indicação de um cartão de crédito para as cobranças. Após aguardar até 24h para confirmação do número do cartão, o AWS disponibiliza o acesso à interface administrativa. Através desta interface torna-se possível criar uma VM com qualquer um dos sistemas operacionais disponíveis (CentOS, Windows, Fedora, Ubuntu, etc). Contudo, a máquina criada estará vazia mas acessível via SSH. A partir daí o desenvolvedor deve fazer upload dos softwares necessários e configurar por conta própria estas instalações dentro da VM. Mas, o que mais interessa para testar o CF da SpringSource é a criação um par de chaves digitais para autorizar o CF a acessar a conta no AWS e fazer todas as configurações necessárias, além de criar a VM com todos os softwares indicados anteriormente.Após ter a conta no AWS e um par de chaves digitais, o próximo passo é criar uma conta no CF e fazer o upload das chaves. A partir desse momento, torna-se possível fazer o upload de um WAR contendo a aplicação web desejada. Esta aplicação pode usar ou não Spring Framework, além de qualquer outra tecnologia Java acessível a partir de um conteiner web.
Através da interface administrativa do CF é possível configurar algumas características do MySQL (se será uma instância única ou um cluster de banco de dados a ser distribuído geograficamente em VMs no AWS). Além do upload do WAR da aplicação a ser instalada automaticamente na VM criada pelo CF, a interface permite indicar o usuário, senha e esquema a serem criados no MySQL e o nome da instância no tc Server para a aplicação.Ao ativar a VM configurada através do CF, a VM começa a rodar no AWS com um IP e nome na web atribuídos dinamicamente pelo AWS (ou um IP fixo se adquirido no AWS).
Após ter a conta disponível no AWS e no CF, em alguns minutos uma VM estará rodando e acessível através da web com todos os softwares indicados já configurados e em execução. Os maiores tempos são gastos aguardando validação do cartão de crédito pelo AWS e o upload do WAR para o CF.
Para realizar estes testes e conhecer a infra do AWS e CF, escolhi a VM mais barata que está baseada numa máquina com pouca capacidade de processamento e uso de linux (U$ 0.085 / hora para uma VM com 10GB HD, ˜2GB ram, ˜1GB swap e CPU Intel Xeon 2.66GHz). Esta configuração pode ser alterada a qualquer momento, resultando em acréscimos no valor hora.O CF no momento suporta apenas a infra do AWS. Mas, com a aquisição da SpringSource pela VMware, em breve a infra da VMware também estará disponível. Por enquanto, o CF é beta e, por isso, ainda é gratuito. Portanto, a SpringSource não está cobrando, por enquanto, pelo uso do CF. Mas, não podemos nos iludir, ainda temos que pagar pelo tempo de uso do AWS.
A idéia do CF é legal, principalmente para quem não deseja ter trabalho ou não tem skill para uma configuração detalhada de um linux com as ferramentas indicadas. Contudo, quem domina a administração de um linux e a configuração em cluster de um MySQL, talvez não queira pagar pelo custo do CF no futuro ou deseja ter controle total sobre as otimizações.
Vejo uma vantagem no AWS e CF ao usar uma VM. Neste caso podemos instalar qualquer software e usar qualquer tecnologia plenamente. Contudo, a distribuição é limitada à clusterização de máquinas e serviços (como banco de dados ou servidor de aplicações). Já o mecanismo de cloud da Google impõe restrições na aplicação Java em favor de uma distribuição transparente da aplicação. O Google controla onde a aplicação executa, o JPA não é completamente implementado e as operações de JNDI e acesso a disco não são permitidos. Ambos os modelos são interessantes. Podemos escolher o melhor de acordo os requisitos da aplicação.
O exemplo ilustrado acima foi comentado num post no blog do Spring Brasil User Group com o título: Aplicação web completa com Spring Framework 2.5 disponível.
By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/
quinta-feira, 18 de março de 2010
Browsers para todos os gostos e um aperitivo de Selenium nas nuvens
segunda-feira, 15 de março de 2010
10 reasons why we love JSF
2. Easy to extend: components, listeners, render kit, Events, Controller, etc.
3. Real-world adoption: JBoss, Exadel, Oracle, IBM, ...
4. Architecture model: you can choose between more than 100 different architecture.
5. Open-mind community: using JSF you are going to meet very interesting people.
6. We are using JSF the last 5 years and we found very good market for JSF in Brazil
7. Progress: look to JSf 1.1 to JSF 1.2, JSF 1.2 to JSF 2.0. People are working really hard!
8. Many professionals now available
9. It's a standard. It's JCP. Before complain, report and help!
10. Ed Burns, spec leader, is an old Globalcode community friend!
EXTRA: My wife is specialist in JSF. She's my F1 for JSF :)
Nice job JSF community!
-Vinicius Senger
sexta-feira, 12 de março de 2010
Vídeo sobre JSF2 e ScrumToys disponível
JSF 2.0 e Scrum Toys from LinguÁgil on Vimeo.
A demonstração completa do ScrumToys (sem bugs!) foi apresentada em outro post neste blog através de um vídeo disponível no youtube. Vejam em: Globalcode contribuiu pro LinguÁgil 2009 em Salvador/BA.
Instruções para baixar todo o código fonte do projeto ScrumToys estão disponíveis no post: JSF 2.0 e ScrumToys. Além de um vídeo completo ilustrando como executá-lo através do NetBeans 6.8 em: ScrumToys disponível no NetBeans 6.8.
By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/
quarta-feira, 10 de março de 2010
PrimeFaces com JSF2 no ScrumToys
PrimeFaces é uma suite de componentes JSF customizados, a maioria com suporte a ajax, conta com um Kit para desenvolvimento mobile, é open source, a documentação é razoável, facíl de instalar e usar. Nesse exemplo utilizo o PrimeFaces 2.0.0, versão com suporte a JSF 2, no ScrumToys.
Conheçe o ScrumToys? ScrumToys é um Projeto Exemplo para JavaServer Faces 2.0 dentro do NetBeans 6.8, criado e mantido pelo time da Globalcode.
É interessante que você tenha o NetBeans 6.8 para fazer esse exemplo, senão tiver baixe aqui. Baixe também, aqui, o PrimeFaces e o configure no NetBeans como biblioteca para o ScrumToys. Inicialmente o PrimeFaces requer a runtime JSF, mas isso pode variar dependendo de quais componentes você utilize, mais informações leia a documentação da suite.
Vamos fazer duas customizações no ScrumToys, no mesmo ponto: a listagem de Projetos (nas páginas web: /project/show.xhtml).
É necessário configurar o PrimeFaces Resource Servlet no web.xml, conforme trecho a seguir:
... <servlet> <servlet-name>Resource Servlet</servlet-name> <servlet-class> org.primefaces.resource.ResourceServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>Resource Servlet</servlet-name> <url-pattern>/primefaces_resource/*</url-pattern> </servlet-mapping> ...
A primeira customização no ScrumToys é permitir ao usuário redimensionar as colunas da listagem de Projetos, para isso vamos usar o datatable e column redimensionável do PrimeFaces. Adicione o xmlns do PrimeFaces na tag html do página /project/show.xhtml para acessar os componentes, como esse exemplo:
... <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.prime.com.tr/ui"> ...
Agora vamos substituir o componente datatable e columns atual pelo seguinte:
...
<p:dataTable value="#{projectManager.projects}" var="project"
rendered="#{projectManager.projects.rowCount > 0}"
id="dtProjects">
<p:column>
<f:facet name="header">
<h:outputText value="#" />
</f:facet>
<h:outputText value="#{projectManager.projects.rowIndex + 1}" />
</p:column>
<p:column resizable="true">
<f:facet name="header">
<h:outputText value="#{i18n['project.show.table.header.name']}" />
</f:facet>
<h:outputText value="#{project.name}" />
</p:column>
<p:column resizable="true">
<f:facet name="header">
<h:outputText value="#{i18n['project.show.table.header.startDate']}"/>
</f:facet>
<h:outputText value="#{project.startDate}">
<f:convertDateTime pattern="#{i18n['project.show.table.header.startDate.pattern']}" />
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['project.show.table.header.endDate']}"/>
</f:facet>
<h:outputText value="#{project.endDate}">
<f:convertDateTime pattern="#{i18n['project.show.table.header.endDate.pattern']}" />
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['project.show.table.header.actions']}"/>
</f:facet>
<h:commandButton styleClass="botaoPostIt" action="#{projectManager.edit}"
value="#{i18n['project.show.button.edit']}" />
<h:commandButton styleClass="botaoPostIt" action="#{projectManager.remove}"
value="#{i18n['project.show.button.delete']}" />
<h:commandButton styleClass="botaoPostIt" action="#{projectManager.showSprints}"
value="#{i18n['project.show.button.showSprints']}" />
</p:column>
</p:dataTable>
...
Pronto, é só executar o projeto! Veja que as colunas de Nome e Data Início do Projeto podem ser redimensionadas!
A segunda customização envolve o mesmo componente, vamos habilitar ordenação na coluna do Nome do Projeto e ativar paginação via Ajax no na lista de Projetos.
Na segunda tag colunm defina a propriedade sortBy="#{project.name}", veja:
...
<p:column resizable="true" sortBy="#{project.name}"><f:facet name="header">
<h:outputText value="#{i18n['project.show.table.header.name']}" />
</f:facet>
<h:outputText value="#{project.name}" />
</p:column>
...
No datatable ative a propriedade paginator="true" e rows="5", paginando dessa forma de 5 em 5 registros, segue o trecho de código:
...
<p:dataTable value="#{projectManager.projects}" var="project"
rendered="#{projectManager.projects.rowCount > 0}"
id="dtProjects" paginator="true" rows="5">
...
Execute o projeto novamente.
Simples assim! Novas funcionalidades, sem perder ou quebrar o que está funcionando, fácil e rápido.
Desenvolvimento web baseado em componentes visuais (interface gráfica), foi o que mais me chamou a atenção no meu primeiro contato com JSF. Hoje, depois de 6 anos e alguns projetos utilizando a tecnologia, isso continua me motivando.
Explore o ScrumToys, aprenda os recursos do JavaServer Faces, teste, modifique, participe. Essa é a proposta do projeto!
Mais sobre o ScrumToys:
- JSF 2.0 Scrum Demo
- O projeto ScrumToys no site do NetBeans
- JSF 2.0 e ScrumToys
- JSF 2.0 Scrum Whiteboard, por Eder Magalhães
- JSF 2.0, por Vinicius Nunes
Mais sobre o PrimeFaces:
[]'s
Eder Magalhães
www.yaw.com.br
twitter.com/youandwe
twitter.com/edermag
terça-feira, 9 de março de 2010
7 Boas Práticas de Desenvolvimento com Spring Framework
Prática 1: Separe a interface da implementação dos componentes
Esta prática favorece a implementação de testes e o uso de mocks, favorece o uso futuro de OSGi e o Spring dm Modules. Diversos serviços gerenciados pelo Spring são aplicados aos componentes através de AOP com proxies dinâmicos.
Prática 2: Configure os componentes de negócios através de anotações e alguns serviços tecnológicos através de XML
Esta prática reduz a quantidade de XML e no futuro teremos uma JSR que permitirá alterar as anotações especificas do Spring para configuração e injeção dos componentes. Além disso, existem casos que só conseguimos configurar alguns serviços através de XML (sem contar o Java Config Module, que foi incorporado ao Spring Framework 3.0), por exemplo, .properties, Entity Manager Factory e datasources.
Prática 3: Prefira as anotações padrões (resultante de JSRs)
Estão disponíveis as anotações padrões definidas na JSR-250 (Common Annotation) e JSR-303 (Bean Validation), por exemplo. Se necessário, ao usar estas anotações, os componentes podem ser migrados ou reusados como EJBs ou em outro framework com suporte a injeção de dependências.
Prática 4: Implemente componentes "thread-safe" (singleton)
Com está prática delegue o estado conversacional para as entidades e para os escopos web. O Spring funciona melhor com componentes singleton desde a sua concepção.
Prática 5: Use o SpringSource Tool Suite ou Spring IDE
Proporciona produtividade ao editar XML, aplicar anotações e obter uma visão geral de quais componentes existem no projeto, mesmo que a configuração esteja pulverizada no classpath por causa das anotações.
Prática 6: Implemente testes usando Spring Test Framework
Simplifica o bootstrap de um ApplicationContext baseado num cenário de testes usando anotações e de maneira bem simples. Além de permitir o uso de mocks, JUnit e TestNG ao delegar boa parte do trabalho para o framework de testes do Spring e deixando no código apenas com o teste efetivamente.
Prática 7: Prefira os produtos do Spring Portfólio
Para problemas recorrentes que já são resolvidos pelos produtos do Spring Portifólio, existe a garantia de uma boa integração com o Spring Framework, além de seguir as mesmas boas práticas na definição de componentes, configuração, modelagem e aplicação de design patterns. Por exemplo, segurança use Spring Security, suporte a OSGi use Spring dm, MVC+Web+JSF+Ajax+JavaScript use Spring Web Flow, enterprise Integration patterns use Spring Integration, Spring + Flex use Spring BlazeDS Integration, Spring + Swing use Spring Rich Client, processos em batch use Spring Batch e se ainda o desenvolvedor não gosta de Java e prefere .NET use Spring .NET.
fonte: Spring Brasil User Group
By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/
segunda-feira, 8 de março de 2010
Impressione os seus amigos com o SpringSource Tool Suite
Apesar da base do SpringSource Tool Suite (STS) ser o Eclipse, ele não para por aí. Os plugins 'Spring IDE', m2eclipse (suporte a Maven) e integração com o tc Server e dm Server estão presentes. Num único pacote e numa simples instalação já temos um ambiente muito produtivo para usar as anotações Spring, inspecionar a árvore de dependências entre os componentes e numa única visão saber quais os componentes anotados que estão espalhados pelo classpath da aplicação. Além de tudo isso tem o suporte a Spring Roo, Roo Shell e AspectJ. O uso de programação orientada a aspectos (AOP) via AspectJ é simplificado consideravelmente.
Se for realizar um projeto baseado na plataforma Spring, vale a pena dar atenção ao SpringSource Tool Suite e impressionar os seus amigos (e gerentes!) com a produtividade proporcionada por esta ferramenta.
O STS é gratuito e o download pode ser realizado a partir do site da SpringSource: SpringSource Tool Suite.
Confira os slides desenvolvidos pelo Ricardo Jun para a apresentação sobre STS, tc Server e dm Server no Casual Class sobre a plataforma Spring:
By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/
Roo Replay
Do meio da platéia surgiu: "Não vai me dizer que o Roo tem um comando de replay ?". Tem sim...
http://springbrasil.ning.com/profiles/blogs/roo-replay
Neste post do Spring Brasil User Group também consta a aplicação demo utilizada durante o Casual Class.
Renato Bellia
http://notasingleshot.blogspot.com
http://twitter.com/renatobellia
sexta-feira, 5 de março de 2010
Academia do Programador no Ensino Médio
“Trabalhar este conteúdo ajudaria o desenvolvimento do pensamento lógico, visto que o exercício realizado na resolução de um problema computacional consiste na análise dos objetivos determinados, das ferramentas disponíveis, bem como a definição dos passos necessários para alcançar estes objetivos possibilita a reversibilidade do pensamento e o pensamento antecipatório. Habilidades que são fundamentais para a construção do conhecimento.”
Então a ideia de incluir a Academia do Programador como conteúdo integrante do Ensino Médio foi amadurecendo e foi definido que em 2010 os alunos do 2º ano do Ensino Médio teriam 2 aulas semanais dedicadas a Academia do Programador, totalizando as 80h desta carreira.
A experiência que tive na primeira aula foi interessante, pois quando apresentei o Program-ME
“Dá para acender a lâmpada do meu quarto, ao invés de acender esta lampadinha (se referindo ao LED)?”
“Funciona sem estar conectado ao computador?”
“Tem um computador em miniatura aí dentro?”
Acredito que será muito gratificante trabalhar este conteúdo com alunos que estão na faixa dos 16 anos, apresentando este mundo tecnológico ‘por dentro’ e, quem sabe, despertando o desenvolvedor ou inventor que existe dentro deles.
Marcelo de Castro
http://twitter.com/mcastroinfo
http://www.globalcode.com.br/instrutores/MarceloCastro
quinta-feira, 4 de março de 2010
Andando nas nuvens com a plataforma Spring
O Júlio falou sobre a ferramenta online Cloud Foundry da SpringSource e mostrou os passos necessários para abrir uma conta no Amazon Elastic Compute Cloud e depois subir uma aplicação web com Spring numa máquina virtual na rede via Spring Tool Suite e o Cloud Foundry.
By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/
Testes: 9° Encontro da ALATS-SP, 6/3 na Globalcode
|
terça-feira, 2 de março de 2010
15 minutos de produtividade com o Dr. Roo
Estes slides não estão formatados como slidecast, mas 15 minutos de gravação da apresentação foram capturados com a caneta mágica que roda Java da Livescribe e podem ser ouvidos através do painel a seguir.
Mais sobre o Spring Roo:
- Home Spring Roo
- Upcoming conferences and JUGs featuring Roo
- Hello Roo
- Spring Roo em Ação
- Beginning With Roo: The Tutorial
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/
segunda-feira, 1 de março de 2010
Exemplo de CRUD para o AppEngine(Struts 2 + Google Guice + JPA)
Ok, então você já teve a sua idéia milionária, já deu uma lida no Google AppEngine(GAE) depois do meu último post mas agora tá faltando aquele 'empurrãozinho' para iniciar seu projeto.
Tudo bem, aqui vai um empurrão ladeira abaixo...
Vou detalhar neste post uma aplicação completa(CRUD) utilizando alguns frameworks Java(Struts 2, Google Guice, JPA) sendo hospedada no Google AppEngine(GAE).
Não vou entrar em detalhes específico de cada um dos frameworks pois precisaria de algumas dezenas de posts para isso, o intuito é somente a adaptação necessária para ser executada no GAE, e alguns comentários sobre a arquitetura do projeto.
> Struts 2
Infelizmente não é plug-and-play neste ambiente, porém para utilizar o Struts 2 no ambiente do GAE, as modificações são bem simples.
A primeira delas é em relação ao framework Ognl que para execução de Reflection acaba esbarrando em algumas problemas de segurança.
Para corrigir basta criar um ServletContextListener que desabilita tais verificações de segurança do framework.
Código aqui
A segunda limitação é referente ao framework freemarker. Ele faz uma referência a classe javax.swing.tree.TreeNode que não é permitido pelas regras de segurança do ambiente. Há duas possibilidades de solução, a comunidade responsável pelo freemarker criou um pacote com esta classe já modificada, para rodar no GAE, e outra possibilidade é sobreescrever esta classe removendo as referências.
Código aqui
> Guice
Esse sim é plug-and-play, sem modificações necessárias.
> JPA
Como devem ter notado, o GAE não possui um 'banco de dados' como conhecemos e estamos acostumados com os SGBDR. O Google desenvolveu seu próprio banco de dados, não relacional, que é conhecido por 'BigTable', e diferente dos bancos de dados relacionais que estamos acostumados, a forma de manipulação e organização do BigTable é um tanto diferente. porém a maior parte dessas partiularidades é abstraido dos desenvolvedores ao utilizarem a API de JPA, o framework Datanuclues se encarrega de fazer o trabalho pesado.
Aqui vocês podem ver mais detalhadamente.
Pronto, os três principais frameworks da aplicação, depois das customizações e configurações estão prontos para serem executados.
A aplicação de exemplo que criei é um CRUD simples, com as opções de login/adicionar/excluir/listar e além de um upload de arquivos.
O código fonte, e toda a aplicação podem ser baixados neste link.
Basta executá-lo e modificar segundo a sua aplicação.
> Upload de arquivos
Se quiserem utilizar a opção de upload do Struts 2 com a API de commons.fileupload, funciona sem problemas, porém o meu exemplo eu preferi utilizar a API de Blobstore(ainda em versão beta) disponibilizada pelo GAE.
É uma API bem prática e simples, e facilita muito a vida ao se trabalhar com arquivos.
O que você precisa fazer para trabalhar com ela, é ao fazer um upload, redirecionar o seu destino, ao invés de enviar o arquivo para um servlet/action, você envia para a API de Blobstore que já armazena o arquivo para você, lhe disponibilizando a chave de acesso para este arquivo. E com isso já elimina os diversos problemas que você teria para controlar e armazenar arquivos.
Código aqui.
[Se derem uma olhada no código da minha classe BlobstoreServlet, verão que há alguns códigos de manipulação de imagem com a API de ImageService, caso vocês queiram redimensionar, girar, cortar, etc]
Pronto, agora o que falta para você tirar a idéia do papel?
Algumas observações sobre o projeto:
==>O controle de transação e do EntityManager JPA, está sendo feito atrás do padrão Open Session In View, ou seja, a cada request é uma transação gerenciada por um ServletFilter. Assim evitamos o trabalho manual de controle de transação e principalmente as exceptions de LazyInitialization.
==>O Guice que está controlando toda a injeção de dependência, e está sendo utilizado para separar as camadas da aplicação. Assim caso você queira tirar sua aplicação do GAE e rodar em um servidor próprio, basta mudar as implementações na classe IoCBinder.
==>Para API de Blobstore funcionar em ambiente de produção, é necessário que sua aplicação esteja habilitada a cobrança.
Caso queiram conferir a aplicação rodando online:
http://strust2crud.appspot.com/ (usuário - rafael@yaw.com.br / senha - yaw)
Então é isso. Boa sorte com vossos projetos, e a cerveja pode ser Bohemia ou Original mesmo.
Rafael Nunes
http://twitter.com/rafanunes
http://blog.globalcode.com.br/search/label/Rafael
http://www.yaw.com.br
http://www.globalcode.com.br/instrutores/RafaelNunes