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 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 Concerns public 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(); } Maintain pet Search Persistency Transaction Logging Exemplo Concerns public 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) {} Maintain pet throw new RuntimeException("Error updating rating", exe); } finally { Search em.close(); Persistency } } Transaction 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 SLOC Rate a pet 0,000 0,781 1 6 30 Maintain pet 0,884 0,921 10 119 875 Catalog 0,779 0,948 9 70 662 0,920 0,951 13 123 1245 Buy a pet 0,000 0,421 1 2 16 Map pets 0,835 0,923 8 96 940 Persistecny 0,406 0,927 3 22 349 0,889 0,891 13 26 799 0,000 0,734 1 4 102 Search for pets Logging Transaction 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.