Spring 3 Annotated Development

K
Spring - ADD Developer

                              Annotated Driven Development




Friday, February 13, 2009
About Speaker

   Speaker @ JavaOne, NFJS, Devcon, Borcon
   Sun Certified Java 2 Architect.
   Instructor for VisiBroker for Java, OOAD, Rational Rose,
    and Java Development.
   JBoss Certified Developer




Friday, February 13, 2009
Agenda

                            Annotations and the MV
                            Spring 2.5/3 Annotations
                              – Spring Business Tier
                            Spring Data Tier
                            Spring MVC Tier
                            Summary




Friday, February 13, 2009
Industry Forces

                            Annotations
                              – EJB 3.X
                              – JSR-250 Common Annotations
                              – JSR-299 Web Beans
                            Guice / SEAM
                            XML... way too much XML




Friday, February 13, 2009
Industry Move to Annotations




                                5

Friday, February 13, 2009
Commons Annotation


                            @Resource




      @PreDestroy           @PostConstruct


                               6

Friday, February 13, 2009
EJB Annotation

      Commons
     @Resource
     @PreDestroy
     @PostConstruct




Friday, February 13, 2009
@Home
 EJB Annotation

      Commons                                @SecurityRoles
                                           @Init
     @Resource                                              @EJB
     @PreDestroy
                                                 @MessageDriven
     @PostConstruct
                                     @MethodPermissions
                                                          @Stateful


                                                    @Interceptor
                                      @Inject
                            @RunAs                   @Stateless
                                         @TransactionManagement
                             @TransactionAttribute     7

Friday, February 13, 2009
JPA Annotation

      Commons
     @Resource
     @PreDestroy
     @PostConstruct

      EJB
      @Home                 @RunAs
      @EJB                  @MethodPermissions
      @MessageDriven        @Init
                            @Interceptor
      @Stateful
                            @TransactionManagement
      @Inject
                            @TransactionAttribute
      @Stateless
      @SecurityRoles                                 8

Friday, February 13, 2009
@Column
 JPA Annotation
                             @JoinColumn       @GeneratedValue
      Commons                                  @Entity
     @Resource
     @PreDestroy
                                                    @Table
     @PostConstruct
                                 @Version @Serialized
   EJB
   @Home            @RunAs                      @OneToMany
   @EJB             @MethodPermissions
   @MessageDriven @Init                   @OneToOne @Id
 ManyToMany         @Interceptor
   @Stateful                                 @ManyToOne
                    @TransactionManagement
   @Inject                                  @AssociationTable
                    @TransactionAttribute
   @Stateless
                                 @EmbeddedId
              @DisciminatorColumn
   @SecurityRoles                                8 @Transien

Friday, February 13, 2009
JPA Annotation

                     JPA
      Commons
                                     @Table     @ManyToMany
                     @Entity
     @Resource
                     @GeneratedValue @Column    @DisciminatorCol
     @PreDestroy
                                     @OneToMany
                     @JoinColumn
     @PostConstruct                             @AssociationTable
                                     @OneToOne
                     @Version
                                                @EmbeddedId
                     @Serialized     @Id
      EJB
                                     @ManyToOne @Transient
      @Home          @RunAs
      @EJB             @MethodPermissions
      @MessageDriven @Init
                       @Interceptor
      @Stateful
                       @TransactionManagement
      @Inject
                       @TransactionAttribute
      @Stateless
      @SecurityRoles                               9

Friday, February 13, 2009
Web Services

 @Resource
                                              @ManyToMany
@PreDestroy
                                                @Table
                            @WebServiceRef    @DisciminatorCol
 PostConstruct
                                              @Column
                                              @AssociationTable
                            @WebServiceRefs
@Home                                         @OneToMany
@MethodPermissions
                                              @EmbeddedId
 @EJB
@Init
                                               @OneToOne
                                              @Transient
@MessageDriven
@Interceptor
                                                  @Entity
@TransactionManagement                          @ManyToOne
@Stateful                                         @GeneratedV
@TransactionAttribute
 @Inject                                          @Id
                                                  @JoinColumn
@Stateless                                        @Version
                                                  @Serialized
 SecurityRoles
                                                  @RunAs
                                                  10

Friday, February 13, 2009
Web Beans
                            @New
 @Resource                  @Out
                                             @ManyToMany
@PreDestroy                 @In
                                               @Table
                                             @DisciminatorCol
 PostConstruct              @Model            @WebServiceRef
                                             @Column
@WebServiceRefs                              @AssociationTable
                            @SessionScoped
@Home                                        @OneToMany
@MethodPermissions          @Current         @EmbeddedId
  @EJB
@Init
                            @LoggedIn         @OneToOne
                                             @Transient
@MessageDriven
@Interceptor
                                                 @Entity
                            @Produces
@TransactionManagement                         @ManyToOne
 @Stateful                                       @GeneratedV
@TransactionAttribute       @Interceptor
  @Inject                                        @Id
                                                 @JoinColumn
                            @Secure
 @Stateless                                      @Version
                            @Decorator           @Serialized
 SecurityRoles
                            @Synchronous
                                                 @RunAs
                            @Asynchronous        11

Friday, February 13, 2009
Servlet 3
  @New               @WebServlet
 @Resource                                          @Out
                     @ServletFilter              @ManyToMany
   @In
@PreDestroy
                     @InitParam                   @Table
                                                 @DisciminatorCol
 PostConstruct                                   @WebServiceRef
                                                    @Model
                     @WebServletContextListenter @Column
@WebServiceRefs
   @SessionScoped                                @AssociationTable
@Home                                           @OneToMany
@MethodPermissions
                                                    @Current
                                                 @EmbeddedId
  @EJB
@Init
   @LoggedIn
                                                 @OneToOne
                                                 @Transient
@MessageDriven
@Interceptor
                                                    @Entity
                                                    @Produces
