Palestrante azarado - DevMedia Tech Week (Spring Framework, EJB3 + JPA + JSF)

Como um bom brasileiro, vou começar reclamando para quem não pode fazer nada a respeito :D (Se você também não gosta de lamentações clique aqui)

fiasco.jpg

No aeroporto na sexta a noite, para pegar o avião, o pessoal da esteira encrencou com o meu isqueiro e fizeram com que eu despachasse o mesmo, sem problemas, ainda tinha tempo suficiente, voltei no balcão da Gol, despachei o isqueiro e voltei bem feliz para o avião …
Chegando em Guarulhos, por algum motivo inexplicável em um voo sem escalas de Porto Alegre a São Paulo, eles conseguiram levar mais de 1h para achar o saco lacrado da Gol, dentro do cofre do avião, o que me fez ficar esperando na frente da esteira um bom tempo, até o funcionário da Gol ja tinha desistido, quando fomos para o balcão fazer uma ocorrencia de perda de bagagem (de alguma coisa que eles prometeram que ficaria em um saco lacrado no cofre do avião), chamaram o funcionário da Gol pelo rádio dizendo que haviam localizado o objeto no cofre do avião e que só estavam esperando uma van para mandar (por algum motivo o outro objeto em um saco lacrado igualzinho eles mandaram nos caminhões de bagagens normais).
Depois de hora e pouco de espera fui tentar descobrir qual era o onibus que eu tinha que pegar para ir para o hotel, cheguei no hotel, torcendo para conseguir pagar umas contas que venciam na sexta feira mesmo, e não tinha internet no quarto (fala sério, um hotel em são paulo sem internet, até o hotel mais simples de Pato Branco que fiquei quando estava ministrando um curso la tinha internet nos quartos), tive que jogar mais uma grana fora para pagar 30 minutos de acesso a internet no “cyber office” do hotel, e pior, nem internet nem TV a cabo no hotel, e com isto chegamos ao final da sexta feira …
No sábado começo o dia com a minha palestra fracassada de EJB3 + JPA + JSF, eu consegui passar como fazer tudo na palestra, mas devido a um bug na versão beta do netbeans, não consegui fazer o exemplo funcionar durante a palestra (traduzindo: fiasco!)
No final do dia a minha palestra de desenvolvimento web com spring framework começou mal também, o eclipse Europa (este não é beta e eu uso todos os dias no escritório, só não uso no meu note), resolveu que não queria funcionar, fechou sozinho umas 3 vezes, e quando eu estava começando a entrar em desespero por causa do segundo fracasso eminente no mesmo dia, alguem que estava assistindo a palestra disse: por que tu não usa o IDEA, abri ele e tudo passou a funcionar :D
Mostrei passo a passo (inclusive os testes para ver qual configuração vai funcionar), como fazer uma aplicação web com o spring framework (pelo menos uma das 57 mil maneiras possíveis).



header.png


Pronto, chega de reclamar (”Ó vida, Ó céu, Ó azar”), o que realmente aconteceu no sábado (na sexta foi azar mesmo, eu reclamei para a Gol, reclamei no hotel, ou seja, para quem podia fazer alguma coisa a respeito).

Eu errei feio e peço desculpas pelo “fiasco” do primeiro mini curso, o que aconteceu foi que eu testei antes de ir para o evento com o banco de dados padrão do netbeans/glassfish e tudo funcionou corretamente, no evento tentando utilizar o MySQL como faço em 99% dos outros projetos sofri com um bug na integração do NetBeans 6.0M10 com o glassfish 2.0 build 53 …
Possivelmente o BUG seja alguma alteração no formato dos arquivos de configuração/deployment do glassfish …
O NetBeans quando gera um jar de um projeto ejb, ele coloca dentro do jar um arquivo META-INF/sun-resources.xml que deveria criar os pools JDBC utilizados pelos EJBs daquele jar, mas a combinação de NetBeans 6.0M10 + esta versão de glassfish, isto não funciona de modo algum, e isto eu não tinha testado, pois fiz os testes com um pool que ja existia e desta forma o NetBeans não tentou criar novamente o pool …
Quando eu informo ao netbeans uma conexão nova, ele deveria criar ela automaticamente no servidor de aplicações, mas parece que a geração do arquivo de configurações do glassfish esta com problemas …
o que o netbeans esta gerando é o código a baixo …

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Resource Definitions //EN" "http://www.sun.com/software/appserver/dtds/sun-resources_1_3.dtd">
<resources>
  <jdbc-resource enabled="true" jndi-name="devmedia" object-type="user" pool-name="mysqlPool"/>
  <jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="mysqlPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
    <property name="databaseName" value="devmedia"/>
    <property name="serverName" value=""/>
    <property name="portNumber" value=""/>
    <property name="User" value="root"/>
    <property name="Password" value="admin"/>
  </jdbc-connection-pool>
