Mensagens recentes por célio vasconcelos

20 mensagens

Avatar célio vascon...
20 mensagens
27 dias atrás

Fórum: arquitetura – Discussão: Integração continua as service

Integração contínua na nuvem é uma mão na roda.

http://www.atlassian.com/hosted/studio/
http://www.toolscloud.com/
http://www.cloudbees.com/

Mas me deparei com o seguinte problema:
“O que acontece se meu teste unitário precisar de uma conexão com BD?”

Eu precisaria de um SGBD rodando lado-a-lado no server de CI.

Subir o SGBD junto com os testes é legal, mas é possível realizar isso para bancos como ORACLE, SQLSERVER e DB2?

Ter uma máquina virtual na mesma rede do servidor de integração contínua é viavel de alguma forma? Alguém já teve esse tipo de necessidade?

Desde já agradeço!

Avatar célio vascon...
20 mensagens
1 mês atrás

Fórum: arquitetura – Discussão: HibernateMock Released

Keep Alive!

Pra quem não leu o artigo na infoq.
http://www.infoq.com/br/articles/hibernate-mock
http://code.google.com/p/hibernatemock/

A versão 2.0 sairá neste mês de março com várias melhorias.

Avatar célio vascon...
20 mensagens
1 mês atrás

Fórum: arquitetura – Discussão: Connection Pool Hibernate

O hibernate novo tem uma build só pra o C3P0. (Eu achei isso um lixo).

Isso mesmo.
Para usar as novas versões do hibernate com c3p0 você terá que subistituir o hibernate3.jar pelo que contém o c3p0 embutido.

Antigo:

1 <dependency> 2 <groupId>org.hibernate</groupId> 3 <artifactId>hibernate</artifactId> 4 <version>3.6.0.Final</version> 5 </dependency>

Novo:

1 <dependency> 2 <groupId>org.hibernate</groupId> 3 <artifactId>hibernate-c3p0</artifactId> 4 <version>3.6.0.Final</version> 5 </dependency>
Avatar célio vascon...
20 mensagens
1 mês atrás

Fórum: arquitetura – Discussão: Separando Layers em Tiers

Tiers deveria ser uma questão de implantação. (Estou certo?)
Pelo menos na teoria.
Sua interface com o serviço pode ser uma instância normal da vm ou um proxy para um serviço remoto se for usada Injeção de Dependência.

Obs: Disponibilzar um serviço para acesso remoto não implica alteração na sua APP. (pode ser feita por descritores externos, ou seja, como diogopontual disse: “continua sendo uma API java normalzinha mesmo”)

Existe algum motivo para não funcionar na prática? Gostaria de saber…

Avatar célio vascon...
20 mensagens
5 meses atrás

Fórum: arquitetura – Discussão: Desing X API

O “EmailTO” foi um erro de digitação.
Olhe a classe novamente (CORRIGIDO) …

Avatar célio vascon...
20 mensagens
5 meses atrás

Fórum: arquitetura – Discussão: Desing X API

@Fernando
É essa visão que tenho.

@Bruno
Se eu tenho uma dependência de terceiros, que é uma classe concreta, eu crio uma abstração para ela usando interface.

@Rafael
Continuo insatisfeito!
Simplifica a API mas complica a infra-estrutura, obrigado o cliente a usar um framework de construção.

Avatar célio vascon...
20 mensagens
5 meses atrás

Fórum: arquitetura – Discussão: Desing X API

Cheguei a uma conclusão que um design legal usando Good Citzen e DI prejudica a API.

Vejam se posso estar certo!

  • API “boa” com Design “ruim”
1 public class Email{ 2 private String value; 3 EmailValidator email = new EmailValidador(); 4 public Email(String value) { 5 this.value = value; 6 if (!emailValidator.isValid(value)) 7 throw new RuntimeException("Email inválido"); 8 } 9 }
  • API “ruim” com Design “bom”
1 public class Email{ 2 private String value; 3 public Email(String value, EmailValidador emailValidador) { 4 this.value = value; 5 if (!emailValidator.isValid(value)) 6 throw new RuntimeException("Email inválido"); 7 } 8 }

