
Akita On Rails – um excelente blog com bastante conteúdo sobre Ruby On Rails, vale a pena dar uma olhada se você esta interessado no framework.
Desenvolvimento ágil – é o blog da empresa Improve IT, gosto principalmente do podcast sobre desenvolvimento ágil deles.
A Companhia – uma ótima forma de se ler sobre administração de empresas, escrita e administrada pelo “Grande Lider da Silva”.
Fragmental – Excelente blog do Philip Calçado, ele não posta todos os dias, mas quando posta vale a pena a leitura!
Blog do TaQ – O blog do TaQ é o blog do Eustaquio Rangel,também fala bastante sobre Ruby On Rails, e como eu ando bastante interessado neste assunto, é mais um para a minha lista de leituras, excelentes textos e ótimas dicas.
Acho que era isto, ja contribui para o BlogDay 2007
Uma das coisas legais de trabalhar com TI é que todo dia tem novidade, uma das coisas ruins de trabalhar com TI é que precisamos pelo menos ter uma idéia sobre tudo o que esta acontecendo …
Então, segue mais um daqueles posts com poucas opiniões e muitos links …
Um pouco sobre o Glassfish a implementação de referência do Java EE 5 (e um ótimo servidor de aplicações):
Tags: Dia a Dia, dia-dia, Eclipse, Java, Java EE, links, produtividade, Spring Framework
Uma pergunta que se vê muito em fóruns e listas de discução de java, .net, delphi,
Em Java não existe uma forma minimamente segura de se responder isto, exceto pela própria experiência, o que se vê por ai no mercado e nas próprias listas ou fóruns …
Uma coisa que achei muito legal no site Working With Rails é que todos os que se registram la, ou pelo menos uma boa parte, informa quais gems ou plugins do rails que estão utilizando ou já utilizaram, e com isto, se você programa em Ruby, você tem uma forma mais “concreta” de saber “o que estão utilizando no mercado” …
Para saber quais GEMS são mais utilizadas é só clicar aqui, e para saber quais plugins do rails são mais utilizados basta clicar aqui.
Não que isto seja a informação mais importante do mundo, mas é uma forma fácil de saber se você vai encontrar suporte relativamente fácil para aquela super ultra mega solução para o seu maior problema de todos os tempos das ultimas duas horas
E por falar no Working With Rails, se algum de vocês se animar a me recomendar por la, este é o link para o meu profile
Tags: Ruby