@TransactionManagement                            @ManyToOne
 @Stateful
   @Interceptor                                     @GeneratedV
@TransactionAttribute
  @Inject                                            @Id
                                                    @JoinColumn
                                                    @Secure
 @Stateless
   @Decorator                                       @Version
                                                    @Serialized
 SecurityRoles
                                                    @Synchronou
                                                    @RunAs
   @Asynchronous
                                                    12

Friday, February 13, 2009
JSR 303: Bean Validation
  @New
 @Resource                                            @Out
                                                  @ManyToMany
                            @NotNull
   @In
@PreDestroy
                                                    @Table
                            @ConstraintValidator @DisciminatorCol
 PostConstruct                                    @WebServiceRef
                                                      @Model
                                                  @Column
                            @Length
@WebServiceRefs
   @SessionScoped                                 @AssociationTable
@Home                                            @OneToMany
                            @Min
@MethodPermissions
                                                      @Current
                                                  @EmbeddedId
  @EJB                      @Pattern
@Init
   @LoggedIn
                                                  @OneToOne
                                                  @Transient
@MessageDriven
@Interceptor                @Size                     @Entity
                                                      @Produces
@TransactionManagement                             @ManyToOne
 @Stateful                  @Valid
   @Interceptor                                       @GeneratedV
@TransactionAttribute
  @Inject                                        @ServletFilter
                            @NotEmpty                 @Id
                                                      @JoinColumn
  @WebServlet                                         @Secure
 @Stateless
   @Decorator                                         @Version
                                                      @Serialized
                                                 @WebServletContex
 SecurityRoles
  @InitParam                                          @Synchronou
                                                      @RunAs
   @Asynchronous
                                                     13

Friday, February 13, 2009
JSR 303: Bean Validation
  @New
                                 @NotNull
 @Resource                       @Out
                             @ManyToMany
   @In
@PreDestroy
                               @Table
   @ConstraintValidator      @DisciminatorCol
                                 @Length
 PostConstruct               @WebServiceRef
                                 @Model
                             @Column
@WebServiceRefs
   @SessionScoped            @AssociationTable
@Home                       @OneToMany
@MethodPermissions
   @Min                          @Pattern
                                 @Current
                             @EmbeddedId
  @EJB
@Init
   @LoggedIn
                             @OneToOne
                             @Transient
@MessageDriven
@Interceptor
   @Size                         @Entity
                                 @Valid
                                 @Produces
@TransactionManagement        @ManyToOne
 @Stateful
   @Interceptor                  @GeneratedV
@TransactionAttribute
  @Inject                   @ServletFilter
                                 @Id
   @NotEmpty                     @JoinColumn
  @WebServlet                    @Secure
 @Stateless
   @Decorator                    @Version
                                 @Serialized
                            @WebServletContex
 SecurityRoles
  @InitParam                     @Synchronou
                                 @RunAs
   @Asynchronous
                                14

Friday, February 13, 2009
JSR-299 Context and DI for Java

    @NonBinding                @Realizes
    @Named                     @Initializer
    @Stereotype                @New
    @Interceptor               @Current
    @InterceptorBindingType    @Production
    @Decorator                 @Standard
    @Decorates                 @Obtains
    @ScopeType                 @Initialized
    @ApplicationScoped         @Deployed
    @RequestScoped             @Observes
    @SessionScoped             @IfExists
    @ConverationScoped         @Asynchronously
    @Dependent                 @AfterTransactionCompletion
    @BindingType               @AfterTransactionFailure
    @DeploymentType            @AfterTransactionSuccess
    @Produces                  @BeforeTransactionCompletion
    @Disposes                  @Fires
    @Specializes               @Model
                                                            15

Friday, February 13, 2009
Annotation Frustrations

                            Not Mentioned
                             JMX 2.0
                             JAX-RS
                             JUnit 4 / TestNG
                             AOP frameworks
                             Spring




Friday, February 13, 2009
Spring Annotations




Friday, February 13, 2009
Spring 3 - Annotation Support

   JSR 250 - @PostConstruct, @Resource…
   JAX-WS 2.0’s - @WebServiceRef
   EJB 3.0 - @EJB
   MVC annotations - @RequestParam, @RequestMapping…
   Test Enhancements - Junit 4.4 and TestNG
   Stereotypes - @Component, @Controller…
   Spring enhancements - @Autowired,
   AOP - @Configurable




Friday, February 13, 2009
Spring Annotations

                            Spring 2.x Data Access
                             Annotations
                            Spring 2.x Aspects
                            Spring 2.5 Context Annotations
                            Spring 2.5 Stereotypes
                            Spring 2.5 Factory Annotations
                            Spring 2.5 MVC Annotations
                            Spring 3.0 REST




Friday, February 13, 2009
Spring 2.x Data Access Annotations

   @Transactional
         – Provides annotation driven demarcation for
           transactions
   @Repository
         – Indicates that a class functions as a repository or
           a data access object (DAO)
         – Exceptions are transparently translated
            • Springs DataAccessException Hierarchy




Friday, February 13, 2009
Spring 2.5 Stereotypes

   @Component **
         – Indicates that a class is a component
         – Class is a candidate for auto-detection
         – Custom component extensions
   @Controller
         – Specialized Component
         – Typically used with RequestMapping annotation
         – Discussed in section on web mvc
   @Repository
         – 2.0 stereotype… previously mentioned
         – Now an extension of @Component
   @Service
         – Intended to be a business service facade


Friday, February 13, 2009
Spring 2.5 Factory Annotations

   @Autowired
     – Marks a constructor, field, setter or config method for injection.
     – Fields are injected
         • After construction
         • Before config methods
         – @Autowired(required=false)
         – Config:
          AutowiredAnnotationBeanPostProcessor
                •
   @Configurable
         – Marks class as being eligible for Spring-driven configuration
         – Used with AspectJ
   @Qualifier
     – Qualifies a bean for autowiring
     – May be customized
   @Required
     – Marks a method as being injection required



