Upload
murilo-real
View
218
Download
0
Embed Size (px)
Citation preview
Java Pet Store 2.0Reference 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
O projeto
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…
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
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)
Tempo de marcação
• Cerca de 6~7 horas para escolher os concerns e realizar a marcação
Hierarquia de Concerns
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
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
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
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
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.