Eu prefiro ter uma API boa do que usar DI em tudo.

  • Supor que um dia eu vou precisar de trocar a implementação acho que é “defensivo” demais. Se por um raro acaso eu precisar, refatoro isso em 3 segundos.
  • Fazer wrapper de dependências concretas em interfaces também acho que é “defensivo” demais. Porque mais código se refatoro tão rápido?
  • É testável. Com com o PowerMock vc instrumenta em tempo de teste o retorno de isValid().

O que vocês acham?

Avatar célio vascon...
20 mensagens
5 meses atrás

Fórum: arquitetura – Discussão: TDD e baby steps

Celso,

Voltando a pergunta original!

Olhe o http://www.infoq.com/br/articles/hibernate-mock

Ele vai resolver a maioria dos problemas dessa discussão inteira.

1 @Test 2 public void recuperarTipoSistemaPorId() { 3 hibernateMock.when(TipoSistema.class).deliver("descricao", "STI"); 4 TipoSistema tsMock = hibernateMock.any(TipoSistema.class); 5 assertEquals("STI", recuperarTipoSistemaPorId(ts.getId()).getDescricao()); 6 }
  • Considere que manipular o @id nos testes é “anti-pattern”. Mesmo se não for auto-increment o hibernatemock vai gerar um válido.
  • Considere que chamar métodos do próprio negócio para realizar setup é “anti-pattern”. Não importa quanto complexo e validado é seu modelo, o hibernate mock vai inserir pra vc.
  • Considere que se precoupar com o estado do BD é “anti-pattern”. Não importa se seu banco está limpo ou sujo, o hibernatemock irá isolar os novos registros.

OBS: Fixture não combina muito bem com ORM

Para testar um método de cadastro, você poderia usar o hibernatmock para gerar pra você uma dependência que não pode ser nula nem transiente (ele prepara a árvore pra vc).

1 @Test 2 public void cadastrarSistema() { 3 TipoSistema tsMock = hibernateMock.any(TipoSistema.class); 4 try{ 5 adm.cadastrarSistema(1, "SISBB", tsMock); 6 }catch(Exception e){ 7 fail(); 8 } 9 } 1 public void cadastrarSistema(Integer id, String nome, TipoSistema tipoSistema){ 2 Sistema sistema = new Sistema(); 3 sistema.setId(id); 4 sistema.setNome(nome); 5 sistema.setTipoSistema(tipoSistema); 6 entitymanager.save(sistema); 7 }
Avatar célio vascon...
20 mensagens
5 meses atrás

Fórum: arquitetura – Discussão: teste de integracação com banco de dados (Hibernate)

Sai na infoQ HJ…

http://www.infoq.com/br/articles/hibernate-mock

Lá tem um explicação mais detalhada…

Avatar célio vascon...
20 mensagens
5 meses atrás

Fórum: arquitetura – Discussão: teste de integracação com banco de dados (Hibernate)

Pessaol tentem o HibernateMock

http://code.google.com/p/hibernatemock/

  • Não importa se o banco está limpo ou não (na maioria dos casos)
  • Resolve o problema das anotações do bean validation
  • Resolve o problema das pré condições

Acho que o “gelias” vai gostar…

Vai pra infoQ em breve…

Avatar célio vascon...
20 mensagens
6 meses atrás

Fórum: arquitetura – Discussão: HibernateMock Released

Legal a sugestão… Ainda estou avaliando o melhor lugar para colocar o código, integração continua “as service” e repositório de artefatos maven. Quero deixar o mais profissional possível… ainda vou fazer uma ultima refatoração para liberar um código melhor…

Avatar célio vascon...
20 mensagens
6 meses atrás

Fórum: arquitetura – Discussão: HibernateMock Released

Olá pessoal,

passei o último mês criando um framework para ajudar em testes relacionados a ORM.

Apesar de novo, já tem boas features e tem ajudado muito no dia a dia.

http://code.google.com/p/hibernatemock/

Contribuam experimentando…

Obrigado!

Avatar célio vascon...
20 mensagens
6 meses atrás

Fórum: arquitetura – Discussão: Mockando ORM

Guilherme, valeu pela atenção.
Na verdade estou testando a minha persistência, ou seja, meu mapeamento objeto relacional.