Friday, February 13, 2009
Types of Injections
      Constructor




      Setter




      Field



                            23

Friday, February 13, 2009
New Injection Type
      configuration
        method




      with any
        number of
        arguments




                            24

Friday, February 13, 2009
Let me Qualify that

   @Autowired
   @Qualifier(“xyzDataSourceName”)
   Private DataSource dataSource

   Or
   @Autowired
   public void init(@Qualifier(“xyzNAme”) DataSource
                 dataSource, Object2 obj)
   {…}




Friday, February 13, 2009
DEMO




Friday, February 13, 2009
Spring / JPA




Friday, February 13, 2009
JPA - Specification

   Packaging
   Entities
   Entity Operations
   Queries
   Metadata
   Life-cycle Model
   Callbacks




Friday, February 13, 2009
Persistence.xml

   In the classpath under the META-INF directory.

   <persistence-unit name=quot;unit1quot; transaction-type=quot;RESOURCE_LOCALquot;>
            <provider>org.hibernate.ejb.HibernatePersistence</provider>
            <properties>
                     <property name=quot;hibernate.hbm2ddl.autoquot; value=quot;createquot;/>
                     <property name=quot;hibernate.ejb.autodetectionquot; value=quot;classquot;/>
                     <property name=quot;hibernate.connection.urlquot;
                             value=quot;jdbc:hsqldb:hsql://localhost:1234/employeequot;/>
                     <property name=quot;hibernate.connection.driver_classquot;
                             value=quot;org.hsqldb.jdbcDriverquot;/>
                     <property name=quot;hibernate.connection.usernamequot; value=quot;saquot;/>
                     <property name=quot;hibernate.connection.passwordquot; value=quot;quot;/>
            </properties>
    </persistence-unit>
   </persistence>




