UOL Tech Day: Testes de Integração com OpenEJB
Upcoming SlideShare
Loading in...5
×
 

UOL Tech Day: Testes de Integração com OpenEJB

on

  • 344 views

Apresentação sobre testes de integração com o OpenEJB

Apresentação sobre testes de integração com o OpenEJB

Statistics

Views

Total Views
344
Views on SlideShare
342
Embed Views
2

Actions

Likes
0
Downloads
2
Comments
0

1 Embed 2

http://www.linkedin.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

UOL Tech Day: Testes de Integração com OpenEJB UOL Tech Day: Testes de Integração com OpenEJB Presentation Transcript

  • Testes  de  Integração    com  OpenEJB  Gabriel OzeasJaneiro 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