$30 off During Our Annual Pro Sale. View Details »

Spring Petclinic sample application

Spring Petclinic sample application

Diagrams and code samples that give a brief overview of the Spring Petclinic sample application.

Michael Isvy

March 20, 2013
Tweet

More Decks by Michael Isvy

Other Decks in Programming

Transcript

  1. Spring-­‐Petclinic  

    View Slide

  2. Spring  Petclinic  
    •  h/ps://github.com/SpringSource/spring-­‐petclinic  
    •  h/p://spring-­‐petclinic.cloudfoundry.com/  

    View Slide

  3. 3  profiles  
    jdbc  
    default  (JPA)  
    Spring  Data  JPA  
    Repository
    Service @Cacheable  
    @TransacGonal  
    Controller
    Bean  ValidaGon  
    Spring  @MVC  annotaGons  
    Views
    Bootstrap  (CSS)  
    JSP  with    
    custom  tags   Thymeleaf  
    Dandelion  
    webjars  
    | |
    &&
    &&
    +

    View Slide

  4. Topics  
    •  Core  Spring  
    •  The  Web  layer  

    View Slide

  5. Data  Access
     
    VisitRepository  
    JdbcVisitRepository   JpaVisitRepo   SpringDataJpa  
    VisitRepo  
    findByPetId: 16 lines of code findByPetId: 6 (short)
    lines of code
    findByPetId: 0 lines (interface
    declaration is enough based on
    naming conventions)
    In order to select which implementation should be used, select the
    Appropriate bean profile inside web.xml (jdbc, jpa or spring-data-jpa)

    View Slide

  6. Bean  profiles  
    business-­‐config.xml    
    3  profiles  
    default  (JPA)  
    jdbc
     
    Spring  Data  JPA  
    Inside web.xml


    spring.profiles.active


    jdbc


    Inside JUnit tests
    @ContextConfiguration(locations = …)
    @RunWith(SpringJUnit4ClassRunner.class)
    @ActiveProfiles("jdbc")
    public class JdbcOwnerRepositoryTests
    …{}
    No configuration needed in case you wish to use th default
    profile (JPA)

    View Slide

  7. Caching  
    •  The  list  of  Veterinarians  is  cached  using  ehcache  
    @Cacheable(value = "vets")
    public Collection findVets() throws
    DataAccessException { … }
    ClinicServiceImpl








    tools-config.xml
    timeToLiveSeconds="60"
    maxElementsInMemory="100" … />
    ehcache.xml

    View Slide

  8. ExcepGon  Handling
     
    PetRepository  
    ClinicService  
    PetController  
    May throw a RuntimeException
    (typically DataAccessException)
    Transaction is rolled back
    in case of a RuntimeException
    (exception is still propagated to PetController)
    Exception is not handled there
    It is propagated.
    SimpleMapping  
    ExcepGonResolver  
    Declared in mvc-core-config.xml
    Based on the configuration used in petclinic:
    •  Logs the exception stacktrace
    •  Forwards to WEB-INF/jsp/exception.jsp
    •  Exception logged as a comment inside exception.jsp

    View Slide

  9. Aspect  Oriented  Programming  (1/2)  
    •  How  to  add  behavior  in  all  methods  of  all  Repository  
    classes?  
    JpaOwnerRepository  
    JpaPetRepository  
    JpaVetRepository  
    JpaVisitRepository  
    ClinicService   LOG  ALL  
    METHOD  
    CALLS  

    View Slide

  10. Aspect  Oriented  Programming  (2/2)  
    •  CallMonitoringAspect  
    …  
    @Repository
    public class
    JpaVetRepositoryImpl  
    @Repository
    public class
    JpaVisitRepositoryImpl  
    @Aspect
    public class CallMonitoringAspect {
    @Around("within(@org.springframework.stereotype.Repository *)")
    public Object invoke(…) { … } }
    Adds monitoring
    Adds
    monitoring
    Adds monitoring
    To understand further how AOP works in Spring:
    http://blog.springsource.org/2012/05/23/understanding-proxy-usage-in-spring/

    View Slide

  11. Topics  
    •  Core  Spring  
    •  The  Web  layer  
    –  Spring  MVC  
    –  Third-­‐party  web  libraries  

    View Slide

  12. View  Resolvers  in  spring-­‐petclinic  
    12  
    ContentNegoGaGngVR  
    Does not resolve any view on its own
    Delegates to other view resolvers
    BeanNameVR  
    Atom and XML
    InternalResourceVR  
    Default viewClass: JstlView
    (used for JSP files)
    vets.html
    owners.html
    vets.xml
    pets/9/visits.atom
    mvc-view-config.xml

    View Slide

  13. Topics  
    •  Core  Spring  
    •  The  Web  layer  
    –  Spring  MVC  
    –  Third-­‐party  web  libraries  
    •  Dandelion  for  datatables    
    •  Webjars  

    View Slide

  14. •  Based on project Dandelion
    –  http://dandelion.github.com/
    Datatables in Spring MVC
    14
    property="firstName" sortable="true" />
    property="lastName" sortable="true" />

    JSP file

    View Slide

  15. •  Click, sort, scroll, next/previous…
    •  Bootstrap theme
    •  PDF export…
    Dandelion is based on
    jQuery Datatables and Bootstrap

    View Slide

  16. Topics  
    •  Core  Spring  
    •  The  Web  layer  
    –  Spring  MVC  
    –  Third-­‐party  web  libraries  
    •  Dandelion    
    •  WebJars  

    View Slide

  17. •  Allow CSS and JS libraries to be imported as
    Maven libraries
    –  Used in Petclinic for jQuery, jQuery-ui, datatables,
    Bootstrap
    –  http://www.webjars.org/
    Webjars

    View Slide

  18. Webjars

    org.webjars
    jquery-ui
    1.9.1

    pom.xml

    View Slide

  19. Using Webjars
    19
    •  Inside pom.xml Spring configuration
    •  Inside JSP

    org.webjars
    jquery-ui
    1.9.1

    ui-1.9.1.custom.js">
    location="classpath:/META-INF/
    resources/webjars/"/>
    。js file is inside a jar file!

    View Slide

  20. References  
    •  Series  of  5  blog  entries  from  Julien  Dubois  on  how  to  
    “improve  performance  of  the  Spring-­‐Petclinic  applicaGon”  
    –  h/p://blog.ippon.fr/2013/03/11/  
    •  Dandelion:  clickable/sortable  datatatables  inside  Spring-­‐
    Petclinic  
    –  h/p://dandelion.github.io/blog/2013/04/24/IntegraGng-­‐Dandelion-­‐
    DataTables-­‐in-­‐the-­‐Spring-­‐Petclinic-­‐app  
    20  

    View Slide