As vezes o setup de um objeto a ser persistido pode ser complexo, ou seja, ele pode ter 2, 3 ou mais dependências…
Essas dependências precisam ser persistentes, então preciso literalmente dar um EntityManager.find nelas antes de fazer os “set’s” no objeto que estou testando.
Além disso essas dependências precisam de ter um registro no banco para o find retornar algo.

Eu estava procurando uma maneira de obter um objeto persistente por fora da api do entitymanager, por exemplo um suposto HibernateMockFramework…

Mas ai percebi que precisaríamos de um HibernateMockFramework completo, onde até o Entitymaner seria um mock…

Imaginem testar o comportamento de seu mapeamento sem a existência de uma conexão real com o SGBD?
Facilitaria setup.
Seria mais performático.
Facilitaria asserts (atualmente fazemos mais finds na api do entitymanager até para os asserts)

Eu só estou querendo testar o mapeamento JPA mais facilmente.
O mapeamento por anotações JPA define o comportamento da persistência, então quero testar se o comportamento está ocorrendo como eu esperava.

Viajei muito?

Avatar célio vascon...
20 mensagens
7 meses atrás

Fórum: arquitetura – Discussão: Mockando ORM

1 Municipio objetoPersistenteFalso = HibernateMock.mock(Municipio.class); 2 Local local = new Local("Rua 11", objetoPersistenteFalso ); 3 LocalServico.save(local);

Eu ainda não implementei o findById do MuncipioServico.
Eu sou obrigado a seguir a ordem de implementação que o ORM impõe e implementar o MuncipioServico antes do LocalServico?

Obs: Se eu passar um objeto transiente vai ser lançada uma org.hibernate.TransientObjectException.

Avatar célio vascon...
20 mensagens
7 meses atrás

Fórum: arquitetura – Discussão: Junção de classes vs Map

Daniel,

ultimamente tenho usado um mapeamento com mapas num cenário ESB.
Descobri como é hard desenhar um “canonical data model” e como ele pode ser frágil a mudanças. Então faço as ligações entre “domínios diferentes” por meio de mapas e crio uma fachada para esconder a complexidade das iterações sobre mapas e listas.

Não é o seu caso, mas em um cenário de integração de domínios, me atendeu muito usar mapas.

Avatar célio vascon...
20 mensagens
7 meses atrás

Fórum: arquitetura – Discussão: Injetar Entitymanager num @Entity

Valeu Guilherme.
Imagino que a tentativa da standartizar essa manipulação em tempo de compilação é com APT.
Em tempo de execução ainda não vi nada em relação a especificações.

Avatar célio vascon...
20 mensagens
7 meses atrás

Fórum: arquitetura – Discussão: Injetar Entitymanager num @Entity

Obrigado André Faria!!!
Era isso que eu queria saber…
Eu tumultuei um pouco as coisas aqui pois não conhecia essa possibilidade.
Obrigado a todos…
:)

Avatar célio vascon...
20 mensagens
7 meses atrás

Fórum: arquitetura – Discussão: Injetar Entitymanager num @Entity

Obrigado Guilherme e Sérgio.
Ainda restou uma dúvida:

1 Car car = new Car("BMW"); 2 car.save();

Vejam, não estou obtendo o objeto de nenhum framework.
Imagino que esse bean (neste caso) não seja proxyável. Estou certo?
Se não é proxyável, como injetar? Restaria somente o classloader?

Avatar célio vascon...
20 mensagens
7 meses atrás

Fórum: arquitetura – Discussão: Injetar Entitymanager num @Entity

A solução futurística seria um AOP nativo, interceptando o pós-instanciação através do “new” literal…

Avatar célio vascon...
20 mensagens
7 meses atrás

Fórum: arquitetura – Discussão: Injetar Entitymanager num @Entity

Estilo ActiveRecord like.
Atualmente NÃO uso injeção

1 @Entity 2 class Person{ 3 public void save(){ 4 Persistencia.getCurrentEntityManager().save(this); 5 } 6 }

Não consigo imaginar uma solução com injeção de dependência “transparente” (não manual).

Obs: O objeto Person pode ser instanciado tanto pelo desenvolvedor quanto pelos frameworks como o JSF e HIBERNATE.

Uma solução futurística seria se a JVM me oferecesse um listener @PostConstruct independente de frameworks de terceiros… Sonho?