</resources>

giant-bug-vs-ants.jpg

e o que ele deveria gerar é isto:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Resource Definitions //EN" "http://www.sun.com/software/appserver/dtds/sun-resources_1_3.dtd">
<resources>
  <jdbc-resource enabled="true" jndi-name="devmedia" object-type="user" pool-name="mysqlPool"/>
  <jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="mysqlPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
    <property name="url" value="jdbc:mysql:///devmedia"/>
    <property name="URL" value="jdbc:mysql:///devmedia"/>
    <property name="User" value="root"/>
    <property name="Password" value="admin"/>
  </jdbc-connection-pool>
</resources>

com este código funciona tudo OK …
O que eu fiz em casa que funcionou corretamente?
Tentei rodar o projeto pelo netbeans diversas vezes e não funcionou, então criei o ear pelo netbeans, abri o ear, abri o jar dos EJBs removi o arquivo META-INF/sun-resources.xml, acessei o console de administração do glassfish, criei uma conexão JDBC com as configurações descritas no arquivo acima, criei um JDBC Resource apontando para a conexão criada e nome devmedia.
Fiz o deploy do ear gerado pelo netbeans sem o descritor sun-resources e tudo funcionou (quando tentei fazer o deploy com o descritor ainda no arquivo ele dava o mesmo erro que estava ocorrendo no evento).
Fazendo ainda alguns testes depois, removi a aplicação e os resources JDBC que havia criado no passo anterior, alterei o descritor ao invés de remover ele, e também funcionou.
Por tanto, esta declarado que o problema da aplicação não funcionar foi causado por um BUG no NetBeans que esta criando o descritor de deployment com dados errados.

E a partir de hoje eu vou começar a prestar mais atenção nos avisos que aparecem quando se vai baixar uma versão beta de algum software: Não Utilize em produção!

Ja na última palestra, sobre Desenvolvimento Web com Spring Framework, os problemas começaram com o projetor da sala que só aguentava 800×600 (o da outra sala suportou os 1280×800 do meu notebook, espetacular o projetor), quem é que consegue trabalhar com 800×600?
Depois disto, o eclipse Europa, que não é mais beta, não tinha nada beta instalado, resolveu que iria cair a cada 5 minutos, e considerando o fiasco que eu ja tinha feito na palestra anterior, em que o exemplo não funcionou, eu comecei a ficar desesperado, e agradeço a quem estava na platéia que deve ter visto a minha cara de pânico e disse, por que tu não usa o IDEA?
Abri o IDEA e o pânico aumentou, pois em 800×600 o layout dele não se ajeitava …
Lembrei de remover a barra inferior do KDE e tudo resolvido, IntelliJ IDEA funcionando, consegui fazer o mini curso de desenvolvimento web com spring framework sem maiores problemas …
Os erros que ocorreram eram mais ou menos previstos, pois a idéia era mostrar como fazer uma aplicação do zero, o que pode dar errado, e como procurar soluções …
No final tudo funcionando, clientes sendo cadastrados, layout podre (não sou nenhum designer :D )
O único problema foi que devido aos problemas emocionais do Eclipse Europa, a palestra atrasou um pouco e não deu tempo de passar mais com mais detalhes sobre a escrita de testes unitários (tem alguns exemplos aqui para quem quiser se adiantar), mas vou colocar os testes no exemplo que sera disponibilizado hoje a noite aqui no blog.

