segunda-feira, 14 de setembro de 2009

Persistência com EhCache

Coloquei no meu blog um post sobre como fazer persistência muito facilmente usando Collections e o framework EhCache. Pra dar vontade, imagine usar um Map e esse map automaticamente faz cache de dados na memória e salva as informações no HD! Nada de banco, JPA, Hibernate, ORM, Prevayler e outras coisas complicadas!
Aproveitem!
Persistência com EhCache: Blog do Pedro Cavaléro.

quinta-feira, 6 de agosto de 2009

Resolvido conflito entre JSR's de Injeção de Dependência

Deu na InfoQ. Foi resolvido o conflito entre as duas JSR's que propõe padronização de injeção de dependência em Java. Para quem não tem acompanhado esta novela segue um pequeno resumo. Há mais de dois anos surgiu a JSR 299 com o nome de WebBeans, cujo o escopo , segundo a especulação inicial, era padronizar o Seam. Porém com a evolução da especificação ficou claro que a proposta na verdade era padronizar o conteiner de de injeção de depêndencia do Seam para platataforma JEE tendo em vista que os recursos que este prove estão bem além dos providos pela especificação JEE5. Muito tempo depois, duas empresas de fundo de quintal, uma tal de Google e SpringSource resolveram unir forças para padronizar o que aprenderam nos seus fremeworks de injeção de dependência, respectivamente Guice e Spring , e assumiram a liderança da JSR 330 a fim de padronizar o Serviço de Injeção de Dependência no ambiente Desktop(JSE). Minha impressão eh que essa historia de DI em ambiente JSE foi apenas uma jogada política dos dois Big-Players para ganharem espaço e poder de decisão, pois pra quem conhece um pouco de injeção de dependência fica claro que uma proposta para um ambiente atende ao outro com pouco ou nenhum esforço e/ou DI em JSE seria subset do JEE. O fato eh que por algum tempo, até recentemente, coexistiram duas propostas de JSR para DI que não se conversavam. Eis que a InfoQ anuncia que o embate foi harmonizado de forma que, adivinhem, a 299 vai usar a 330. Espero que a modularização em Java que anda as voltas em JSR's de numéros exóticos como 277, 291, 294 e nomes como OSGI , HK2 e Project Jigsaw tenha um final feliz também.

java.io.NotSerializableException e a flag -Dsun.io.serialization.extendedDebugInfo=true

Estávamos com um grande problema de serialização, em que uma classe que, a princípio, não tinha relação nenhuma com as demais estava dando serializada, dando:
java.io.NotSerializableException
Como ela nem deveria estar sendo serializada precisávamos descobrir o que estava pedindo que ela fosse serializada. No entanto, não foi possível entrar no código com Debug. Mas, a própria classe de serialização fazia um debug mais profundo através da flag:
-Dsun.io.serialization.extendedDebugInfo=true
Habilitando esta flag colocando-a nos argumentos da VM, voltamos a serializar sem problemas.

terça-feira, 4 de agosto de 2009

Gerenciamento de exceções no Eclipse RCP

Muitas vezes o eclipse passa batido nas RuntimeExceptions.

Isto ocorre porque o tratamento delas é feito no WorkbenchAdvisor, no método eventLoopException(Throwable). Para que isso não aconteça é necessário dar um override nesta função, geralmente no ApplicationWorkbenchAdvisor, algo como:

public void eventLoopException(Throwable exception){
System.out.println("Override do eventLoopException");
exception.printStackTrace();
super.eventLoopException(exception);
}

[]'s

sexta-feira, 24 de julho de 2009

Atalhos do Eclipse

Caros,

Como diria o nosso instrutor quando do curso de Arquitetura Java: "Mouse dá choque!" Então, vão aqui alguns links com os principais atalhos do Eclipse que todos nós deveríamos saber (mas não sabemos!):

10 Eclipse Navigation Shortcuts Every Java Programmer Should Know

Eclipse Shortcuts



Abraços!


sábado, 18 de julho de 2009

Notas de um Desenvolvedor Eclipse

Caros,

O Blog Lubos Eclipse Weblog iniciou como um repositório de informações sobre como fazer plugins e aplicações RCP com Eclipse. Lá ele juntou várias dicas, sites, tutoriais sobre os mais diversos aspectos desse tipo de programação. Com certeza quem programa para eclipse não vai se arrepender de dar uma olhada!



quarta-feira, 8 de julho de 2009

Frase da Semana de 5 à 11/07

