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.
Download

Slide 1