Este é bem rapidinho:
Depois do JRuby que é um interpretador de Ruby para a JVM, ou seja, permite que aplicações Ruby rodem sobre a JVM, agora eu encontro o projeto XRuby (acho que deve significar “Cross Ruby”), que é um compilador que transforma código fonte Ruby em bytecode java (arquivos .rb transformados em arquivos .class).
O projeto ainda esta em andamento (estão trabalhando na versão 0.4 agora), mas isto com certeza promete ficar bem divertido ![]()
Imagine a facilidade do Ruby com a performance do JIT
O XRuby eu ainda não sei, mas na próxima versão do JRuby vai ser possível chamar código java a partir do código ruby (já é possível chamar código ruby a partir de código java), o que vai facilitar muito escrever aplicações utilizando a ferramenta certa para cada situação
Por tanto, como eu comentei aqui Java esta indo para o caminho certo, é cada vez mais uma plataforma, em vez de apenas uma linguagem
Tags: Ruby
A SUN finalmente esta atualizando as provas da certificação SCEA para Java EE 5 (a versão anterior ainda falava de EJB 1.2, na verdade 1.2 e 2.0).
As inscrições para a prova BETA da certificação vão abrir no dia 20 de setembro de 2007.
A vantagem das provas beta é que são gratuitas, a desvantagem é que normalmente elas tem o dobro de questões que a prova normal ![]()
Mas passando na prova beta, você ganha o certificado sem desenbolsar R$1 …
Mais detalhes sobre o conteúdo da prova podem ser encontrados nesta thread do JaraRanch, mas basicamente é o seguinte:
Agora não tenho mais desculpas para não fazer a prova ![]()
Como na prova atual, a SCEA é dividida em 3 partes, uma prova objetiva, o desenvolvimento de uma arquitetura, e perguntas sobre a arquitetura desenvolvida …
Para se registrar, a partir do dia 20 de setembro, acessar o site http://www.2test.com/ e seguir os passos, ou ligar para o centro prometric mais próximo
Tags: Java EE, produtividade
Não sou um especialista em TDD, na verdade escrevo muito menos testes do que seria realmente o ideal, mas depois da experiência que estou tendo com o SCRUM (ele é usado para gerenciar o projeto que estou participando no momento), comecei a me interessar mais sobre metodologias ágeis (até o ano passado quase todos os projetos em que eu trabalhava utilizavam aquele RUP Desengonçado/Waterfall bastante difundido aqui pelo brasil).
Andei dando uma olhada em TDD e comecei a estudar um pouco mais sobre testes (até com uma forcinha do Ruby On Rails), mas não sei se peguei bem os conceitos …
Pelo que eu entendi a idéia é mais ou menos assim:
Teste unitário = testar um método ou uma seqüencia de métodos de uma classe, sem a interferência de outras classes do sistema, caso a classe em testes tenha alguma dependência, serão fornecidos Mocks para substituir estas dependências, assim garantindo o comportamento esperado das dependências …
Teste de integração = testar um método ou uma seqüencia de métodos de uma classe, mas com as dependências reais para garantir que elas funcionam em conjunto …
Não sei se eu entendi corretamente, mas se for isto mesmo, segue um exemplo para quem estiver trabalhando com o Spring Framework …
Primeiro uma classe que será testada, esta classe extremamente complexa é a classe de negócios do exemplo, que contem um método “sum”, que recebe dois inteiros e deve retornar a soma destes números …
package sptestexample;
public class MyBusinessClass
{
public int sum(int i, int j)
{
return i+j;
}
}
Depois, eu criei um teste unitário simples, que instância manualmente a classe, se ela tivesse alguma dependência esta seria fornecida e os métodos a serem testados são chamados …
package sptestexample;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
public class MyBusinessTestExample
{
@Before
public void setUp() throws Exception
{
}
@Test
public void testCalculation() throws Exception
{
MyBusinessClass cls = new MyBusinessClass();
Assert.assertEquals(2, cls.sum(1,1));
int res = cls.sum(Integer.MAX_VALUE,Integer.MAX_VALUE);
Assert.assertEquals(res, Integer.MAX_VALUE+Integer.MAX_VALUE);
}
}
Como os testes unitários estão passando e me dizendo que a classe funciona, agora eu vou fazer um teste de integração, que neste exemplo vai consistir em buscar a classe do contexto do Spring Framework, que ja vai ter fornecido todas as dependências reais da classe, e vou repetir o teste anterior, mas tendo a classe integrada com o resto do sistema (dêem um desconto, é um exemplo simples
)
package sptestexample;
import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
public class MyBusinessSpringTestExample extends AbstractDependencyInjectionSpringContextTests
{
protected MyBusinessClass myBusinessClass;
@Override
protected String getConfigPath()
{
return getClass().getSimpleName() + ".xml";
}
public MyBusinessSpringTestExample()
{
setPopulateProtectedVariables(true);
}
public void testCalculation()
{
assertEquals(2, myBusinessClass.sum(1,1));
int res = myBusinessClass.sum(Integer.MAX_VALUE,Integer.MAX_VALUE);
assertEquals(res, Integer.MAX_VALUE+Integer.MAX_VALUE);
}
}
Para que este teste funcione, eu precisei configurar a aplicação, pois o spring precisa de um XML para instanciar o contexto, neste caso o método getConfigPath esta retornando o mesmo nome da classe, por tanto o spring vai tentar inicializar o contexto com um arquivo de mesmo nome da classe, no mesmo package da classe, e o método setPopulateProtectedVariables que é chamado no construtor do teste, diz para o spring configurar as propriedades do TestCase usando as variáveis protected, ou seja, assim não preciso criar os setters das propriedades …
Como este é um exemplo complexo, o arquivo de configuração ficou como no exemplo abaixo:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" default-autowire="byName"> <bean id="myBusinessClass" class="sptestexample.MyBusinessClass"> </bean> </beans>
Beleza o meu teste de integração esta funcionando também …
Considerando que este é o conceito correto, vamos explicar o que o spring fez para ajudar nos testes de integração e um pouco mais sobre o que ele pode ajudar também
A classe “AbstractDependencyInjectionSpringContextTests” como pode ser visto na imagem a baixo, é a classe base para todos os testes que precisam de um contexto do spring para funcionar (pelo que eu entendi, os testes de integração), ela permite injeção de dependências nos TestCases mas temos também algumas classes com recursos a mais para ajudar em situações mais especificas …