Lições aprendidas:

  1. Não utilizar software open source e beta em palestras (e digo open source e beta pois o IDEA que me salvou do fiasco total foi o milestone 2 do IntelliJ IDEA 7
  2. O NetBeans esta ficando muito bom, mas falha de integração com o glassfish que vem junto com ele no pacote de instalação é inaceitável
  3. Praticamente perdi a confiança no eclipse, uma instalação vanilla, feita dois dias antes, em um workspace em branco, resolveu que não iria funcionar e simplesmente fechava sozinho sem explicações
  4. IntelliJ IDEA Rocks, isto prova que vale a pena pagar por uma IDE de qualidade!
  5. Se uma IDE diz que vai fazer uma coisa, ela é obrigada a fazer, se não vai fazer, diz que não faz, como o eclipse e o IDEA fazem, ou seja, nenhum dos dois promete configurar o data source no servidor de aplicações, e nenhum deles se perde se tu configurar manualmente
  6. O Eclipse Europa esta funcionando muito bem na maquina windows que tenho no escritório, sabe-se la por que ele encrencou de não funcionar no linux, sendo que eu utilizava ele a uns 2 meses atrás, antes do Europa Final, ou seja, os betas do Europa funcionavam bem, eu só não esperava este problema ocorrendo com a versão final, como ja disseram nos comentários, provavelmente foi alguma incompatibilidade com a versão da JVM

Fora isto só posso pedir desculpas novamente a quem estava assistindo a palestra de EJB3 + JPA + JSF, e como prometi para todos hoje a noite os exemplos estarão na página de publicações aqui do blog com um passo a passo de como fazer para funcionarem, ainda vou adicionar alguns exemplos de código e um video provando que o netbeans me sabotou na primeira palestra :D

PS.: desculpem pelo texto gigantesco, mas eu tinha muita coisa para explicar …

Se você gostou deste post, lembre-se de assinar o RSS feed do blog, para ser notificado de novos posts!

Ruby On Rails - IDE War 2 - IntelliJ IDEA

Continuando com a comparação de IDEs para RoR que comecei aqui vamos dar uma olhada nos recursos que o IntelliJ IDEA oferece para trabalharmos com o Rails …

<auto_promoção>
Antes de continuar, se você estiver começando agora e quiser aprender um pouco mais sobre RoR (Ruby On Rails), eu traduzi a pouco tempo o ótimo tutorial Four Dais on Rails: Primeiro Dia, Segundo Dia, Terceiro Dia, Quarto e Último Dia
</auto_promoção>

Para quem não conhece o IntelliJ IDEA é uma das melhores, se não a melhor IDE disponível hoje para se trabalhar com Java, mas ela possui também um módulo que pode ser instalado via o gerenciador de módulos da IDE para se trabalhar com Ruby, este módulo adiciona suporte para Ruby e Ruby On Rails …

Achei interessante a idéia pois assim é possível se trabalhar com mais de uma linguagem na mesma IDE, ja que estou começando a pouco com o RoR, mas ja trabalho com Java a algum tempo, por tanto, a maior parte dos projetos que desenvolvo e a grande maior parte do histórico é em Java …

Seguindo então com o Ruby On Rails IDE War

A coisa que mais sinto falta quando estou utilizando o VIM ou o Kate para editar qualquer tipo de código fonte, é code completion, até o bash completa automagicamente os comandos disponíveis, por que eu preciso decorar todos os métodos de uma classe?
Claro, eu sei que em linguagens dinâmicas não é possível adivinhar todos os métodos disponíveis mas boa parte deles não é dinâmico :D
Uma ótima surpresa ao utilizar o IDEA para editar uma applicação Ruby On Rails é o code completion deles …

Todos os métodos definidos para a classe ja estavam ali disponíveis para serem chamados, e o melhor de tudo, com a documentação em um popup :D
Como pode ser visto na imagem acima, até mesmo nos arquivos rhtml, o code completion funciona beleza :D Isto me poupa bastante tempo, pois ja mostra os métodos para criação dos controles dos formulários, com os parametros possíveis …
Agora eu não preciso mais ficar 100% do tempo com a API do Rails aberta em uma janela do browser :D
O Legal é que este code completion ja mostra inclusive os métodos que eu adicionei nos helpers da aplicação também :D
Quando eu estiver editando o Model, os validates_* ja estão todos la também (claro, isto a gente acaba decorando com o tempo … )

Mas alem do code completion estar espetacular, o IDEA também possui diversos templates de código ja prontos …

A minha única reclamação é que os templates não tem um nome exatamente intuitivo …
Como por exemplo:

  • va para validates_associated
  • vc para validates_confirmation
  • vp para validates_presence

Claro que uma vez isto decorado, é muito mais rápido …

Uma outra coisa espetacular do IntelliJ IDEA é que ele possui 3 tipos de code completion …
CTRL+SPACE - code completion normal, todas as possíveis classes, métodos e assemelhados …
CTRL+SHIFT+SPACE - smart completion, só o que provavelmente se encaixa naquele contexto …
CTRL+J - smart templates

Para facilitar um pouquinho para quem esta começando, e até para melhorar a integração IDE/Rails o menú “File\New” inclui todos os possíveis generators, inclusive os “não padrão” que estiverem disponíveis …

Eu achei esta integração dos generators bem melhor que a do RadRails, pois neste caso, parece que realmente faz parte da IDE e não que é algo que foi jogado ali por que foi a única forma que conseguiram …

Refactoring


Refactoring sempre foi “O” recurso mais espetacular do IntelliJ IDEA (fora o fato de a IDE parecer inteligente e se adaptar a forma de você trabalhar :D ), mas como pode ser visto no screenshot acima …
Quase nenhum Refactoring foi portado para o plugin de RoR ainda …
O plugin ainda esta em desenvolvimento, e com certeza haverão muitas melhoras neste ponto até o release oficial do plugin e do IntelliJ IDEA 7 …

Uma dica para quem estiver com o último EAP instalado, e estiver triste por que o plugin para Ruby não funciona nesta versão ainda …
Eu abri o jar, alterei a versão compatível no plugin.xml e tudo funcionou sem problema algum :D

Além dos screenshots

Além destes screenshots também existe um menu para as actions do Rake, que eu particularmente não acho tão útil assim, exceto pelo fato de facilitar a execução dos testes a partir da IDE.
É possível executar a aplicação em modo debug com o webrick ou o mongrel, e colocar breakpoints em qualquer parte do código …
Só não consegui breakpoints nos arquivos .rhtml, mas a principio isto é até uma coisa boa pois evita que algum desavisado tente colocar lógica na camada de apresentação :D A configuração de servidores para execução da aplicação funciona exatamente da mesma maneira que para executar aplicações Java, o que garante consistência na experiência do programador …
Diferente do RadRails que para executar uma aplicação Java se usa um menu e para startar uma aplicação rails se utiliza outro …
É possível facilmente utilizar tanto o Ruby como o JRuby como interpretador …

Parecer Geral

O IntelliJ IDEA como sempre superou as minhas expectativas, exceto pelo fato de o suporte a refactorings ainda não ter muitos recursos para o Ruby, mas mesmo assim, a “inteligência” da IDE continua ajudando bastante na produtividade …
Outra coisa interessante é a performance dos editores, depois dos 15 segundos que o IDEA leva para inicializar na minha maquina, trabalhar com o editor de Ruby ou RHTML dele teve praticamente a mesma performance de se trabalhar com o Kate ou o VI, e digo praticamente por que não medi apenas, pois não ocorreu nenhum travamento ou qualquer coisa do genero (coisas que me decepcionaram bastante no RadRails).

Só deixo um aviso:
Se você acha que não vale a pena pagar por uma IDE que vai aumentar a sua produtividade, nem teste o IntelliJ IDEA, pois é bem provável que você fique viciado nele e acabe comprando uma licença …

[Parte 1 - Rad Rails] [Parte 3 - Net Beans Hudson]

Se você gostou deste post, lembre-se de assinar o RSS feed do blog, para ser notificado de novos posts!

Tutorial de Novembro do RSJUG - GWT (Google Web Toolkit)

Quando: 11 de novembro de 2006
Horário: 09:00 as 12:30
Palestrante: Julio Viegas
Onde: Auditório da Fundação Getúlio Vargas
Quanto:
R$ 15,00 público geral
R$ 10,00 associados da SUCESU

Descrição:
O Google Web Toolkit , GWT, é um framework Java para facilitar o desenvolvimento de de aplicações que façam uso de Ajax. O kit pretente evitar que o desenvolvedor perca tempo com detalhes tecnicos durante a criação de aplicações web bastante dinâmicas. Entre as vantagens, evita incompatibilidades entre browsers e plataformas e permite maior modularização dos componentes AJAX e JavaScript.

Sera sorteada uma licença personal do IntelliJ IDEA e do Team City para os participantes do Tutorial.

Inscreva-se!

Se você gostou deste post, lembre-se de assinar o RSS feed do blog, para ser notificado de novos posts!

IntelliJ IDEA - é to testando o brinquedo novo

Uma nova ação de promoção da JetBrains, em uma açao conjunta com grupos de usuário Java do mundo inteiro eles vão dar de presente algumas licenças do IntelliJ IDEA e do novo produto Team City.

São Licensas “Personal” ou seja, para uma pessoa apenas e que pode ser utilizada para fins comerciais.

O que isto tem a ver com o blog? bom eu ganhei uma licença, e nos proximos dois tutoriais do RSJUG deste ano, o palestrante ganha uma licença também, e vamos sortear uma licença para os presentes no dia, então não percam os proximos dois tutoriais deste ano do RSJUG, alem do excelente nivel técnico também orre o risco de ganhar uma licensa de uma das melhores IDEs java disponiveis no mercado hoje!

Read the rest of this entry »

Se você gostou deste post, lembre-se de assinar o RSS feed do blog, para ser notificado de novos posts!