140 likes | 261 Views
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:
E N D
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
Exemplo Concerns public String addItem(Item item){ EntityManager em = emf.createEntityManager(); try{ utx.begin(); em.joinTransaction(); for(Tagtag : 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(newIndexDocument(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 publicvoidupdateItem(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(newIndexDocument(item)); } catch(Exception exe){ try { utx.rollback(); } catch (Exception e) {} throw new RuntimeException("Error updating rating", exe); } finally { em.close(); } } Maintain pet Search 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
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.