13
Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

Embed Size (px)

Citation preview

Page 1: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

Java Pet Store 2.0Reference Application

Guilherme Oliveira (gkmo)

Page 2: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

O projeto

• Desenvolvida pelo programa Java BluePrints da Sun Microsystems.

• Desenvolvida para ilustrar como J2EE 5 pode ser usado para desenvover aplicações Web 2.0

Page 3: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

O projeto

Page 4: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

O projeto

• Pontos importantes:– Componentes JSF “AJAX-enabled”– Java Persistence APIs– Aplica o MVC e outros padrões de

projeto – Mashups como Google Maps e PayPal– Usa um feed RSS– E um bocado de outras coisas…

Page 5: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

Métricas

• Total de Linhas de Código– 3807

• Total de Classes– 40

• Total de Pacotes– 8

* Páginas HTML/JSF/JSP não foram incluídas

Page 6: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

Concerns

• Concerns identificados– Maintain pet (858 LOC)– Search for pets (1245 LOC)– Rate a pet (30 LOC)– Map pets (940 LOC)– Buy a pet (16 LOC)– Catalog (662 LOC)– Persistency (349 LOC)– Logging (799 LOC)– Transactions (102 LOC)

Page 7: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

Tempo de marcação

• Cerca de 6~7 horas para escolher os concerns e realizar a marcação

Page 8: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

Hierarquia de Concerns

Page 9: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

Exemplo Concernspublic String addItem(Item item){ EntityManager em = emf.createEntityManager(); try{ utx.begin(); em.joinTransaction(); for(Tag tag : item.getTags()) { tag.incrementRefCount(); tag.getItems().add(item); em.merge(tag); } em.persist(item); utx.commit(); // index item if(bDebug) System.out.println("\n***Item id of new item is : " + item.getItemID()); indexItem(new IndexDocument(item)); } catch(Exception exe){ try { utx.rollback(); } catch (Exception e) {} throw new RuntimeException("Error persisting item", exe); } finally { em.close(); } return item.getItemID(); }

PersistencyTransaction

Logging

SearchMaintain pet

Page 10: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

Exemplo Concernspublic void updateItem(Item item){ EntityManager em = emf.createEntityManager(); try{ utx.begin(); em.merge(item); utx.commit();

// update index using delete/insert method (only one available) UpdateIndex.deleteIndex(PetstoreConstants.PETSTORE_INDEX_DIRECTORY,

item.getItemID()); indexItem(new IndexDocument(item)); } catch(Exception exe){ try { utx.rollback(); } catch (Exception e) {} throw new RuntimeException("Error updating rating", exe); } finally { em.close(); } }

PersistencyTransaction

SearchMaintain pet

Page 11: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

Dificuldades

• Compilar e rodar a aplicação• Escolher casos de uso como

concerns• Como realizar as marcações

quando se usa Annotations (JPA) e JSF/JSP

Page 12: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

Métricas

Concern DOSC DOSM CDC CDO SLOCRate a pet 0,000 0,781 1 6 30Maintain pet 0,884 0,921 10 119 875Catalog 0,779 0,948 9 70 662Search for pets 0,920 0,951 13 123 1245Buy a pet 0,000 0,421 1 2 16Map pets 0,835 0,923 8 96 940Persistecny 0,406 0,927 3 22 349Logging 0,889 0,891 13 26 799Transaction 0,000 0,734 1 4 102

Page 13: Java Pet Store 2.0 Reference Application Guilherme Oliveira (gkmo)

Conclusão

• Transation crosscuts Persistency• Logging crosscuts “everything”• Search for pets crosscuts Maintain

pet• As métricas foram úteis para os

concerns relacionados aos casos de uso, para o restante não seria necessário.