SlideShare una empresa de Scribd logo
1 de 62
Descargar para leer sin conexión
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

Más contenido relacionado

Destacado

Spring MVC Architecture Tutorial
Spring MVC Architecture TutorialSpring MVC Architecture Tutorial
Spring MVC Architecture TutorialJava Success Point
 
Spring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerSpring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerZeroTurnaround
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVCRichard Paul
 
SpringFramework Overview
SpringFramework OverviewSpringFramework Overview
SpringFramework Overviewzerovirus23
 
Spring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsGuy Nir
 
Spring Mvc,Java, Spring
Spring Mvc,Java, SpringSpring Mvc,Java, Spring
Spring Mvc,Java, Springifnu bima
 
Managing user's data with Spring Session
Managing user's data with Spring SessionManaging user's data with Spring Session
Managing user's data with Spring SessionDavid Gómez García
 
Spring 3.x - Spring MVC
Spring 3.x - Spring MVCSpring 3.x - Spring MVC
Spring 3.x - Spring MVCGuy Nir
 

Destacado (11)

Spring MVC Architecture Tutorial
Spring MVC Architecture TutorialSpring MVC Architecture Tutorial
Spring MVC Architecture Tutorial
 
Spring annotation
Spring annotationSpring annotation
Spring annotation
 
Spring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerSpring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen Hoeller
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVC
 
SpringFramework Overview
SpringFramework OverviewSpringFramework Overview
SpringFramework Overview
 
Spring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topics
 
Spring Mvc,Java, Spring
Spring Mvc,Java, SpringSpring Mvc,Java, Spring
Spring Mvc,Java, Spring
 
Managing user's data with Spring Session
Managing user's data with Spring SessionManaging user's data with Spring Session
Managing user's data with Spring Session
 
Spring 4 - A&BP CC
Spring 4 - A&BP CCSpring 4 - A&BP CC
Spring 4 - A&BP CC
 
Spring 3.x - Spring MVC
Spring 3.x - Spring MVCSpring 3.x - Spring MVC
Spring 3.x - Spring MVC
 
Spring 4 Web App
Spring 4 Web AppSpring 4 Web App
Spring 4 Web App
 

Último

Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 

Último (20)

Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 

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