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
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(); } Persistency Transaction Logging Search Maintain pet
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) {} throw new RuntimeException("Error updating rating", exe); } finally { em.close(); } Persistency Transaction Search Maintain 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 ConcernDOSCDOSMCDCCDOSLOC Rate a pet0,0000, Maintain pet0,8840, Catalog0,7790, Search for pets0,9200, Buy a pet0,0000, Map pets0,8350, Persistecny0,4060, Logging0,8890, Transaction0,0000,
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.