Lançado MyContainer - Agilidade e produtividade no desenvolvimento JavaEE

O MyContainer nasceu com o objetivo de tornar o desenvolvimento JEE mais simples e mais produtivo. Com ele, seu projeto tem condições de possuir testes unitários para toda a camada de negócio, incluindo controle transacional, persistência, envio de email, etc.

Este container foi implementado baseado na especificação JEE5, provendo implementações leves para a camada de persistência (JPA), controle transacional (JTA) e para Session Beans (EJB3), por isso é extremamente rápido, não impactando no processo de build do projeto.

Pode ser utilizado de forma Embeddable ou Standalone e possui plugin para execução integrada com o Maven2 e repositório remoto para fácil utilização de nossas bibliotecas.
Integrado com Jetty para subir aplicações rapidamente, aumentando a produtividade no ambiente de desenvolvimento.

Veja mais vantagens e como usar em http://code.google.com/p/mycontainer

Vale a pena conferir!

legal… mas nao tem uma linha de documentação.

O que vc quer dizer com linha de documentação? Javadoc? A documentação de como usá-lo para testes com junit e no jetty está aqui:
http://code.google.com/p/mycontainer/w/list

[]s

ráááá , pegadinha do malandro !

[quote=chun]ráááá , pegadinha do malandro !
[/quote]

???

Cara, “pegadinha do malandro” porque? Não vi nada de errado com ele.

Pegadinha no sentido da documentação :slight_smile:
Realmente o site está bem confuso… mas achei ela… :slight_smile:

Fala moçada!

Sou um dos owners do projeto e estamos abertos para críticas, sugestões, esclarecimentos de dúvidas, etc.

O projeto está caminhando bem, com bastante funcionalidades, e já está sendo utilizado em alguns projetos corporativos. De acordo com os usuários, tem dado um resultado bastante satisfatório em relação ao aumento da produtividade da equipe de desenvolvimento.

Conto com a colaboração de vocês!

Vc poderia resumir objetivamente a que ele se propõe, isto é, qual problema ele resolve ou facilita?

“Mycontainer is a Java EE embeddable light weight implementation without some common features like pools, clusters and others.”

Talvez por falta de conhecimento meu essa frase e nada pra mim deu no mesmo. :slight_smile:

A unica coisa que achei uma verdadeira “pena” eh ele não implementar pools… mas nem pool jdbc ?

seria legal ter um quick start… um exemplo pratico…

abraços.

Creio que para os objetivos que o MyContainer se propõe, não seria necessário a implementação de pool. Mesmo porque isso aumentaria seu overhead, tirando sua agilidade.
O MyContainer não tem a pretensão de substituir servidores parrudos, como o JBoss. A idéia é simplesmente dar agilidade ao desenvolvimento, portanto, quanto menos overhead melhor.

Quanto a ter exemplos práticos, no wiki do projeto tem referências para as classes, poms e configurações. Acho que está bem prático, sem enrolação e direto ao que interessa.

[quote=hwarang]Creio que para os objetivos que o MyContainer se propõe, não seria necessário a implementação de pool. Mesmo porque isso aumentaria seu overhead, tirando sua agilidade.
O MyContainer não tem a pretensão de substituir servidores parrudos, como o JBoss. A idéia é simplesmente dar agilidade ao desenvolvimento, portanto, quanto menos overhead melhor.

Quanto a ter exemplos práticos, no wiki do projeto tem referências para as classes, poms e configurações. Acho que está bem prático, sem enrolação e direto ao que interessa.[/quote]

O que é um Java EE implementation? Um servlet container? Um EJB container? O que eu posso fazer e para resolver quais problemas?

mas poxa… pool de conexao é basico em qualquer app :frowning:

saoj,

O JBoss, por exemplo, é um container JavaEE. Possui Servlet Container, EJB Container, etc.

O MyContainer provê recursos similares aos que o JBoss, por exemplo, oferece. Mas de forma mais leve, sem a robustez que o JBoss possui, pois, o foco do MyContainer é para ser utilizado em ambiente de desenvolvimento e não de produção.

O MyContainer não se propõe em momento algum ser um servidor de aplicações do porte do JBoss, Glassfish, etc.

Tentando exemplificar com situações reais quais as dificuldades que o MyContainer se propõe a resolver :