Friday, February 13, 2009
Customer Entity (from spec)


       @Entity(access=FIELD)
       public class Customer {
        @Id(generate=AUTO) Long id;
        @Version protected int version;
        @ManyToOne Address address;
        @Basic String description;
        @OneToMany(targetEntity=com.acme.Order.class,
        mappedBy=quot;customerquot;)
        Collection orders = new Vector();

          @ManyToMany(mappedBy=quot;customersquot;)
          Set<DeliveryService> serviceOptions = new HashSet();
          public Customer() {}

          public Collection getOrders() { return orders; }
          public Set<DeliveryService> getServiceOptions() {



Friday, February 13, 2009
JPA Persistence Interfaces

   EntityManager
         – Interface to interact with persistence context.
         – @PersistenceContext

   EntityManagerFactory
         – Creates an EntityManager
         – @PersistenceUnit




Friday, February 13, 2009
Acquiring a Manager

   Injection in Stateless Bean
     @PersistenceContext
     public EntityManager em;
   OR
     @PersistenceContext(unitName=quot;orderquot;)
     EntityManager em;
   From Java Application
     EntityManagerFactory emf =
           Persistence.createEntityManagerFactory(quot;unit1quot;);
     EntityManager em = emf.createEntityManager();




Friday, February 13, 2009
Spring 2 JPA Support

   org.springframework.orm.jpa package
   Contains subset of the JPA container
   JpaDaoSupport
         – similar to other DAO support classes like
           HibernateDaoSupport
   LocalEntityManagerFactoryBean
         – Provides resource bootstrapping for non-jndi lookups




Friday, February 13, 2009
Spring / JPA Approaches

   JpaDaoSupport Approach
     – Not preferred approach
     – Similar to HibernateDaoSupport
     – Requires Spring Configuration of the
       EntityManager
   Pure JPA Approach
     – Preferred approach
     – No spring references necessary in the code
        • with the exception of @Transactional




                                           34

Friday, February 13, 2009
Approach 2: Spring / Pure JPA Configuration


       Leverage the persistence.xml in classpath:/META-INF
       <bean id=quot;entityManagerFactoryquot;
          class=quot;org.springframework.orm.jpa.LocalEntityManagerFactoryBeanquot; >
         <property name=quot;persistenceUnitNamequot; value=quot;unit1quot;/>
       </bean>

       DAO with no Spring references, however it contains
          @PersistenceContext annotated EntityManager
        <bean id=quot;conferenceDaoquot;
         class=quot;com.codementor.jpa.domain.ConferenceDAOImplquot;/>

       Spring configuration which injects JPA annotationed
          EntityManager
        <bean
         class=quot;org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProces
         sor“ />




Friday, February 13, 2009
Pure JPA Code Example: ConferenceDaoImpl

   package com.nfjs.jpa;


     import java.util.List;
     import javax.persistence.EntityManager;
     import javax.persistence.PersistenceContext;

     import org.springframework.transaction.annotation.Transactional;

     public class ConferenceDAOImpl implements ConferenceDAO {

            @PersistenceContext
            private EntityManager entityManager;



            public void setEntityManager(EntityManager entityManager) {
                this.entityManager = entityManager;
            }
         – ...
                                                              36

Friday, February 13, 2009
Pure JPA Spring Configuration

 <bean id=quot;entityManagerFactoryquot;
   class=quot;org.springframework.orm.jpa.LocalEntityManagerFactoryBeanquot; >
          <property name=quot;persistenceUnitNamequot; value=quot;nfjsquot;/>
       </bean>


 <bean id=quot;conferenceDaoquot; class=quot;com.nfjs.jpa.ConferenceDAOImplquot;/>


   <bean
   class=quot;org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessorquot;
   />



   </beans>




                                                                      37

Friday, February 13, 2009
No PU No Problem

   The LocalContainerEntityManagerFactoryBean can be
     configured with all Persistent Unit information.

    <bean id=quot;entityManagerFactoryquot;
     class=quot;org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBeanquot;>
      <property name=quot;dataSourcequot; ref=quot;dataSourcequot;/>
      <property name=quot;jpaVendorAdapterquot;>
        <bean class=quot;org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapterquot;>
         <property name=quot;showSqlquot; value=quot;truequot;/>
         <property name=quot;generateDdlquot; value=quot;truequot;/>
         <property name=quot;databasePlatformquot;
            value=quot;org.hibernate.dialect.HSQLDialectquot;/>
        </bean>
      </property>
    </bean>




Friday, February 13, 2009
Transactions

   XML Configuration
   <tx:annotation-driven />

   Annotation
   @Transactional(readOnly = false,
     propagation = Propagation.REQUIRES_NEW)
   Public void doSomething() {


   ** transaction manger bean id must be transactionManger or configured
    with the xml configuration above.




Friday, February 13, 2009
Test JPA with Spring

   public class SpeakerDAOTest extends AbstractJpaTests {

   private SpeakerDAO speakerDao;

     public void setSpeakerDao(SpeakerDAO speakerDao) {
       this.speakerDao = speakerDao;
     }

     protected String[] getConfigLocations() {
       return new String[] {quot;classpath:/jpaContext.xmlquot;};
     }

     protected void onSetUpInTransaction() throws Exception {
       jdbcTemplate.execute(
     quot;insert into speaker (id, name, company) values (1, 'Ken', 'CodeMentor')quot;);




Friday, February 13, 2009
AbstractJpaTests Benefits

   getConfigLocations ()
         – Separates test from production configuration
         – Allows for multiple configurations
   Injected Dependencies By Type
     – field references
   Every Test
         – Starts a Transactions
         – Rolls back Transaction
   Leverage jdbcTemplate for SQL checks




Friday, February 13, 2009
DEMO




Friday, February 13, 2009
Spring MVC




Friday, February 13, 2009
Spring 2.5 MVC Annotations

   @Controller
         – Stereotype used to “Controller” of MVC
         – Scanned for RequestMappings
   @RequestMapping
         – Annotates a handler method for a request
         – Very flexible
   @RequestParam
         – Annotates that a method parameter should be bound to a
           web request parameter
   @SessionAttributes
         – Marks session attributes that a handler uses




Friday, February 13, 2009
New Controller Issues

   Doesn’t implement an Interface
   Multiple request mappings
   High degree of flexibility




                                     45

Friday, February 13, 2009
Advantages of Controller Interfaces




                                       46

Friday, February 13, 2009
Advantages of Controller Interfaces



                                         It looks like your
                                       trying to build a
                                         controller




                                              46

Friday, February 13, 2009
Advantages of Controller Interfaces




                                       46

Friday, February 13, 2009
A World Without Rules
                            Return Type?
                            Parameters?




                                            47

Friday, February 13, 2009
@RequestMapping - Extreme Flexibility

   Parameters can be
     – Request / response / session
     – WebRequest
     – InputStream
     – OutputStream
     – @RequestParam
     – +++
   Return types
         –   ModelAndView Object
         –   Model Object
         –   Map for exposing model
         –   View Object
         –   String which is a view name
         –   Void… if method wrote the response content directly



Friday, February 13, 2009
Spring 2.5 Controller Example

   @Controller
   public class ConfController {

       @Autowired
       private confDB confDB;

       @RequestMapping(quot;/sessionListquot;)
       public String showSessionList(ModelMap model) {
         model.addAttribute(quot;sessionsquot;, this.confDB.getSessions());
         return quot;sessionListquot;;
       }

       @RequestMapping(quot;/speakerImagequot;)
       public void streamSpeakerImage(@RequestParam(quot;namequot;) String name,
                                           OutputStream outputStream) throws IOException   {
         this.confDB.getSpeakerImage(name,outputStream);
       }

       @RequestMapping(quot;/clearDatabasequot;)
       public String clearDB() {
         this.confDB.clear();
         return quot;redirect:sessionListquot;;
       }
   }

Friday, February 13, 2009
Spring MVC By Convention

                                              Conventions:
                                              hotel = HotelController
                            GET /hotel/list   list = method
   View selected
   from request
   path


   Added to
   Model




                                                           50

Friday, February 13, 2009
Multi-Action Convention




                            /hotel/index

                            /hotel/show

                            /hotel/list




                                           51

Friday, February 13, 2009
Working With Parameters




                            /hotel/show?id=42




                                                52

Friday, February 13, 2009
@PathVariable - RESTFUL

   GET /owner/show/2




                            53

Friday, February 13, 2009
Submitting Forms




                            54

Friday, February 13, 2009
Demo




Friday, February 13, 2009
Summary - ADD



                            I’m sorry...
                                Were we talking about something...


                              Oh Yeah...
                                  ADD




Friday, February 13, 2009
Summary


                             @nnotations

                              They @re every where!

                              They c@n incre@se productivity




Friday, February 13, 2009
Questions



                             Please Fill Out Surveys




                            kensipe@gmail.com

                            twitter: @kensipe

                            kensipe.blogspot.com

Friday, February 13, 2009
1 of 62

Recommended

Mobile appcelerator titanium by
Mobile appcelerator titaniumMobile appcelerator titanium
Mobile appcelerator titaniumRhio Kim
830 views52 slides
HiUED 前端/web 發展和體驗 by
HiUED 前端/web 發展和體驗HiUED 前端/web 發展和體驗
HiUED 前端/web 發展和體驗Bobby Chen
1.2K views68 slides
Spring mvc my Faviourite Slide by
Spring mvc my Faviourite SlideSpring mvc my Faviourite Slide
Spring mvc my Faviourite SlideDaniel Adenew
1.7K views79 slides
02 java spring-hibernate-experience-questions by
02 java spring-hibernate-experience-questions02 java spring-hibernate-experience-questions
02 java spring-hibernate-experience-questionsDhiraj Champawat
719 views7 slides
Spring Web Service, Spring JMS, Eclipse & Maven tutorials by
Spring Web Service, Spring JMS, Eclipse & Maven tutorialsSpring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorialsRaghavan Mohan
1.4K views42 slides
Spring @Transactional Explained by
Spring @Transactional ExplainedSpring @Transactional Explained
Spring @Transactional ExplainedSmita Prasad
771 views1 slide

More Related Content

Viewers also liked

Spring MVC Architecture Tutorial by
Spring MVC Architecture TutorialSpring MVC Architecture Tutorial
Spring MVC Architecture TutorialJava Success Point
2.3K views7 slides
Spring annotation by
Spring annotationSpring annotation
Spring annotationRajiv Srivastava
3K views6 slides
Spring 4 on Java 8 by Juergen Hoeller by
Spring 4 on Java 8 by Juergen HoellerSpring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerZeroTurnaround
13.3K views19 slides
Introduction to Spring MVC by
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVCRichard Paul
6.4K views18 slides
SpringFramework Overview by
SpringFramework OverviewSpringFramework Overview
SpringFramework Overviewzerovirus23
2.5K views55 slides
Spring 3.x - Spring MVC - Advanced topics by
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsGuy Nir
14.4K views35 slides

Viewers also liked(11)

Spring 4 on Java 8 by Juergen Hoeller by ZeroTurnaround
Spring 4 on Java 8 by Juergen HoellerSpring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen Hoeller
ZeroTurnaround13.3K views
Introduction to Spring MVC by Richard Paul
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVC
Richard Paul6.4K views
SpringFramework Overview by zerovirus23
SpringFramework OverviewSpringFramework Overview
SpringFramework Overview
zerovirus232.5K views
Spring 3.x - Spring MVC - Advanced topics by Guy Nir
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topics
Guy Nir14.4K views
Spring Mvc,Java, Spring by ifnu bima
Spring Mvc,Java, SpringSpring Mvc,Java, Spring
Spring Mvc,Java, Spring
ifnu bima2.1K views
Spring 3.x - Spring MVC by Guy Nir
Spring 3.x - Spring MVCSpring 3.x - Spring MVC
Spring 3.x - Spring MVC
Guy Nir6.1K views

Recently uploaded

The Role of Patterns in the Era of Large Language Models by
The Role of Patterns in the Era of Large Language ModelsThe Role of Patterns in the Era of Large Language Models
The Role of Patterns in the Era of Large Language ModelsYunyao Li
85 views65 slides
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineShapeBlue
221 views19 slides
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...ShapeBlue
180 views18 slides
Business Analyst Series 2023 - Week 4 Session 8 by
Business Analyst Series 2023 -  Week 4 Session 8Business Analyst Series 2023 -  Week 4 Session 8
Business Analyst Series 2023 - Week 4 Session 8DianaGray10
123 views13 slides
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava... by
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...ShapeBlue
145 views17 slides
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITShapeBlue
206 views8 slides

Recently uploaded(20)

The Role of Patterns in the Era of Large Language Models by Yunyao Li
The Role of Patterns in the Era of Large Language ModelsThe Role of Patterns in the Era of Large Language Models
The Role of Patterns in the Era of Large Language Models
Yunyao Li85 views
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by ShapeBlue
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online
ShapeBlue221 views
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by ShapeBlue
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
ShapeBlue180 views
Business Analyst Series 2023 - Week 4 Session 8 by DianaGray10
Business Analyst Series 2023 -  Week 4 Session 8Business Analyst Series 2023 -  Week 4 Session 8
Business Analyst Series 2023 - Week 4 Session 8
DianaGray10123 views
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava... by ShapeBlue
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...
ShapeBlue145 views
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by ShapeBlue
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
ShapeBlue206 views
DRBD Deep Dive - Philipp Reisner - LINBIT by ShapeBlue
DRBD Deep Dive - Philipp Reisner - LINBITDRBD Deep Dive - Philipp Reisner - LINBIT
DRBD Deep Dive - Philipp Reisner - LINBIT
ShapeBlue180 views
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by TrustArc
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc170 views
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda... by ShapeBlue
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
ShapeBlue161 views
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T by ShapeBlue
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TCloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
ShapeBlue152 views
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti... by ShapeBlue
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...
ShapeBlue139 views
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by ShapeBlue
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
ShapeBlue198 views
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue by ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlueCloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
ShapeBlue138 views
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by ShapeBlue
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
ShapeBlue194 views
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker54 views
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue by ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueWhat’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
ShapeBlue263 views
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ... by ShapeBlue
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
ShapeBlue166 views
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue by ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlueVNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
ShapeBlue203 views

Spring 3 Annotated Development

  • 1. Spring - ADD Developer Annotated Driven Development Friday, February 13, 2009
  • 2. About Speaker Speaker @ JavaOne, NFJS, Devcon, Borcon Sun Certified Java 2 Architect. Instructor for VisiBroker for Java, OOAD, Rational Rose, and Java Development. JBoss Certified Developer Friday, February 13, 2009
  • 3. Agenda Annotations and the MV Spring 2.5/3 Annotations – Spring Business Tier Spring Data Tier Spring MVC Tier Summary Friday, February 13, 2009
  • 4. Industry Forces Annotations – EJB 3.X – JSR-250 Common Annotations – JSR-299 Web Beans Guice / SEAM XML... way too much XML Friday, February 13, 2009
  • 5. Industry Move to Annotations 5 Friday, February 13, 2009
  • 6. Commons Annotation @Resource @PreDestroy @PostConstruct 6 Friday, February 13, 2009
  • 7. EJB Annotation Commons @Resource @PreDestroy @PostConstruct Friday, February 13, 2009
  • 8. @Home EJB Annotation Commons @SecurityRoles @Init @Resource @EJB @PreDestroy @MessageDriven @PostConstruct @MethodPermissions @Stateful @Interceptor @Inject @RunAs @Stateless @TransactionManagement @TransactionAttribute 7 Friday, February 13, 2009
  • 9. JPA Annotation Commons @Resource @PreDestroy @PostConstruct EJB @Home @RunAs @EJB @MethodPermissions @MessageDriven @Init @Interceptor @Stateful @TransactionManagement @Inject @TransactionAttribute @Stateless @SecurityRoles 8 Friday, February 13, 2009
  • 10. @Column JPA Annotation @JoinColumn @GeneratedValue Commons @Entity @Resource @PreDestroy @Table @PostConstruct @Version @Serialized EJB @Home @RunAs @OneToMany @EJB @MethodPermissions @MessageDriven @Init @OneToOne @Id ManyToMany @Interceptor @Stateful @ManyToOne @TransactionManagement @Inject @AssociationTable @TransactionAttribute @Stateless @EmbeddedId @DisciminatorColumn @SecurityRoles 8 @Transien Friday, February 13, 2009
  • 11. JPA Annotation JPA Commons @Table @ManyToMany @Entity @Resource @GeneratedValue @Column @DisciminatorCol @PreDestroy @OneToMany @JoinColumn @PostConstruct @AssociationTable @OneToOne @Version @EmbeddedId @Serialized @Id EJB @ManyToOne @Transient @Home @RunAs @EJB @MethodPermissions @MessageDriven @Init @Interceptor @Stateful @TransactionManagement @Inject @TransactionAttribute @Stateless @SecurityRoles 9 Friday, February 13, 2009
  • 12. Web Services @Resource @ManyToMany @PreDestroy @Table @WebServiceRef @DisciminatorCol PostConstruct @Column @AssociationTable @WebServiceRefs @Home @OneToMany @MethodPermissions @EmbeddedId @EJB @Init @OneToOne @Transient @MessageDriven @Interceptor @Entity @TransactionManagement @ManyToOne @Stateful @GeneratedV @TransactionAttribute @Inject @Id @JoinColumn @Stateless @Version @Serialized SecurityRoles @RunAs 10 Friday, February 13, 2009
  • 13. Web Beans @New @Resource @Out @ManyToMany @PreDestroy @In @Table @DisciminatorCol PostConstruct @Model @WebServiceRef @Column @WebServiceRefs @AssociationTable @SessionScoped @Home @OneToMany @MethodPermissions @Current @EmbeddedId @EJB @Init @LoggedIn @OneToOne @Transient @MessageDriven @Interceptor @Entity @Produces @TransactionManagement @ManyToOne @Stateful @GeneratedV @TransactionAttribute @Interceptor @Inject @Id @JoinColumn @Secure @Stateless @Version @Decorator @Serialized SecurityRoles @Synchronous @RunAs @Asynchronous 11 Friday, February 13, 2009
  • 14. Servlet 3 @New @WebServlet @Resource @Out @ServletFilter @ManyToMany @In @PreDestroy @InitParam @Table @DisciminatorCol PostConstruct @WebServiceRef @Model @WebServletContextListenter @Column @WebServiceRefs @SessionScoped @AssociationTable @Home @OneToMany @MethodPermissions @Current @EmbeddedId @EJB @Init @LoggedIn @OneToOne @Transient @MessageDriven @Interceptor @Entity @Produces @TransactionManagement @ManyToOne @Stateful @Interceptor @GeneratedV @TransactionAttribute @Inject @Id @JoinColumn @Secure @Stateless @Decorator @Version @Serialized SecurityRoles @Synchronou @RunAs @Asynchronous 12 Friday, February 13, 2009
  • 15. JSR 303: Bean Validation @New @Resource @Out @ManyToMany @NotNull @In @PreDestroy @Table @ConstraintValidator @DisciminatorCol PostConstruct @WebServiceRef @Model @Column @Length @WebServiceRefs @SessionScoped @AssociationTable @Home @OneToMany @Min @MethodPermissions @Current @EmbeddedId @EJB @Pattern @Init @LoggedIn @OneToOne @Transient @MessageDriven @Interceptor @Size @Entity @Produces @TransactionManagement @ManyToOne @Stateful @Valid @Interceptor @GeneratedV @TransactionAttribute @Inject @ServletFilter @NotEmpty @Id @JoinColumn @WebServlet @Secure @Stateless @Decorator @Version @Serialized @WebServletContex SecurityRoles @InitParam @Synchronou @RunAs @Asynchronous 13 Friday, February 13, 2009
  • 16. JSR 303: Bean Validation @New @NotNull @Resource @Out @ManyToMany @In @PreDestroy @Table @ConstraintValidator @DisciminatorCol @Length PostConstruct @WebServiceRef @Model @Column @WebServiceRefs @SessionScoped @AssociationTable @Home @OneToMany @MethodPermissions @Min @Pattern @Current @EmbeddedId @EJB @Init @LoggedIn @OneToOne @Transient @MessageDriven @Interceptor @Size @Entity @Valid @Produces @TransactionManagement @ManyToOne @Stateful @Interceptor @GeneratedV @TransactionAttribute @Inject @ServletFilter @Id @NotEmpty @JoinColumn @WebServlet @Secure @Stateless @Decorator @Version @Serialized @WebServletContex SecurityRoles @InitParam @Synchronou @RunAs @Asynchronous 14 Friday, February 13, 2009
  • 17. JSR-299 Context and DI for Java  @NonBinding  @Realizes  @Named  @Initializer  @Stereotype  @New  @Interceptor  @Current  @InterceptorBindingType  @Production  @Decorator  @Standard  @Decorates  @Obtains  @ScopeType  @Initialized  @ApplicationScoped  @Deployed  @RequestScoped  @Observes  @SessionScoped  @IfExists  @ConverationScoped  @Asynchronously  @Dependent  @AfterTransactionCompletion  @BindingType  @AfterTransactionFailure  @DeploymentType  @AfterTransactionSuccess  @Produces  @BeforeTransactionCompletion  @Disposes  @Fires  @Specializes  @Model 15 Friday, February 13, 2009
  • 18. Annotation Frustrations Not Mentioned JMX 2.0 JAX-RS JUnit 4 / TestNG AOP frameworks Spring Friday, February 13, 2009
  • 20. Spring 3 - Annotation Support JSR 250 - @PostConstruct, @Resource… JAX-WS 2.0’s - @WebServiceRef EJB 3.0 - @EJB MVC annotations - @RequestParam, @RequestMapping… Test Enhancements - Junit 4.4 and TestNG Stereotypes - @Component, @Controller… Spring enhancements - @Autowired, AOP - @Configurable Friday, February 13, 2009
  • 21. Spring Annotations Spring 2.x Data Access Annotations Spring 2.x Aspects Spring 2.5 Context Annotations Spring 2.5 Stereotypes Spring 2.5 Factory Annotations Spring 2.5 MVC Annotations Spring 3.0 REST Friday, February 13, 2009
  • 22. Spring 2.x Data Access Annotations @Transactional – Provides annotation driven demarcation for transactions @Repository – Indicates that a class functions as a repository or a data access object (DAO) – Exceptions are transparently translated • Springs DataAccessException Hierarchy Friday, February 13, 2009
  • 23. Spring 2.5 Stereotypes @Component ** – Indicates that a class is a component – Class is a candidate for auto-detection – Custom component extensions @Controller – Specialized Component – Typically used with RequestMapping annotation – Discussed in section on web mvc @Repository – 2.0 stereotype… previously mentioned – Now an extension of @Component @Service – Intended to be a business service facade Friday, February 13, 2009
  • 24. Spring 2.5 Factory Annotations @Autowired – Marks a constructor, field, setter or config method for injection. – Fields are injected • After construction • Before config methods – @Autowired(required=false) – Config: AutowiredAnnotationBeanPostProcessor • @Configurable – Marks class as being eligible for Spring-driven configuration – Used with AspectJ @Qualifier – Qualifies a bean for autowiring – May be customized @Required – Marks a method as being injection required Friday, February 13, 2009
  • 25. Types of Injections Constructor Setter Field 23 Friday, February 13, 2009
  • 26. New Injection Type configuration method with any number of arguments 24 Friday, February 13, 2009
  • 27. Let me Qualify that @Autowired @Qualifier(“xyzDataSourceName”) Private DataSource dataSource Or @Autowired public void init(@Qualifier(“xyzNAme”) DataSource dataSource, Object2 obj) {…} Friday, February 13, 2009
  • 29. Spring / JPA Friday, February 13, 2009
  • 30. JPA - Specification Packaging Entities Entity Operations Queries Metadata Life-cycle Model Callbacks Friday, February 13, 2009
  • 31. Persistence.xml In the classpath under the META-INF directory. <persistence-unit name=quot;unit1quot; transaction-type=quot;RESOURCE_LOCALquot;> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name=quot;hibernate.hbm2ddl.autoquot; value=quot;createquot;/> <property name=quot;hibernate.ejb.autodetectionquot; value=quot;classquot;/> <property name=quot;hibernate.connection.urlquot; value=quot;jdbc:hsqldb:hsql://localhost:1234/employeequot;/> <property name=quot;hibernate.connection.driver_classquot; value=quot;org.hsqldb.jdbcDriverquot;/> <property name=quot;hibernate.connection.usernamequot; value=quot;saquot;/> <property name=quot;hibernate.connection.passwordquot; value=quot;quot;/> </properties> </persistence-unit> </persistence> Friday, February 13, 2009
  • 32. Customer Entity (from spec) @Entity(access=FIELD) public class Customer { @Id(generate=AUTO) Long id; @Version protected int version; @ManyToOne Address address; @Basic String description; @OneToMany(targetEntity=com.acme.Order.class, mappedBy=quot;customerquot;) Collection orders = new Vector(); @ManyToMany(mappedBy=quot;customersquot;) Set<DeliveryService> serviceOptions = new HashSet(); public Customer() {} public Collection getOrders() { return orders; } public Set<DeliveryService> getServiceOptions() { Friday, February 13, 2009
  • 33. JPA Persistence Interfaces EntityManager – Interface to interact with persistence context. – @PersistenceContext EntityManagerFactory – Creates an EntityManager – @PersistenceUnit Friday, February 13, 2009
  • 34. Acquiring a Manager Injection in Stateless Bean @PersistenceContext public EntityManager em; OR @PersistenceContext(unitName=quot;orderquot;) EntityManager em; From Java Application EntityManagerFactory emf = Persistence.createEntityManagerFactory(quot;unit1quot;); EntityManager em = emf.createEntityManager(); Friday, February 13, 2009
  • 35. Spring 2 JPA Support org.springframework.orm.jpa package Contains subset of the JPA container JpaDaoSupport – similar to other DAO support classes like HibernateDaoSupport LocalEntityManagerFactoryBean – Provides resource bootstrapping for non-jndi lookups Friday, February 13, 2009
  • 36. Spring / JPA Approaches JpaDaoSupport Approach – Not preferred approach – Similar to HibernateDaoSupport – Requires Spring Configuration of the EntityManager Pure JPA Approach – Preferred approach – No spring references necessary in the code • with the exception of @Transactional 34 Friday, February 13, 2009
  • 37. Approach 2: Spring / Pure JPA Configuration Leverage the persistence.xml in classpath:/META-INF <bean id=quot;entityManagerFactoryquot; class=quot;org.springframework.orm.jpa.LocalEntityManagerFactoryBeanquot; > <property name=quot;persistenceUnitNamequot; value=quot;unit1quot;/> </bean> DAO with no Spring references, however it contains @PersistenceContext annotated EntityManager <bean id=quot;conferenceDaoquot; class=quot;com.codementor.jpa.domain.ConferenceDAOImplquot;/> Spring configuration which injects JPA annotationed EntityManager <bean class=quot;org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProces sor“ /> Friday, February 13, 2009
  • 38. Pure JPA Code Example: ConferenceDaoImpl package com.nfjs.jpa; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.transaction.annotation.Transactional; public class ConferenceDAOImpl implements ConferenceDAO { @PersistenceContext private EntityManager entityManager; public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } – ... 36 Friday, February 13, 2009
  • 39. Pure JPA Spring Configuration <bean id=quot;entityManagerFactoryquot; class=quot;org.springframework.orm.jpa.LocalEntityManagerFactoryBeanquot; > <property name=quot;persistenceUnitNamequot; value=quot;nfjsquot;/> </bean> <bean id=quot;conferenceDaoquot; class=quot;com.nfjs.jpa.ConferenceDAOImplquot;/> <bean class=quot;org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessorquot; /> </beans> 37 Friday, February 13, 2009
  • 40. No PU No Problem The LocalContainerEntityManagerFactoryBean can be configured with all Persistent Unit information. <bean id=quot;entityManagerFactoryquot; class=quot;org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBeanquot;> <property name=quot;dataSourcequot; ref=quot;dataSourcequot;/> <property name=quot;jpaVendorAdapterquot;> <bean class=quot;org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapterquot;> <property name=quot;showSqlquot; value=quot;truequot;/> <property name=quot;generateDdlquot; value=quot;truequot;/> <property name=quot;databasePlatformquot; value=quot;org.hibernate.dialect.HSQLDialectquot;/> </bean> </property> </bean> Friday, February 13, 2009
  • 41. Transactions XML Configuration <tx:annotation-driven /> Annotation @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW) Public void doSomething() { ** transaction manger bean id must be transactionManger or configured with the xml configuration above. Friday, February 13, 2009
  • 42. Test JPA with Spring public class SpeakerDAOTest extends AbstractJpaTests { private SpeakerDAO speakerDao; public void setSpeakerDao(SpeakerDAO speakerDao) { this.speakerDao = speakerDao; } protected String[] getConfigLocations() { return new String[] {quot;classpath:/jpaContext.xmlquot;}; } protected void onSetUpInTransaction() throws Exception { jdbcTemplate.execute( quot;insert into speaker (id, name, company) values (1, 'Ken', 'CodeMentor')quot;); Friday, February 13, 2009
  • 43. AbstractJpaTests Benefits getConfigLocations () – Separates test from production configuration – Allows for multiple configurations Injected Dependencies By Type – field references Every Test – Starts a Transactions – Rolls back Transaction Leverage jdbcTemplate for SQL checks Friday, February 13, 2009
  • 46. Spring 2.5 MVC Annotations @Controller – Stereotype used to “Controller” of MVC – Scanned for RequestMappings @RequestMapping – Annotates a handler method for a request – Very flexible @RequestParam – Annotates that a method parameter should be bound to a web request parameter @SessionAttributes – Marks session attributes that a handler uses Friday, February 13, 2009
  • 47. New Controller Issues Doesn’t implement an Interface Multiple request mappings High degree of flexibility 45 Friday, February 13, 2009
  • 48. Advantages of Controller Interfaces 46 Friday, February 13, 2009
  • 49. Advantages of Controller Interfaces It looks like your trying to build a controller 46 Friday, February 13, 2009
  • 50. Advantages of Controller Interfaces 46 Friday, February 13, 2009
  • 51. A World Without Rules Return Type? Parameters? 47 Friday, February 13, 2009
  • 52. @RequestMapping - Extreme Flexibility Parameters can be – Request / response / session – WebRequest – InputStream – OutputStream – @RequestParam – +++ Return types – ModelAndView Object – Model Object – Map for exposing model – View Object – String which is a view name – Void… if method wrote the response content directly Friday, February 13, 2009
  • 53. Spring 2.5 Controller Example @Controller public class ConfController { @Autowired private confDB confDB; @RequestMapping(quot;/sessionListquot;) public String showSessionList(ModelMap model) { model.addAttribute(quot;sessionsquot;, this.confDB.getSessions()); return quot;sessionListquot;; } @RequestMapping(quot;/speakerImagequot;) public void streamSpeakerImage(@RequestParam(quot;namequot;) String name, OutputStream outputStream) throws IOException { this.confDB.getSpeakerImage(name,outputStream); } @RequestMapping(quot;/clearDatabasequot;) public String clearDB() { this.confDB.clear(); return quot;redirect:sessionListquot;; } } Friday, February 13, 2009
  • 54. Spring MVC By Convention Conventions: hotel = HotelController GET /hotel/list list = method View selected from request path Added to Model 50 Friday, February 13, 2009
  • 55. Multi-Action Convention /hotel/index /hotel/show /hotel/list 51 Friday, February 13, 2009
  • 56. Working With Parameters /hotel/show?id=42 52 Friday, February 13, 2009
  • 57. @PathVariable - RESTFUL GET /owner/show/2 53 Friday, February 13, 2009
  • 58. Submitting Forms 54 Friday, February 13, 2009
  • 60. Summary - ADD I’m sorry... Were we talking about something... Oh Yeah... ADD Friday, February 13, 2009
  • 61. Summary  @nnotations  They @re every where!  They c@n incre@se productivity Friday, February 13, 2009
  • 62. Questions  Please Fill Out Surveys kensipe@gmail.com twitter: @kensipe kensipe.blogspot.com Friday, February 13, 2009