A classe “AbstractTransactionalDataSourceSpringContextTests” adiciona ainda alguns métodos auxiliares para os testes que vão mexer diretamente com JDBC …
A classe “AbstractAnnotationAwareTransactionalTests” adiciona ainda algumas anotações que podem ajudar bastante, como por exemplo:
@Transactional – que pode ser utilizada para forçar que um teste seja executado dentro de uma transação read-only
@NotTransactional – que faz com que um teste seja executado sem uma transação (o contrário do padrão para esta classe)
A classe “AbstractJpaTests” que tem diversos helpers para testar código que acessa a API JPA
E por último mas não menos importante, a classe “AbstractAspectjJpaTests” que faz a mesma coisa que a anterior, mas habilita o loadtime-weaving do aspectJ para que os testes rodem um pouco mais rápido …
Acho que era isto, a idéia deste post era verificar se eu entendi corretamente o que é cada tipo de teste, e ja deixar alguns exemplos para quem precisa testar aplicações que utilizam o Spring Framework
Tags: Java, produtividade, Spring Framework
Aproveitando que já falei do blog ontem (tudo bem, usei a palavra WordPress apenas), segue uma série de links e comentários sobre Blogging e WordPress.
Primeiro, um dos motivos para grande parte dos posts deste blog, é que uso ele como referencia para coisas que não quero esquecer, por exemplo algum exemplo de código que posto aqui, quase sempre uso depois, este é o segundo maior motivo para que eu escreva por aqui, o primeiro é que gosto do “IBOPE” hehehe
Seguindo com o offtopic …
Este site de nome muito doido, faz um trabalho bem legal, você fornece a sua URL e ele mostra o PageRank, BackLinks, Indexação das páginas e mais um monte de coisas sobre qualquer URL
Segundo o pessoal do “nerdown” a empresa Vikiworks, criou um plugin para o dreamweaver para facilitar a criação de temas para o wordpress, vamos ver o que vai sair disto ![]()
Acho que vai começar a aparecer um monte de temas para wordpress com aqueles javascripts chinelões do DW
Também tem gente dizendo, e eu concordo, que o WordPress pode ser utilizado para diversos tipos de sites, e não apenas para blogs.
Depois das mudanças do google no algoritmo de calculo do PageRank, ter um “BlogRoll” muito grande no blog pode prejudicar o seu ranking no google,
Como todos sabem, tem maluco pra tudo, mas este negõcio de “ProBlogger” ta ficando meio ridiculo, tem gente pagando por comentários nos seus blogs, sinceramente, eu não acho graça nenhuma nisto, claro, uma das partes mais divertidas de ter um blog, é quando eu escrevo alguma coisa e um monte de gente comenta, mas se forem pagos para isto perde toda a graça …
Não sei se é só comigo que aconteceu, mas depois que diminui bastante a quantidade de adsense no blog, aumentaram os valores por click (o que compensou a diminuição deles).
O Ideal na minha opinião pelo menos, seria conseguir umas duas empresas para colocar o logo ali na barra lateral, ai poderia ficar só com isto e tirar todo o adsense (só não to afim de pagar pra escrever no blog, ja que hoje o blog se paga sozinho
)
Acho que era isto ![]()
Prometo que o próximo post vai ser mais interessante
Se por algum motivo você realmente precisar instalar um servidor de produção em uma maquina com Windows, ou se isto for necessário para o seu sistema (precisa ganhar o selo de compatibilidade da MS), ou simplesmente por que você gosta de botar o dinheiro da empresa fora …
Seja qual for a razão que você tiver para querer fazer deploy de um servidor de aplicações Java EE em um servidor windows, você vai querer que ele seja um “serviço do windows”, correto?
O problema é que o instalador do glassfish não sabe configurar um serviço windows …
Ai alguem vai dizer que é possível utilizar o Java Service Wrapper, até é possível, mas não é exatamente prático fazer isto …
Esta semana eu encontrei um post no blog do Ryan de Laplante, que fez o grande favor para todos os que utilizam o glassfish, de criar um comando simples (que esperamos que seja incluído nas próximas versões do glassfish).
O utilitário que ele criou permite com apenas um comando configurar um serviço windows para um dominio do glassfish (cada dominio é como se fosse uma instancia do servidor de aplicações).
Beleza, mas como fazer isto?
é só baixar o arquivo GlassfishSvc.jar disponibilizado no blog dele e rodar o comando:
java -jar GlassfishSvc.jar -i
o -i vai instalar o servidor com as opções padrão, rodando a aplicação sem parâmetro nenhum, ela imprime todas as opções possíveis.
Quem quiser fazer o mesmo para a sua próxima super mega killer aplicação a ser desenvolvida no futuro próximo, é só dar uma olhada no código fonte que esta disponível no mesmo post do blog dele também.
Lembram que eu falei a algum tempo atrás que estava rodando o blog (WordPress) no tomcat?
Pois é, acabou de sair um tutorial de como fazer a mesma coisa rodando no glassfish, ou seja, rodar aplicações PHP no glassfish.
Sinceramente eu não entendi a necessidade de um tutorial, até por que basta pegar o quercus.war e colocar a tua aplicação PHP ali dentro que funciona, mas para quem quiser um passo a passo, este tutorial é um bom começo.
Antes de seguir com o problema, vamos começar com um joguinho de procure o erro:
Alguém viu alguma coisa extranha na imagem acima?
Ninguém?
Se vocês prestarem atenção no Package Explorer, ele não apresenta nenhum erro na classe “Teste”, mas o editor de código diz que a classe “TestEntity” não possui o método “save” …
O legal é que isto vai acontecer sempre que eu abrir o editor de código, por tanto não é a famosa “perda de sincronia” que acontece de vez em quando no Eclipse.
Mas se eu mandar executar a classe “Teste” vai ocorrer tudo sem problemas, mesmo com o erro que é mostrado no editor de código, por que ela compila sem problemas …
Para se ver livre deste erro, tive que exportar um jar do do projeto onde estão as classes com aspectos, e mover a classe “Teste” para outro projeto, la o editor de código entende que existe o método “save” na classe “TestEntity” que foi introduzido pela compilação do AspectJ, da mesma forma que a classe executa sem problemas no primeiro projeto …
Por tanto, o editor de java do Eclipse, não fica nem sabendo que existe o compilador do AspectJ e que este altera as classes em tempo de execução, mas o package explorer, como tem os erros marcados pelo compilador, sabe que a classe esta OK, pois a compilação ocorreu sem problema algum …
Como eu fiz para confundir o eclipse?
Criei um projeto do AspectJ, e escrevi o seguinte aspecto:
package introduction;
public aspect EntityAspects
{
declare parents: (@javax.persistence.Entity *) extends SmartEntity;
public boolean SmartEntity.save()
{
return false;
}
}
Depois eu criei a classe TestEntity:
package introduction;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class SmartEntity
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Integer id;
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public abstract boolean save();
}
Criei uma Entity que teria os métodos injetados:
package introduction;
import javax.persistence.Entity;
@Entity
public class TestEntity
{
}
Depois disto foi só criar uma classe que usaria a classe TestEntity (qualquer uma com um public static void main)
package introduction;
import introduction.TestEntity;
public class Teste
{
public static void main(String[] args){
TestEntity te = new TestEntity();
System.out.println(te.save());
}
}
Prontinho, o eclipse se perdeu, mas se você mandar isto executar, vai funcionar sem problema algum.
Vou realizar o mesmo teste com o suporte a aspectJ do IntelliJ IDEA e do Netbeans a noite para ver se isto acontece com eles também, mas eu fiquei bastante decepcionado com o AJDT
PS.: sim, este teste foi influencia do Ruby On Rails, estava testando se seria possível com uma combinação de AOP + JPA + Qualquer outra coisa que eu não pensei ainda, um ambiente tão produtivo quanto o RoR
Na verdade, neste caso, apenas uma mistura de ActiveRecord com Repository, que ja ficaria bem legal …
A parte de CoC (Convencion over Configuration) é possível implementar em java sem problemas
UPDATE: instalei o plugin deste link no NetBeans e o comportamento é tão estranho quanto o do Eclipse, o netbeans marca o arquivo com erro no código fonte e no package explorer, mas se mandar rodar a aplicação, funciona tranqüilo