"... if someone had shown me the Programming Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy" . Essa é do James Strachan, "O Cara" de Groovy. Esta me motivou a tirar o meu exemplar do referido livro da estante e iniciar um pet project, que há tempos venho bolando, e que pretendo fazer em Scala, a fim de consolidar meus conhecimentos nessa linguagem tão comentada de uns tempos pra cá no meio geek.

domingo, 21 de junho de 2009

Frase da Semana 14 a 20/06

"...we really are moving more and more down the road of declarative development. Over time we will see more "what" and less "how" in our day to day programming adventures."

Gostei muito dessa frase, ainda que não tenha tanta fé quanto o autor do post que programação declaratival se torne paradigma mainstream, mesmo tendo sql o seu lugar ao sol. Essa minha conclusão é muito eu-cêntrica, pois atualmente tenho trabalhado com hql e jpaql e tenho sentido alguma dificuldade em quebrar as amarras imperativas do meu cérebro, porém quando o consigo fazer fico extremamente satisfeito com o produto, pois código declarativo, como disse o autor do post, é focado em "o que" e não "como", o que deixa o código mais sucinto e claro. Cá entre nós, eu acho mais difícil pensar declarativamente, não sei se porque venho de uma escola imperativa ou se é realmente mais fácil persar em if's, for's e com assinalação destrutiva do que com and's, or's, recursividade e imutablidade. Talvez seja, como quase tudo na vida, uma questão de prática.

Só uma última coisa, o código do exemplo do post é em C# e dá uma tristeza em ver quanto Java tá comendo poeira quando comparada com a sua concorrente da Microsoft. No entanto é legal ver que dá para fazer Link em Scala sem adicionar palavras reservadas na linguagem, que foi a estratégia usada em C#.

terça-feira, 26 de maio de 2009

Frase da Semana de 24 à 30/05

Cue Pink Floyd ripoff, “we don’t need no static contracts… hey, WSDL, leave that Web alone”

Essa é do Jim Webber, thoughtworker palestrante do "Falando em Java 2009", a respeito de WS-*. Para quem quiser entender melhor essa provocativa frase recomendo as seguintes leituras.


sábado, 9 de maio de 2009

Frase da Semana 03 a 09/05

"Software gets complex as you add more features to it. We all know that. Designers, developers, engineers, product managers, and your drunk neighbor would all agree. But, if you're not working directly on building software, it's easy to under-appreciate how quickly complexity happens."

Para quem se interessou na fonte desta frase segue o link do post.

quarta-feira, 6 de maio de 2009

Annotation no Spring 3.0

Saiu ainda a pouco a o Milestone 3 do Spring 3.0 . Dentre os novos recursos um que saltou aos olhos é a possibilidade usar annotations do Spring na definição de annotations customizadas. Com o perdão da licensa poética, alguma coisa como "composição" ou "herança múltipla de annotations". Como um exemplo vale mais que mil palavras segue o próprio exemplo do post de divulgação do Blog do SpringSource .

@Service
@Scope("request")
@Transactional(rollbackFor=Exception.class)

@Retention(RetentionPolicy.RUNTIME)
public @interface MyService {
}

@MyService
public class RewardsService {

}

Ou seja, as annotations do spring além de serem usadas como meta-dados nos beans, agora podem ser usadas como meta-dados na definição de meta-dados de sua aplicação. Alguma coisa como meta-meta-dados ou meta2-dados(ahahahahah) . Uma possibilidade interessante que emerge é observar duplicação na ocorrência de anotattions e criar uma annotation que agrupe elas. Quem já criou um repository com Spring 2.5 sabe do que estou falando.

@Repository
@Transactional
MyReposytory

E eis que surge o refactoring de annotations :)

Outra possibilidade é a criação de annotation que além de agrupar, traduzam conceitos mais próximos do negócio em questão.

Todo essa conversa de annotation anotando annotation só me faz lembrar meu chapa Eduardo Guerra, nas nossas conversas de cafezinho, antevendo o surgimento deste padrão. Espero que ao ler este post ele não faça o seu cromossomo X falar alto e exclame um sonoro "Que foi que eu falei". E que venham o Spring 3.0 RC1.

segunda-feira, 27 de abril de 2009

Frase da semana.

"Mutable state is actually another form of manual memory management: every time you over-write a value you are making a decision that the old value is now garbage, regardless of what other part of the program might have been using it."

Aos curiosos sobre a origem desta frase provacativa segue o link do post.

