Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Spring presentation Bangalore JUG at Spring People

Michael Isvy
November 26, 2013
300

Spring presentation Bangalore JUG at Spring People

Michael Isvy

November 26, 2013
Tweet

Transcript

  1. 1
    1
    © Copyright 2013 Pivotal. All rights reserved.
    Spring Petclinic
    November 2013

    View full-size slide

  2. 2
    Michael  Isvy
    Ÿ  Training Manager (APJ region)
    –  Joined SpringSource in 2008 (now part of Pivotal)
    –  Taught Spring in over 20 countries
    ▪  Core-Spring, Spring MVC, Spring with JPA/Hibernate
    –  Based in Singapore
    Ÿ  In charge of the Spring Petclinic sample app
    Ÿ  Blog: https://spring.io/team/misvy/
    twitter: @michaelisvy

    View full-size slide

  3. 3
    Spring certification training at Spring People
    Placeholder
    Professional
    Core Spring
    (4 days)
    Expert
    Spring Web
    (4 days)
    Enterprise
    Integration
    with Spring
    (4 days)

    View full-size slide

  4. 4
    From Spring to Pivotal

    View full-size slide

  5. 5
    Topics  
    Ÿ  Core  Spring  
    Ÿ  Spring  Web  

    View full-size slide

  6. 6
    Spring  Petclinic  
    Ÿ  Spring  sample  applica:on  
    Ÿ  Major  update  in  2013  
    Ÿ  hBps://github.com/spring-­‐projects/spring-­‐petclinic  

    View full-size slide

  7. 7
    General  architecture  
    Repository
    Service
    Controller
    Database

    View full-size slide

  8. 8
    Topics  
    Ÿ  Core  Spring  
    –  Database  access  
    Ÿ  The  Web  layer  

    View full-size slide

  9. 9
    10  years  ago:  Plain  JDBC  
    public List findByLastName(String lastName) {
    List personList = new ArrayList();
    Connection conn = null;
    String sql = “select first_name, age from PERSON where last_name=?“;
    try {
    DataSource dataSource = DataSourceUtils.getDataSource();
    conn = dataSource.getConnection();
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setString(1, lastName);
    ResultSet rs = ps.executeQuery();
    while (rs.next()) {
    String firstName = rs.getString(”first_name“);
    int age = rs.getInt(“age”);
    personList.add(new Person(firstName, lastName, age));
    }
    } catch (SQLException e) { /* ??? */ }
    finally {
    try {
    conn.close();
    } catch (SQLException e) { /* ??? */ }
    }
    return personList;
    }
    Rod Johnson:
    Life is too short to
    write JDBC code!

    View full-size slide

  10. 10
    Data  Access  in  Spring  Petclinic  
    Ÿ  3  possibili:es  
    VisitRepository
    JdbcVisitRepository JpaVisitRepo SpringDataJpa
    VisitRepo
    findByPetId: 16 lines of code
    Based on Spring’s
    JdbcTemplate
    findByPetId: 6 (short)
    lines of code
    findByPetId: 0 lines (interface
    declaration is enough based on
    naming conventions)

    View full-size slide

  11. 11
    @Query  
    import org.springframework.data.repository.Repository;
    import org.springframework.data.jpa.repository.Query;
    public interface UserRepository extends Repository {
    save(S entity); // Definition as per CRUDRepository
    User findById(long i); // Query determined from method name
    User findByNameIgnoreCase(String name); // Case insensitive search
    @Query("select u from User u where u.emailAddress = ?1")
    User findByEmail(String email); // ?1 replaced by method param
    }

    View full-size slide

  12. 12
    Spring  Data  at  run:me  
    •  Before  startup   AOer  startup  
    Interface
    UserRepository
    Interface
    UserRepository
    $Proxy1
    implements
    You can conveniently use Spring to inject a dependency of type
    UserRepository. Implementation will be generated at startup time

    View full-size slide

  13. 13
    Spring  Data  projects  
    •  Syntax  similar  for  all  sub-­‐projects  
     
     
     
     
     
     
     
    Spring Data
    JPA vFabric
    GemFire
    MongoDB
    Apache
    Hadoop REST
    JDBC
    extensions
    And many more ...
    Core project
    Sub-projects

    View full-size slide

  14. 14
    Bean  profiles  
    dao-config.xml
    3 profiles
    jdbc
    JPA
    Spring Data JPA
    Inside web.xml


    spring.profiles.active


    jdbc


    Inside JUnit tests
    @ContextConfiguration(locations = …)
    @RunWith(SpringJUnit4ClassRunner.class)
    @ActiveProfiles("jdbc")
    public class JdbcOwnerRepositoryTests
    …{}

    View full-size slide

  15. 15
    Transac:ons  
    Ÿ  In  the  code:  
    Ÿ  In  the  configura:on:  

    View full-size slide

  16. 16
    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 full-size slide

  17. 17
    Topics  
    Ÿ  Core  Spring  
    Ÿ  Spring  Web  

    View full-size slide

  18. 18
    Why Spring MVC?
    Ÿ  InfoQ top 20 Web frameworks for the JVM
    –  Spring MVC number 1
    http://www.infoq.com/research/jvm-web-frameworks

    View full-size slide

  19. 19
    How to use Spring MVC?
    Ÿ  Which way is more appropriate?
    19
    public class UserController
    extends SimpleFormController {
    public ModelAndView
    onSubmit(Object command) { //... }
    }
    @Controller
    public class UserController {
    @RequestMapping(value="/users/",
    method=RequestMethod.POST)
    public ModelAndView createUser(User user) 

    { //... }
    }
    Deprecated!!

    View full-size slide

  20. 20
    View Layer
    Ÿ  Form tag library
    20


    Enter your first name:


    ...

    View full-size slide

  21. 21
    Bootstrap
    Ÿ  Let’s talk about CSS…

    View full-size slide

  22. 22
    Why Bootstrap?
    Ÿ  So anybody can make a good web design

    View full-size slide

  23. 23
    What is Bootstrap?
    Ÿ  Originally called “Twitter Bootstrap”
    Ÿ  Available from 2011
    Ÿ  Typography, forms, buttons, charts, navigation and other
    interface components
    Ÿ  Integrates well with jQuery

    View full-size slide

  24. 24
    What is Bootstrap?
    Ÿ  Most popular project on github!

    View full-size slide

  25. 25
    Bootstrap themes
    Ÿ  Hundreds of themes available
    –  So your website does not look like all other websites!
    –  Some are free and some are commercial
    Ÿ  Example: www.bootswatch.com/

    View full-size slide

  26. 26
    Avoiding JSP soup
    JSP  file
    HTML
    Javascript
    CSS
    Taglibs

    View full-size slide

  27. 27
    Form fields: Without custom tags

    ${lastNameLabel}







    CSS div
    Label
    Form input
    Error message (if any)
    JSP

    View full-size slide

  28. 28
    Using custom tags
    Ÿ  First create a tag (or tagx) file
    <%@ taglib prefix="form" uri="http://www.spring…org/tags/form" %>
    <%@ attribute name="name" required="true" rtexprvalue="true" %>
    <%@ attribute name="label" required="true" rtexprvalue="true" %>

    ${label}







    inputField.tag
    Custom tags are part of Java EE

    View full-size slide

  29. 29
    Using custom tags
    Ÿ  Custom tag call Folder which contains
    custom tags





    JSP file
    1 line of code
    instead of 9!!
    No more JSP soup!

    View full-size slide

  30. 30
    jQuery inside Spring Petclinic
    Ÿ  Javascript framework
    Ÿ  Very simple core with thousands of plugins available
    –  Datatable
    –  jQuery UI (datepicker, form interaction…)

    View full-size slide

  31. 31
    Why jQuery?

    View full-size slide

  32. 32
    Datatables in Spring MVC
    Ÿ  Based on project Dandelion
    –  dandelion.github.com
    –  Twitter: @dandelion_proj

    property="firstName" sortable="true" />
    property="lastName" sortable="true" />

    JSP file

    View full-size slide

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

    View full-size slide

  34. 34
    Conclusion
    Ÿ  Data  Access  
    –  Consider  using  Spring  Data  
    Ÿ  Web  
    –  Spring  MVC:  most  popular  Java  Web  Framework  
    –  Use  custom  tags!  
    –  Consider  using  Dandelion  for  Datatables  
    ▪  hBp://dandelion.github.com/  

    View full-size slide

  35. 35
    Spring certification at Spring People
    Placeholder
    Professional
    Core Spring
    (4 days)
    Expert
    Spring Web
    (4 days)
    Enterprise
    Integration
    with Spring
    (4 days)

    View full-size slide