SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Testes	
  de	
  Integração	
  	
  

com	
  OpenEJB	
  

Gabriel Ozeas
Janeiro de 2013
MOTIVAÇÃO	
  

                          Permi(r	
  execução	
  dos	
  app+testes	
  
                        (funcionais,	
  integração	
  e	
  de	
  unidade)	
  	
  
                                         localmente.	
  
       FUNCIONAIS	
  




                             Jenkins	
  
                                              rmi,webservice	
                     JBOSS	
  

                            localhost	
  




                                                                   Base	
  de	
  dados	
  



      Concorrência	
  entre	
  versões	
  do	
  sistema	
  em	
  QA	
  
                                                                                               2	
  
MOTIVAÇÃO	
  

    Focar	
  a	
  execução	
  dos	
  testes	
  em	
  parte	
  do	
  sistema.	
  
                                                                                            APLICAÇÃO	
  


     Cache	
                  Core	
        Config	
        Service	
                 Offer	
  



            Persistence	
                WebServices	
            Web	
                         Admin	
  




                                                                         Teste	
           Código	
  

                 Testes	
  

                                                                                 Deploy	
  
                                                                                                            3	
  
Testes	
  de	
  Integração	
  	
  
Focados	
  na	
  comunicação	
  entre	
  componentes	
  e	
  recursos	
  	
  
Específicos	
  de	
  um	
  cenário	
  


                                                                                         Sistema	
  
                                                                                             B	
  

                                   A	
  


                                                        fila	
  de	
  mensagens	
  

                       Teste	
  
                                                                              •      Tempo	
  de	
  execução	
  maior	
  que	
  
                                           base	
  de	
                              testes	
  de	
  unidade,	
  entre	
  
                                           dados	
                                   segundos.	
  
                                           	
                                 •      Usam	
  mesmos	
  mocks,	
  mas	
  
                                                                                     mocks	
  de	
  maior	
  tamanho.	
  
                                                                              	
  


                                                                                                                                   4	
  
(des)MOTIVAÇÃO	
  


       DEBUG	
  REMOTO	
  
       Problemas	
  de	
  concorrência	
  no	
  ambiente	
  




             *	
  Quanto	
  menos	
  debug,	
  melhor	
  
                                                               5	
  
OpenEJB	
  
§  Desde	
  1999	
  
§  Container	
  EJB	
  leve	
  	
  
§  Em	
  baixo	
  do	
  guarda-­‐chuva	
  da	
  Apache	
  desde	
  2007	
  
§  Suporte	
  a	
  várias	
  versões	
  da	
  especificação	
  EJB	
  
    §  1.1,	
  2.0,	
  2.1,	
  3.0	
  e	
  parcialmente	
  3.1	
  
§  Suporte	
  a	
  outras	
  especificações	
  como:	
  
    §  JAX-­‐WS	
  
    §  JMS	
  
    §  JCA	
  
                                                                          6	
  
OpenEJB	
  
               Implementação	
  da	
  especificação	
  EJB	
  	
  
                 presente	
  no	
  Apache	
  Gerônimo	
  
                               Ajudaram	
  as	
  versões	
  da	
  especificação	
  EJB	
  evoluirem	
  




                  O	
  Sucesso	
  veio	
  após	
  a	
  especificação	
  3.0	
  

                                   Possibilitar	
  incluir	
  EJBs	
  em	
  WARs	
  na	
  especificação	
  3.1	
  
Algumas	
  contribuições	
  
    Do	
  OpenEJB	
                API	
  de	
  container	
  embu(do	
  na	
  versão	
  3.1	
  
        EJBContainer	
  container	
  =javax.ejb.embeddable.EJBContainer.createEJBContainer();	
  
                                                                                                                    7	
  
Adicionando	
  o	
  OpenEJB	
  
        <repository>	
  
        	
  	
  	
  	
  <id>apache.repo</id>	
  
        	
  	
  	
  	
  <url>hMps://repository.apache.org/content/repositories/releases/</url>	
  
        </repository>	
  

        <dependency>	
  
        	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.apache.openejb</groupId>	
  
        	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <ar(factId>openejb-­‐core-­‐hibernate</ar(factId>	
  
        	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <type>pom</type>	
  
        	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <scope>test</scope>	
  
        </dependency>	
  
Realizando	
  lookup	
  no	
  contexto	
  
	
  @Test	
  
	
  	
  public	
  void	
  askTicketPriceShouldReturn90Cents()	
  throws	
  Excep(on	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  Context	
  context	
  =	
  new	
  Ini(alContext();	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  TicketManager	
  ScketManager	
  =	
  (TicketManager)	
  context.lookup(”TicketManagerBeanLocal");	
  
	
  	
  	
  	
  	
  	
  	
  	
  Money	
  money	
  =	
  (cketManager.getPriceForTicket(”uol.(ckets.cloud");	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  assertEquals("R$	
  0.900000",	
  money.toString());	
  
}	
  


                                                                                                                                         8	
  
Injetando	
  componentes	
  
@LocalClient	
                                                                           src/tests/resources/META-­‐INF/ejb-­‐jar.xml	
  
public	
  class	
  SimpleTestWithInjec(on	
  {	
                                                <?xml	
  version="1.0"	
  encoding="UTF-­‐8"?>	
  
                                                                                                <ejb-­‐jar	
  />	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  @EJB	
  
                                                                                                       Habilita	
  Full-­‐Scan	
  no	
  OpenEJB	
  
	
  	
  	
  	
  private	
  TicketManager	
  (cketManager;	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  @Test	
  
	
  	
  	
  	
  public	
  void	
  askTicketPriceShouldReturn90Cents()	
  throws	
  Excep(on	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  Proper(es	
  p	
  =	
  new	
  Proper(es();	
  
	
  	
  	
  	
  	
  	
  	
  	
  p.put(Context.INITIAL_CONTEXT_FACTORY,	
  "org.openejb.client.LocalIniHalContextFactory");	
  
	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  Context	
  context	
  =	
  new	
  Ini(alContext(p);	
  
	
  	
  	
  	
  	
  	
  	
  	
  context.bind("inject",	
  this);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  Money	
  money	
  =	
  (cketManager.getPriceForTicket("uol.(ckets.cloud");	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  assertEquals("R$	
  0.900000",	
  money.toString());	
  
	
  	
  	
  	
  }	
  
}	
  


                                                                                                                                                 9	
  
Criando	
  recursos	
  dentro	
  dos	
  testes	
  
Permite	
  a	
  criação	
  de	
  qualquer	
  componente	
  dentro	
  do	
  testes:	
  
Recursos	
  mais	
  interessantes:	
  
    –  DataSources	
  
    –  Connec(onFactory	
  
    –  Queue,	
  Topic	
  
    –  Mail	
  Session	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  Proper(es	
  p	
  =	
  new	
  Proper(es();	
  
    	
  	
  	
  	
  	
  	
  	
  	
  p.put("TechDayJTADataSource",	
  "new://Resource?type=DataSource");	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  p.put("TechDayJTADataSource.JdbcDriver",	
  "com.mysql.jdbc.Driver");	
  
 	
  	
  	
  	
  	
  	
  	
  	
  p.put("TechDayJTADataSource.JdbcUrl",	
  "jdbc:mysql://localhost:3306/techday");	
  
 	
  	
  	
  	
  	
  	
  	
  	
  p.put("TechDayJTADataSource.UserName",	
  "root");	
  
 	
  	
  	
  	
  	
  	
  	
  	
  p.put("TechDayJTADataSource.JtaManaged",	
  "true");	
  

 	
  	
  	
  	
  	
  	
  	
  	
  Proper(es	
  p	
  =	
  new	
  Proper(es();	
  
 	
  	
  	
  	
  	
  	
  	
  	
  p.put(”TicketPriceQueue",	
  "new://Resource?type=javax.jms.Queue");	
  
 	
  	
  	
  	
  	
  	
  	
  	
  p.put(”TicketPriceQueueResponse",	
  "new://Resource?type=javax.jms.Queue");	
  


                                                                                                                        10	
  
Adicionando	
  recursos	
  via	
  descritor	
  

O	
  descritor	
  openejb.xml	
  permi(r	
  configurar	
  recursos	
  iniciados	
  
junto	
  com	
  o	
  container.	
  

    <?xml	
  version="1.0"	
  encoding="UTF-­‐8"?>	
  
    <openejb>	
  
    	
  	
  	
  	
  <Resource	
  id="TechDayJTADataSource"	
  type="DataSource">	
  
    	
  	
  	
  	
  	
  	
  	
  	
  JdbcDriver	
  	
  com.mysql.jdbc.Driver	
  
    	
  	
  	
  	
  	
  	
  	
  	
  JdbcUrl	
  jdbc:mysql://localhost:3306/techday	
  
    	
  	
  	
  	
  	
  	
  	
  	
  UserName	
  	
  	
  	
  root	
  
    	
  	
  	
  	
  	
  	
  	
  	
  JtaManaged	
  true	
  
    	
  	
  	
  	
  </Resource>	
  
    </openejb>	
  




                                                                                         11	
  
Persistência	
  dentro	
  dos	
  testes	
  

Sempre	
  interagir	
  com	
  recursos	
  que	
  possuem	
  estado	
  
conhecido.	
  
  	
  	
  	
  	
  @Before	
  
  	
  	
  	
  	
  public	
  void	
  setUp()	
  throws	
  Excep(on	
  {	
  
  	
  	
  	
  	
  	
  	
  	
  	
  Proper(es	
  p	
  =	
  new	
  Proper(es();	
  
  	
  	
  	
  	
  	
  	
  	
  	
  p.put("openejb.conf.file",	
  "src/test/resources/openejb.xml");	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  Context	
  context	
  =	
  new	
  Ini(alContext(p);	
  
  	
  	
  	
  	
  	
  	
  	
  	
  context.bind("inject",	
  this);	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  transacSonManager.begin();	
  
  	
  	
  	
  	
  }	
  
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  @A{er	
  
  	
  	
  	
  	
  public	
  void	
  tearDown()	
  throws	
  Excep(on	
  {	
  
  	
  	
  	
  	
  	
  	
  	
  	
  transacSonManager.rollback();	
  
  	
  	
  	
  	
  }	
  

                                                                                                        12	
  
ApplicaSon	
  Composer	
  

Ajuda	
  a	
  focar	
  os	
  testes	
  somente	
  nas	
  classes	
  que	
  importam.	
  
Era	
  u(lizado	
  internamente	
  para	
  testes	
  no	
  OpenEJB.	
  
   @LocalClient	
  
   @RunWith(ApplicaSonComposer.class)	
  
   public	
  class	
  TicketEn(tyIntegra(onTest	
  {	
  
   ….	
  
   	
  	
  	
  @Module	
  
   	
  	
  	
  	
  public	
  EjbJar	
  modulo()	
  {	
  
   	
  	
  	
  	
  	
  	
  	
  	
  EjbJar	
  Scket	
  =	
  new	
  EjbJar(”ScketManager");	
  
   	
  	
  	
  	
  	
  	
  	
  	
  Scket.addEnterpriseBean(new	
  StatelessBean(TicketManagerBean.class));	
  
   	
  	
  	
  	
  	
  	
  	
  	
  return	
  Scket;	
  
   	
  	
  	
  	
  }	
  
   	
  	
  	
  	
  	
  	
  	
  	
  	
  
   	
  	
  	
  	
  @ConfiguraSon	
  
   	
  	
  	
  	
  public	
  Proper(es	
  config()	
  {	
  
   	
  	
  	
  	
  	
  	
  	
  	
  Proper(es	
  p	
  =	
  new	
  Proper(es();	
  
   	
  	
  	
  	
  	
  	
  	
  	
  p.put("TechDayJTADataSource",	
  "new://Resource?type=DataSource");	
  
   	
  	
  	
  	
  	
  	
  	
  	
  p.put("TechDayJTADataSource.JdbcDriver",	
  "com.mysql.jdbc.Driver");	
  
   	
  	
  	
  	
  	
  	
  	
  	
  p.put("TechDayJTADataSource.JdbcUrl",	
  "jdbc:mysql://localhost:3306/techday");	
  
   	
  	
  	
  	
  	
  	
  	
  	
  p.put("TechDayJTADataSource.UserName",	
  "root");	
  
   	
  	
  	
  	
  	
  	
  	
  	
  p.put("TechDayJTADataSource.JtaManaged",	
  "true");	
  
   	
  	
  	
  	
  	
  	
  	
  	
  return	
  p;	
  
   	
  	
  	
  	
  }	
  
                                                                                                                          13	
  
PROBLEMAS	
  




                DOCUMENTAÇÃO	
  


                                   14	
  
PROBLEMAS	
  




  Integração	
  com	
  outras	
  tecnologias	
  além	
  da	
  especificação	
  



                                                                                 15	
  
TomEE:	
  CDI,	
  EJB,	
  JPA,	
  JSF,	
  JSP,	
  JSTL,	
  JTA,	
  	
  
                                                          	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Servlet,	
  JavaMail,	
  	
  
                                                          	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Bean	
  Valida(on	
  
                                                          	
  
                                                          TomEE+:	
  TomEE	
  +	
  JAX-­‐RS,	
  JAX-­‐WS,	
  JMS,	
  	
  
                                                          	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Connector	
  (JCA)	
  	
  



Outras	
  projetos	
  adicionados	
  ao	
  tomcat:	
  
            	
  AcSveMQ,	
  CXF,	
  MyFaces,	
  OpenJPA,	
  OpenWebBeans	
  


JelasSc:	
  primeira	
  empresa	
  de	
  PAAS	
  que	
  uSliza	
  o	
  TomEE	
  	
  

                                                                                                                                                     16	
  
RESULTADO	
  

       Suite	
  com	
  centenas	
  de	
  testes	
  de	
  integração	
  	
  
                         roda	
  em	
  1	
  minuto,	
  	
  
                 interagindo	
  com	
  DAS	
  e	
  banco.	
  

        Podemos	
  debugar	
  localmente,	
  interagindo	
  
             com	
  ambientes	
  de	
  stage	
  e	
  qa	
  

  Permite	
  rodar	
  todos	
  os	
  testes	
  de	
  regressão	
  várias	
  vezes	
  por	
  dia	
  
                E	
  não	
  somente	
  na	
  fase	
  final	
  da	
  história.	
  



                                                                                                      17	
  
Outra	
  opção	
  




Extensões	
  para	
  
Jboss	
       OSGI	
  
Tomcat	
      CloudBees	
  
Glassfish	
   TomEE	
  
Resin	
       Je€y	
  
              Google	
  AppEngine	
  	
  
Weld	
  
                 Spring	
  
                 	
  



                                            18	
  
Diferenças	
  

       OpenEJB	
  
                                             embu(do	
  

                       APP+TESTES	
              Container	
  




                                         copia	
  
    Arquillian	
  




                                        Servidor	
  de	
  Aplicação	
  	
  
                     APP+TESTES	
  
                                            ou	
  Container	
  


                                                                         19	
  
@RunWith(Arquillian.class)	
  
public	
  class	
  GerenciadorReservasTest	
  {	
  
	
  	
  	
  	
  @EJB	
  
	
  	
  	
  	
  private	
  GerenciadorReservas	
  reservas;	
  
	
  
	
  	
  	
  	
  @Deployment	
  
	
  	
  	
  	
  public	
  sta(c	
  JavaArchive	
  gerandoArquivoDeploy()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  JavaArchive	
  arquivo	
  =	
  ShrinkWrap.create(JavaArchive.class);	
  
	
  	
  	
  	
  	
  	
  	
  	
  arquivo.addPackages(true,	
  “uol.techday.(cketmanager”);	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  arquivo.addAsManifestResource(EmptyAsset.INSTANCE,	
  ”ejb-­‐jar.xml");	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  arquivo;	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  @Test	
  
	
  	
  	
  	
  public	
  void	
  reservaDeveGerarCobranca()	
  throws	
  Excep(on	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  ….	
  
	
  	
  	
  	
  }	
  




                                                                                                                  20	
  
O	
  Arquillian	
  é	
  mais	
  flexível	
  que	
  o	
  
                             OpenEJB	
  

          Mas	
  por	
  quê	
  não	
  usamos	
  os	
  Arquillian?	
  


         Projeto	
  recente,	
  depedências	
  em	
  ALPHA	
  




Fácil	
  trocar	
  um	
  pelo	
  outro,	
  pois	
  o	
  OpenEJB	
  te	
  obriga	
  	
  
                      a	
  seguir	
  especificação	
  

                                                                                          21	
  
Obrigado!	
  




                22	
  

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (19)

Curso de Servlets
Curso de ServletsCurso de Servlets
Curso de Servlets
 
Java 14
Java 14Java 14
Java 14
 
Otimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - TchelinuxOtimizando aplicações Zend Framework - Tchelinux
Otimizando aplicações Zend Framework - Tchelinux
 
Apache Struts
Apache StrutsApache Struts
Apache Struts
 
Java 9, 10, 11
Java 9, 10, 11Java 9, 10, 11
Java 9, 10, 11
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
 
Revisão do postgresql.conf
Revisão do postgresql.confRevisão do postgresql.conf
Revisão do postgresql.conf
 
Gerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetGerenciamento de Configurações - Puppet
Gerenciamento de Configurações - Puppet
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e applets
 
Curso de CVS - Lab 4
Curso de CVS - Lab 4Curso de CVS - Lab 4
Curso de CVS - Lab 4
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
Servlets
ServletsServlets
Servlets
 
Java 08
Java 08Java 08
Java 08
 
Resumo Anotacoes Certificacao SCWCD 5
Resumo Anotacoes Certificacao SCWCD 5Resumo Anotacoes Certificacao SCWCD 5
Resumo Anotacoes Certificacao SCWCD 5
 
J530 8 cmp
J530 8 cmpJ530 8 cmp
J530 8 cmp
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Sistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBSistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJB
 
Spring: uma introdução prática
Spring: uma introdução práticaSpring: uma introdução prática
Spring: uma introdução prática
 

Ähnlich wie Testes de Integração com OpenEJB

Implementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java JavaImplementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java Javaelliando dias
 
Testes Funcionais com Selenium
Testes Funcionais com Selenium Testes Funcionais com Selenium
Testes Funcionais com Selenium Mayron Cachina
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade IIIJoão Lourenço
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeRepensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeAdriano Tavares
 
Cactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusCactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusDenis L Presciliano
 
001 cesep - turma java
001   cesep - turma java001   cesep - turma java
001 cesep - turma javaJunior Souza
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonSuporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonRicardo Ferreira
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
Infinispan - Distribuição de Dados com Java
Infinispan - Distribuição de Dados com JavaInfinispan - Distribuição de Dados com Java
Infinispan - Distribuição de Dados com JavaWagner Roberto dos Santos
 

Ähnlich wie Testes de Integração com OpenEJB (20)

J unit xp
J unit xpJ unit xp
J unit xp
 
Implementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java JavaImplementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java Java
 
Testes Funcionais com Selenium
Testes Funcionais com Selenium Testes Funcionais com Selenium
Testes Funcionais com Selenium
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java eeRepensando padrões e boas práticas java ee
Repensando padrões e boas práticas java ee
 
Cactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta CactusCactus - Testes em J2EE com Jakarta Cactus
Cactus - Testes em J2EE com Jakarta Cactus
 
Benchmarking Tools
Benchmarking ToolsBenchmarking Tools
Benchmarking Tools
 
GUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EEGUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EE
 
001 cesep - turma java
001   cesep - turma java001   cesep - turma java
001 cesep - turma java
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Apache e Java
Apache e JavaApache e Java
Apache e Java
 
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonSuporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
 
JUnit
JUnitJUnit
JUnit
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Maven
MavenMaven
Maven
 
Introdução ao maven
Introdução ao mavenIntrodução ao maven
Introdução ao maven
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)
 
Infinispan - Distribuição de Dados com Java
Infinispan - Distribuição de Dados com JavaInfinispan - Distribuição de Dados com Java
Infinispan - Distribuição de Dados com Java
 

Testes de Integração com OpenEJB

  • 1. Testes  de  Integração     com  OpenEJB   Gabriel Ozeas Janeiro de 2013
  • 2. MOTIVAÇÃO   Permi(r  execução  dos  app+testes   (funcionais,  integração  e  de  unidade)     localmente.   FUNCIONAIS   Jenkins   rmi,webservice   JBOSS   localhost   Base  de  dados   Concorrência  entre  versões  do  sistema  em  QA   2  
  • 3. MOTIVAÇÃO   Focar  a  execução  dos  testes  em  parte  do  sistema.   APLICAÇÃO   Cache   Core   Config   Service   Offer   Persistence   WebServices   Web   Admin   Teste   Código   Testes   Deploy   3  
  • 4. Testes  de  Integração     Focados  na  comunicação  entre  componentes  e  recursos     Específicos  de  um  cenário   Sistema   B   A   fila  de  mensagens   Teste   •  Tempo  de  execução  maior  que   base  de   testes  de  unidade,  entre   dados   segundos.     •  Usam  mesmos  mocks,  mas   mocks  de  maior  tamanho.     4  
  • 5. (des)MOTIVAÇÃO   DEBUG  REMOTO   Problemas  de  concorrência  no  ambiente   *  Quanto  menos  debug,  melhor   5  
  • 6. OpenEJB   §  Desde  1999   §  Container  EJB  leve     §  Em  baixo  do  guarda-­‐chuva  da  Apache  desde  2007   §  Suporte  a  várias  versões  da  especificação  EJB   §  1.1,  2.0,  2.1,  3.0  e  parcialmente  3.1   §  Suporte  a  outras  especificações  como:   §  JAX-­‐WS   §  JMS   §  JCA   6  
  • 7. OpenEJB   Implementação  da  especificação  EJB     presente  no  Apache  Gerônimo   Ajudaram  as  versões  da  especificação  EJB  evoluirem   O  Sucesso  veio  após  a  especificação  3.0   Possibilitar  incluir  EJBs  em  WARs  na  especificação  3.1   Algumas  contribuições   Do  OpenEJB   API  de  container  embu(do  na  versão  3.1   EJBContainer  container  =javax.ejb.embeddable.EJBContainer.createEJBContainer();   7  
  • 8. Adicionando  o  OpenEJB   <repository>          <id>apache.repo</id>          <url>hMps://repository.apache.org/content/repositories/releases/</url>   </repository>   <dependency>                          <groupId>org.apache.openejb</groupId>                          <ar(factId>openejb-­‐core-­‐hibernate</ar(factId>                          <type>pom</type>                          <scope>test</scope>   </dependency>   Realizando  lookup  no  contexto    @Test      public  void  askTicketPriceShouldReturn90Cents()  throws  Excep(on  {                  Context  context  =  new  Ini(alContext();                                    TicketManager  ScketManager  =  (TicketManager)  context.lookup(”TicketManagerBeanLocal");                  Money  money  =  (cketManager.getPriceForTicket(”uol.(ckets.cloud");                                    assertEquals("R$  0.900000",  money.toString());   }   8  
  • 9. Injetando  componentes   @LocalClient   src/tests/resources/META-­‐INF/ejb-­‐jar.xml   public  class  SimpleTestWithInjec(on  {   <?xml  version="1.0"  encoding="UTF-­‐8"?>   <ejb-­‐jar  />                    @EJB   Habilita  Full-­‐Scan  no  OpenEJB          private  TicketManager  (cketManager;                    @Test          public  void  askTicketPriceShouldReturn90Cents()  throws  Excep(on  {                  Proper(es  p  =  new  Proper(es();                  p.put(Context.INITIAL_CONTEXT_FACTORY,  "org.openejb.client.LocalIniHalContextFactory");                                Context  context  =  new  Ini(alContext(p);                  context.bind("inject",  this);                                    Money  money  =  (cketManager.getPriceForTicket("uol.(ckets.cloud");                                    assertEquals("R$  0.900000",  money.toString());          }   }   9  
  • 10. Criando  recursos  dentro  dos  testes   Permite  a  criação  de  qualquer  componente  dentro  do  testes:   Recursos  mais  interessantes:   –  DataSources   –  Connec(onFactory   –  Queue,  Topic   –  Mail  Session                    Proper(es  p  =  new  Proper(es();                  p.put("TechDayJTADataSource",  "new://Resource?type=DataSource");                    p.put("TechDayJTADataSource.JdbcDriver",  "com.mysql.jdbc.Driver");                  p.put("TechDayJTADataSource.JdbcUrl",  "jdbc:mysql://localhost:3306/techday");                  p.put("TechDayJTADataSource.UserName",  "root");                  p.put("TechDayJTADataSource.JtaManaged",  "true");                  Proper(es  p  =  new  Proper(es();                  p.put(”TicketPriceQueue",  "new://Resource?type=javax.jms.Queue");                  p.put(”TicketPriceQueueResponse",  "new://Resource?type=javax.jms.Queue");   10  
  • 11. Adicionando  recursos  via  descritor   O  descritor  openejb.xml  permi(r  configurar  recursos  iniciados   junto  com  o  container.   <?xml  version="1.0"  encoding="UTF-­‐8"?>   <openejb>          <Resource  id="TechDayJTADataSource"  type="DataSource">                  JdbcDriver    com.mysql.jdbc.Driver                  JdbcUrl  jdbc:mysql://localhost:3306/techday                  UserName        root                  JtaManaged  true          </Resource>   </openejb>   11  
  • 12. Persistência  dentro  dos  testes   Sempre  interagir  com  recursos  que  possuem  estado   conhecido.          @Before          public  void  setUp()  throws  Excep(on  {                  Proper(es  p  =  new  Proper(es();                  p.put("openejb.conf.file",  "src/test/resources/openejb.xml");                                    Context  context  =  new  Ini(alContext(p);                  context.bind("inject",  this);                                    transacSonManager.begin();          }                    @A{er          public  void  tearDown()  throws  Excep(on  {                  transacSonManager.rollback();          }   12  
  • 13. ApplicaSon  Composer   Ajuda  a  focar  os  testes  somente  nas  classes  que  importam.   Era  u(lizado  internamente  para  testes  no  OpenEJB.   @LocalClient   @RunWith(ApplicaSonComposer.class)   public  class  TicketEn(tyIntegra(onTest  {   ….        @Module          public  EjbJar  modulo()  {                  EjbJar  Scket  =  new  EjbJar(”ScketManager");                  Scket.addEnterpriseBean(new  StatelessBean(TicketManagerBean.class));                  return  Scket;          }                            @ConfiguraSon          public  Proper(es  config()  {                  Proper(es  p  =  new  Proper(es();                  p.put("TechDayJTADataSource",  "new://Resource?type=DataSource");                  p.put("TechDayJTADataSource.JdbcDriver",  "com.mysql.jdbc.Driver");                  p.put("TechDayJTADataSource.JdbcUrl",  "jdbc:mysql://localhost:3306/techday");                  p.put("TechDayJTADataSource.UserName",  "root");                  p.put("TechDayJTADataSource.JtaManaged",  "true");                  return  p;          }   13  
  • 14. PROBLEMAS   DOCUMENTAÇÃO   14  
  • 15. PROBLEMAS   Integração  com  outras  tecnologias  além  da  especificação   15  
  • 16. TomEE:  CDI,  EJB,  JPA,  JSF,  JSP,  JSTL,  JTA,                                  Servlet,  JavaMail,                                  Bean  Valida(on     TomEE+:  TomEE  +  JAX-­‐RS,  JAX-­‐WS,  JMS,                                      Connector  (JCA)     Outras  projetos  adicionados  ao  tomcat:    AcSveMQ,  CXF,  MyFaces,  OpenJPA,  OpenWebBeans   JelasSc:  primeira  empresa  de  PAAS  que  uSliza  o  TomEE     16  
  • 17. RESULTADO   Suite  com  centenas  de  testes  de  integração     roda  em  1  minuto,     interagindo  com  DAS  e  banco.   Podemos  debugar  localmente,  interagindo   com  ambientes  de  stage  e  qa   Permite  rodar  todos  os  testes  de  regressão  várias  vezes  por  dia   E  não  somente  na  fase  final  da  história.   17  
  • 18. Outra  opção   Extensões  para   Jboss   OSGI   Tomcat   CloudBees   Glassfish   TomEE   Resin   Je€y   Google  AppEngine     Weld   Spring     18  
  • 19. Diferenças   OpenEJB   embu(do   APP+TESTES   Container   copia   Arquillian   Servidor  de  Aplicação     APP+TESTES   ou  Container   19  
  • 20. @RunWith(Arquillian.class)   public  class  GerenciadorReservasTest  {          @EJB          private  GerenciadorReservas  reservas;            @Deployment          public  sta(c  JavaArchive  gerandoArquivoDeploy()  {                  JavaArchive  arquivo  =  ShrinkWrap.create(JavaArchive.class);                  arquivo.addPackages(true,  “uol.techday.(cketmanager”);                        arquivo.addAsManifestResource(EmptyAsset.INSTANCE,  ”ejb-­‐jar.xml");                    return  arquivo;          }            @Test          public  void  reservaDeveGerarCobranca()  throws  Excep(on  {                  ….          }   20  
  • 21. O  Arquillian  é  mais  flexível  que  o   OpenEJB   Mas  por  quê  não  usamos  os  Arquillian?   Projeto  recente,  depedências  em  ALPHA   Fácil  trocar  um  pelo  outro,  pois  o  OpenEJB  te  obriga     a  seguir  especificação   21  
  • 22. Obrigado!   22