domingo, 1 de março de 2009

segunda-feira, 23 de fevereiro de 2009

One Model to rule them all !

Confesso que ainda que simpatize com Domain Driven Design e procure praticar alguns de seus conceitos, não conclui a leitura da "bíblia" do assunto. Ainda assim julgava ter um entendimento satisfatório, haja vista a leitura parcial da referência e a leitura de infindáveis posts que li nas comunidades de desenvolvimento.
Uma conclusão precipitada que tomei, baseado no meu conhecimento parcial do assunto, foi que um conceito chave desta disciplina era a existência de um modelo de domínio ÚNICO por aplicação, o qual acomodaria as regras de negócio, ou parafraseando o Senhor dos Anéis: "One Model to rule them all" .
Recentemente me deparei com a entrevista de um desenvolvedor/arquiteto de software de nome Greg Young, na Infoq, que me chamou atenção pelo fato deste praticar DDD em comunhão com Imutabilidade, algo que venho confabulando há algum tempo. Porém o que mais me chamou atenção foi o fato dele ter modelos de domínio distintos para escrita e para leitura de dados. Intrigado com essas peculiaridades de design pesquisei mais sobre o assunto e encontrei um blog do referido entrevistado no qual ele desenvolve melhor esses conceitos. A explanação culmina na seguinte afirmação.
















O que é uma pá de cal na minha na minha ingênua conclusão sobre DDD: "One Model to rule them all" .
Juntados os cacos, resta recompor-me e aproveitar este incidente como motivação para dar continuidade a leitura da "bíblia" e para pesquisar sobre "domínio múltiplo". Como produto destas pesquisas espero responder as perguntas do tipo: Seria o design com "domínio multiplo" uma prática comum no mundo DDD? O "domínio múltiplo" é uma condição para se praticar DDD e imutabilidade? Quais os impactos na coesão do sistema? Isso não seria uma extrapolação Chiita dos princípios de design SRP e Command-Query Separation para arquitetura? Certezas poucas e dúvidas muitas!

sexta-feira, 23 de janeiro de 2009

Nova unidade Globalcode em São José dos Campos

Enviado pelo Boletim Globalcode

A Season Treinamentos, que desde 2003 oferece a profissionais de informática a oportunidade de expandir seus conhecimentos com treinamentos avançados nas mais diversas tecnologias, agora oferece os cursos Globalcode em São José dos Campos.

A Unidade estréia a parceria oferecendo o mini-curso gratuito "MC55 - Java na prática: A carreira, ferramentas, Web 2.0 e dispositivos móveis", ministrado por Vinicius e Yara Senger no dia 12/02 às 18h30 hs.

Não perca tempo faça já sua inscrição.

Season

Java na prática
12/02/09 - São José dos Campos
Quinta das 18:30 às 21:30 hs

O primeiro curso a ser oferecido pela Season na Unidade São José dos Campos é a Academia Java, o produto carro-chefe da Globalcode com mais de 160 turmas realizadas, mais de 2500 alunos capacitados, e muitos alunos certificados.

quinta-feira, 15 de janeiro de 2009

Curso de Introdução a Desenvolvimento de Jogos em Java em São José dos Campos

A primeira edição do curso de Introdução a Desenvolvimento de Jogos em

Java (ID2J)
, será realizado na UNIFESP (Universidade Federal de São

Paulo), na cidade de São José dos Campos/SP, no dia 18 de fevereiro de

2009
, das 16:00 às 20:00; e contará com apoio da revista MundoJava e

do SJCJUG (Grupo de Java de São José dos Campos). Inscrições podem ser

feitas até o dia 12/02 e o valor da entrada é 1 Kg de alimento não

perecível.



O objetivo do curso é apresentar os fundamentos de programação em Java

para criação de jogos de computadores
. São abordados tópicos desde

apresentação da linguagem Java e conceitos de Programação Orientada a

Objetos até técnicas gráficas como sprites, colisão de objetos e

controle de memória e processamento.



Organizado pelo GUILDJ (Grupo UNIFESP de Incentivo a Lógica e

Desenvolvimento de Jogos), o curso visa apresentar os conceitos a

estudantes e interessados em desenvolvimento de jogos e permitir a

interação com outros desenvolvedores. Além dos conceitos apresentados,

serão mostrados exemplos simples mas funcionais e exercícios para

melhoria e expansão dos exemplos. Será emitido certificado de

participação.



Mais informações em http://sites.google.com/site/cursoid2j/apresentacao