Pergunta: Para que ter um container JEE voltado para desenvolvimento e testes?
Resposta: Para não ter que subir containers JEE durante o desenvolvimento para verificar se o EJB que foi implementado está funcionando ou para verificar se a página que eu desenvolvi em JSF está alinhada e com o estilo correto.

Fato: Mas eu não preciso subir um servidor de aplicações para testar minha aplicação. Para testar meu serviço, basta eu escrever um teste unitário (com JUnit, por exemplo), e para testar se minha página está do jeito que eu queria, basta eu subir um Servlet Container (Jetty, por exemplo) com meu war instalado.

Pergunta: Como implementar e executar testes de serviços que dependem de recursos externos, por exemplo, um outro EJB ou fazer uma busca em um banco de dados? E de onde vem os dados para serem apresentados na minha página JSF?
Resposta: Você pode mockar os serviços dos quais o serviço que você está querendo testar depende e pode mockar os resultados de sua busca no banco de dados. Na parte Web, os dados também podem ser mockados.

Fato: Escrever e manter mocks é trabalhoso. E mockar o resultado de sua busca no banco de dados implica em você não testar a busca. E como você é um bom desenvolvedor, você vai implementar esse teste separadamente, fazendo com que a busca seja realmente executada no banco de dados.

Mais um fato: Para testar a busca real no banco de dados, você vai criar um arquivo SQL contendo seus adorados dados de teste. Que também é de difícil manutenção, e não possui um refactoring amigável.

Com o MyContainer:

  • Você pode escrever testes unitários para o seu serviço provendo os recursos dos quais ele depende de forma rápida e eficiente;
  • Você pode subir sua aplicação web disponibilizando acesso aos serviços reais sem perda de desempenho, com isso, você não precisa mais mockar seus dados;
  • Você não precisa mais escrever arquivos SQL contendo seus dados de teste. Você inserir seus dados de teste através de código Java, utilizando seus objetos de domínio. Assim, os problemas de manutenção praticamente não existem.

Tudo isso, com fácil configuração e sem deixar o seu processo de build extremamente lento.

Um abraço!

[quote=chun]mas poxa… pool de conexao é basico em qualquer app :frowning:

[/quote]
Chun,

Concordo plenamente com você que pool de conexões é básico para as apps…
Creio que você também concorde comigo que a responsabilidade de manter este pool, em aplicações JEE, é do container e não da aplicação.
Em ambiente de homologação e de produção, isso é vital para a escalabilidade desta aplicação. Porém, em ambiente de desenvolvimento esta escalabilidade não é importante. Neste momento é preciso que os testes sejam executados com agilidade para que possamos desenvolver de forma mais ágil e eficiente. E é este o objetivo do MyContainer (como citou o thiagoabb).

Mesmo assim, se o pool de conexões for mesmo crucial para que os seus testes rodem com sucesso, o Hibernate provê um pool (C3P0) que pode ser configurado dentro do MyContainer (http://www.hibernate.org/214.html).

Acho legal a iniciativa. A única coisa que acho meio chata é o nome: myContainer. Esse prefixo “my” já foi usado e abusado milhões de vezes em inúmeros projetos completamente não relacionados entre si. :frowning: Talvez “miniContainer” ou “microContainer” ou qualquer outro nome fosse melhor.

Mas, gostei bastante da idéia. Um container leve, que suba rápido em qualquer máquina ruinzinha e sem ter que ficar fazendo um monte de configurações malucas é ótimo. Não aguento mais esperar um tempão para subir o tomcat pelo netbeans.

E mesmo em ambientes de produção pequenos, para sites de pouca utilização (sistema de padaria, blogs pessoais e afins) ele seria algo muito legal.

[quote=chun]mas poxa… pool de conexao é basico em qualquer app :frowning:

[/quote]

Bem, ele é open source. Porque você não contribui? :wink:

o MyContainer tem alguma API para plugar componentes de terceiros ? hehehe

Não entendi exatamente o que você deseja fazer.

Mas você pode prover qualquer recurso para o container utilizando um Deployer apropriado ou implementando um novo seguindo a API de Deployer.

Um abraço!

victorwss,

Muito legal sua contribuição e sua iniciativa em incentivar o chun a contribuir com o projeto!

Obrigado pela sugestão em relação ao nome do projeto.

Um abraço!