SlideShare une entreprise Scribd logo
1  sur  72
The Spring Framework

  Colin Sampaleanu
     Interface21
Spring framework goals
 Make J2EE easier to use
 Address end-to-end requirements rather than one
      tier
     Eliminate need for middle tier ―glue‖
     Provide the best Inversion of Control solution
     Provide a pure Java AOP implementation, focused
      on solving common problems in J2EE
     Fully portable across application servers
              Core container can run in any environment, not just an
               application server
              Some applications don‘t need a full application server: just
               a web container
              But where an app server adds value, take full advantage
               (no compromises) of all additional advanced functionality


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
…Spring framework goals
 ―Non-invasive‖ framework
              Application code has minimal or no dependency on Spring
               APIs
              Key principal seen throughout Spring‘s design
              More power to the POJO
 Facilitate unit testing
              Allow effective TDD
              Allow business objects to be unit tested outside the container
 Facilitate OO best practice
              We‘re used to implementing ―EJB‖ or ―J2EE‖ applications rather
               than OO applications.
              It doesn‘t have to be this way.
 Provide a good alternative to EJB for many
  applications
 Enhance productivity compared to ―traditional‖ J2EE
  approaches

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Part of a new wave of frameworks

 Big change in how J2EE applications are written
 Less emphasis on EJB
              EJB has been grossly overused
              EJB has some unique capabilities for a minority of apps
               (distributed transaction management, RMI remoting) but
               for the most part is looking like legacy
 Not just Spring
              PicoContainer, HiveMind and other Inversion of Control
               frameworks
              EJB 3.0 (2006-2007) programming model looks a lot like
                 (Spring IoC – important features) + Hibernate/JDO
 These lightweight frameworks are different from
  earlier frameworks
 Spring is the most mature, most powerful and by
  far the most popular

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Unique Spring capabilities
    Declarative transaction management for POJOs
     with or without EJB. Optional Annotations support.
    Consistent approach to data access, with common
     exception hierarchy
              Simplifies working with JDBC, JDO, Hibernate,
               TopLink, etc
    IoC/AOP integration
    Integration with a wide variety of popular products
    Gestalt
       More than the sum of its parts
       Hard to explain in a snappy phrase, but our users love
        it
    Solid, robust, works now
    In production in mission-critical apps now, across
        all industries

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
A layered framework

    Spring Web Flow
    Web MVC
    AOP framework
       Integrates with IoC

    IoC container
       Dependency Injection

    Transaction management
    Data access
    JMX
    Transparent Remoting
    One stop shop but can also use as modules


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Layers of Spring

                                                                                                                                      Web
          AOP                                     Enterprise                                          Context
                                                                                                                                   Web Flow
    AOP core                                                                                           Web-based
                                                      JDBC + ORM                                                                   Web MVC
   AOP Alliance
     AspectJ                                          Transactions                                       Factories                   Incl. Views
                                                                                                                                   (JSP, Velocity,
                                                          Remoting                                          Access                   PDF, Excel)
    Source-level                                                JMX                                           Event
     metadata                                                                                                                          Web
                                                         Messaging                                             JNDI                Integration


                                                                Spring Core
                                                          Beans                                                  Utilities

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring in the Middle Tier
 Complete solution for managing business objects
    Write your business objects as POJOs

    Spring handles wiring and lookup

    Simple, consistent, XML format (most common choice)
                  • But the IoC container is not tied to XML
                  • Other formats coming
 Application code has few dependencies on the
      container—often no dependencies on the container
              Spring Pet Store sample has no dependencies on Spring
               IoC
              No imports, no magic annotations for IoC: nothing Spring-
               specific
 Easy unit testing. TDD works!



Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
…Spring in the Middle Tier
 Named ―beans‖—objects—provide a clear
  point for pluggability
 Objects that depend on a given bean
  depend on its interface(s) and/or class
              Better practice to depend on interfaces
 Can change any object‘s implementation
  with zero impact on callers
 The ―Lego Hypothesis‖ made real in J2EE
  applications


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
…Spring in the Middle Tier

 The most complete IoC container
              Setter Dependency Injection
                  • Configuration via JavaBean properties
              Constructor Dependency Injection
                  • Configuration via constructor arguments
                  • Pioneered by PicoContainer
              Method Injection
              Dependency Lookup
                  • Avalon/EJB-style callbacks



Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Middle Tier: Setter Injection
 public class PetStoreImpl implements PetStoreFacade {
       private OrderDao orderDao;
       private ItemDao itemDao;
       ...
       public void setOrderDao(OrderDao orderDao) {
         this.orderDao = orderDao;
       }
       public void setItemDao(ItemDao itemDao) {
         this.itemDao = itemDao;
       }
       ...
       public void insertOrder(Order order) {
         this.orderDao.insertOrder(order);
         this.itemDao.updateQuantity(order);
       }
 }

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Middle Tier: Setter Injection
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property               name="driverClassName" value="... "/>
        <property               name="url" value="..."/>
        <property               name="username" value="...“>
        <property               name="password" value="...“/>
   </bean>

   <bean id="itemDao"
   class="org.springframework.samples.jpetstore.dao.ibatis.SqlMapItemDao">
        <property name="dataSource" ref="dataSource"/>
        <property name="sqlMap" ref="sqlMap"/>
   </bean>

   <bean id="petStore“
   class="org.springframework.samples.jpetstore.domain.logic.PetStoreImpl">
        <property name="orderDao" ref="orderDao"/>
        <property name="itemDao" ref="itemDao"/>
   </bean>




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Middle Tier: Constructor Injection
 public class PetStoreImpl implements PetStoreFacade {
        private OrderDao orderDao;
        private ItemDao itemDao;
        ...
   public PetStoreImpl(OrderDao orderDao, ItemDao
 itemDao) {
     this.orderDao = orderDao;
     this.itemDao = itemDao;
   }
        ...
        public void insertOrder(Order order) {
          this.orderDao.insertOrder(order);
          this.itemDao.updateQuantity(order);
        }
 }
Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Middle Tier: Constructor Injection

     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
         <property               name="driverClassName" value="... "/>
         <property               name="url" value="..."/>
         <property               name="username" value="...“>
         <property               name="password" value="...“/>
     </bean>

     <bean id="itemDao"
     class="org.springframework.samples.jpetstore.dao.ibatis.SqlMapItemDao">
         <property name="dataSource" ref="dataSource"/>
         <property name="sqlMap" ref="sqlMap"/>
     </bean>

     <bean id="petStore“
     class="org.springframework.samples.jpetstore.domain.logic.PetStoreImpl">

         <constructor-arg ref="orderDao"/>
         <constructor-arg ref="itemDao"/>
     </bean>



Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Middle Tier: Dependency Injection
 Dependencies are expressed in pure Java
 Push configuration (container injects
      dependencies) is much better than pull
      configuration (objects look up dependencies)
              No ad hoc lookup
              Code is self-documenting, describing its own
               dependencies
              Can apply consistent management strategy
               everywhere
              Easy to test
                  • No JNDI to stub, properties files to substitute, RDBMS
                        data to set up…


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Middle Tier: Dependency Injection
 Properties & Constructor Arguments injected
      are:
              Configuration values (i.e. something like a
               timeout integer value)
              Dependencies on collaborators (i.e. the reference
               to accountDao in the example)
 Can run many existing classes unchanged
 ―Autowiring‖
 Trivial to test application classes outside the
  container, without Spring
 Can reuse application classes outside the
  container
 Hot swapping, instance pooling (with AOP)

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring in the Middle Tier
 Advanced IoC features
    Manage lists, maps or sets, with arbitrary nesting
    Create objects using new or from factory
     methods
    Method Injection
                  • Container can override abstract or concrete methods at
                    runtime
                  • Can use to avoid dependence on Spring (override
                    isolates dependency on Spring API)
              Nearly any existing Java object can be used in a
               Spring context
              Leverages standard JavaBeans PropertyEditor
               machinery
                  • Register custom property editors
              Many hooks to customize container behaviour
Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Why AOP?

    Dependency Injection takes us a long way, but not quite
     enough on its own
    AOP complements IoC to deliver a non-invasive framework
    Externalizes crosscutting concerns from application code
              Concerns that cut across the structure of an object model
            AOP   offers a different way of thinking about
               program structure to an object hierarchy
    EJB interception is conceptually similar, but not extensible
        and imposes too many constraints on components
              Can‘t define new aspects
              Constrained pointcut model (methods on the component
               interface)
    Spring provides important out-of-the box aspects
       Declarative transaction management for any POJO
       Remoting
       Pooling, and resource acquisition/release



Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
AOP + IoC: A unique synergy
 AOP + IoC is a match made in
  heaven
 Any object obtained from a Spring
  IoC container can be transparently
  advised based on configuration
 Advisors, pointcuts and advices can
  themselves be managed by the IoC
  container
 Spring is an integrated, consistent
  solution
Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Custom AOP
 Complements, rather then conflicts with, OOP
   Email administrator if a particular exception is
    thrown
   Apply custom declarative security checks

   Performance monitoring

   Auditing

   Caching

 Objects have clear responsibilities
   No need to abuse inheritance

 Integration with AspectJ/AspectWerz for when
      you need a full-blown AOP framework


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring DAO
    Integrated with Spring transaction management
                  Unique synergy
                  Gestalt again…
    Doesn‘t reinvent the wheel
                  There are good solutions for O/R mapping, we make
                   them easier to use
    Out-of-the-box support for
                  JDBC
                  JDO
                  Hibernate
                  TopLink
                  iBATIS
                  + others
    Model allows support for other technologies
                  Java Persistence API support coming as soon as spec is
                   stable
Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
…Spring DAO

    Using clearly defined technology agnostic DAO
           interfaces is a best practice
                   Implement with JDO, JDBC, Hibernate, iBATIS…
                   Spring doesn‘t enforce this, but it makes it very easy
    Consistent DataAccessException hierarchy
           allows truly technology-agnostic DAOs

   public interface ReminderDao {

           public Collection
           findRequestsEligibleForReminder()
                     throws DataAccessException;

           void persist(Reminder reminder)
                     throws DataAccessException;
   }

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring DAO:
Consistent exception hierarchy




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring DAO: JDBC
  Class library offers simpler programming model than raw
   JDBC
  No more try/catch/finally blocks
  No more leaked connections
            Spring will always close a connection: no scope for programmer
             error
  Meaningful exception hierarchy
     No more vendor code lookups
                   • Spring autodetects database and knows what Oracle, DB2 error
                     codes mean
                   • More portable code
            More readable code
                   • catch (BadSqlGrammarException ex)
  Sophisticated, portable stored procedure and BLOB/CLOB
   support
  Can refactor to clean up JDBC without adopting Spring
   overall
            Incremental adoption: Step by step

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Example Working With the JPetStore
Database

 Get a list of pet types (Strings)

JdbcTemplate template = new JdbcTemplate(dataSource);
final List names = new LinkedList();
template.query("SELECT id,name FROM types ORDER BY name",
        new RowCallbackHandler() {
              public void processRow(ResultSet rs)
                      throws SQLException {
                  names.add(rs.getString(1));
              }
         });

 Note usage of ‗final‘ on the names variable so that the
      anonymous inner class can have access to it
        Remember this when working with callbacks




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Mapping Result sets to Objects

 Example of a RowCallbackHandler mapping
      ResultSets to complex types

RowCallbackHandler() {
    public void processRow(ResultSet rs)
          throws SQLException {
          Pet pet=new Pet();
          pet.setId(rs.getInt(“pet_id”));
          pet.setName(rs.getString(“pet_name”));
          …      // more fields here
          pets.add(pet);
}


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring DAO: ORM (Hibernate / JDO /
TopLink / Other)
 Spring manages the unit of work (Hibernate
      Session, JDO PersistenceManager, TopLink
      UnitOfWork, etc.)
              No more passing them around or custom ThreadLocals for
               this purpose
              Sessions are managed within Spring transaction
               management
              Works with JTA or local transactions, with no code changes
              Works within EJB container with CMT if desired
 Templates (HibernateTemplate/JDOTemplate, etc.)
      makes common operations easy
              Simpler, consistent exception handling
              Many operations become one-liners
              Less, simpler, code compared to using Hibernate alone
 Mixed use of ORM and JDBC within the same
      transaction
Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
HibernateTemplate DAO example

 public class HibernateReminderDao extends
         HibernateDaoSupport implements ReminderDao {

        public Collection findRequestsEligibleForReminder()
              throws DataAccessException {

           getHibernateTemplate().find("from Request r where
         r.something = 1");
         }

        public void persist(Reminder reminder) throws
              DataAccessException {

              getHibernateTemplate().saveOrUpdate(reminder);
         }
 }



Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
HibernateTemplate DAO example (2)


 <bean id="sessionFactory"
    class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
    <property name="dataSource― ref="dataSource"/>
    <property name="mappingResources">
         <value>mycompany/mappings.hbm.xml</value>
    </property>
    <property name="hibernateProperties">
         <props>
              <prop
    key="hibernate.dialect">net.sf.hibernate.dialect.HSQLDialect</prop>
         </props>
    </property>
 </bean>

 <bean id=―myDao" class=―com.mycompany.HibernateReminderDao"
   autowire=―autodetect―/>




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring DAO: JDO
 Comparable to Hibernate support
 PersistenceManager management just like
  Hibernate Session management
 Mixed use of JDO and JDBC within the same
  transaction
 Support JDO 2.0 features and vendor
  extensions in a portable manner
              All major vendors support similar concepts
 We work closely with JDO vendors, including:
    SolarMetric (Kodo)
    Open source: JPOX JDO

 Spring + Kodo is a particularly strong enterprise
      combination
Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring DAO: TopLink
 Originally written by Oracle, donated to
  Spring
 Basic approach is very similar to
  Hibernate or JDO integration approach
 Mixed use of TopLink and JDBC within the
  same transaction
 Strong enterprise combination




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring Transaction
 Consistent abstraction
              PlatformTransactionManager
              Does not reinvent transaction manager
              Choose between JTA, JDBC, Hibernate, JDO, etc with
               simple changes to configuration not Java code
              No more rewriting application to scale up from JDBC, JDO,
               or Hibernate local transactions to JTA global transactions
              Use the simplest transaction infrastructure that can
               possibly work
              Global (JTA) transactions optionally take advantage of
               server-specific enhanced functionality
              Local transactions offer more features than standard JTA
               (isolation levels, savepoints, etc.)




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring Transaction (WebLogic)
 Enhanced support for transactions in a WebLogic
   environment
       Beyond  the level of standard JTA APIs
       WebLogicJtaTransactionManager
       Allows Spring-driven transactions to be visible in
        WebLogic‘s transaction monitor
       Supports per-transaction isolation level
       Enhances resume support when using transaction
        suspension
       Automatically detects WebLogic server version
       Usage on a WebLogic client is supported
       Fully XA capable access to WebLogic DataSources
        and JMS

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Programmatic Transaction
Management
 Simpler, cleaner API than JTA
         Exception hierarchy as with DAO
         No need to catch multiple exceptions
          without a common base class
         Unchecked exceptions

 Use the same API for JTA, JDBC,
  Hibernate, etc.
 Write once have transaction
  management anywhereTM
Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Declarative Transaction Management
 Most popular transaction management option
 Built on same abstraction as programmatic
  transaction management
 Declarative transaction management for any
  POJO, without EJB: even without JTA (single
  database)
 More flexible than EJB CMT
              Declarative rollback rules: roll back on
               MyCheckedException
              Supports nested transactions and savepoints if
               the underlying resource manager does
 Non-invasive: Minimizes dependence on the
      container
              No more passing around EJBContext
Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Making a service transactional
 The original service implementation class is
  unmodified and knows nothing about
  transactions
 Pluggable metadata tells Spring to wrap the
  target service with a proxy object which looks
  like the target, but applies transaction
  semantics on method invocations
 Most people today use XML for defining both the
  services, and the transactional wrappers around
  them
 Once they can commit to a Java 5 dependency,
  most people will probably prefer to use source
  code Annotations

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Make ServiceImpl POJO transactional
public class ServiceImpl implements Service {
   private int timeout;
   private AccountDao accountDao;

       public void setTimeout(int timeout) {
            this.timeout = timeout;
       }

       public void setAccountDao(AccountDao accountDao) {
            this.accountDao = accountDao;
       }

       public void doSomething() throws ServiceWithdrawnException {
       }
}

<bean id="serviceTarget" class="com.mycompany.service.ServiceImpl">
   <property name="timeout― value=―30‖/>
   <property name="accountDao― ref="accountDao"/>
</bean>


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Make ServiceImpl transactional
<bean id=―service"
  class=―org.springframework.transaction.interceptor.Transactio
  nProxyFactoryBean"/>

      <property name="transactionManager― ref=―txManager"/>

      <property name="target― ref="serviceTarget"/>

  <property name="transactionAttributes">
   <props>
     <prop key="do*">
      PROPAGATION_REQUIRED,-ServiceWithdrawnException
     </prop>
   </props>
  </property>
</bean>




 Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Make ServiceImpl transactional
 Rollback rule means that we don‘t need
      to call setRollbackOnly()
              Spring also supports programmatic
               rollback
 Can run this from a JUnit test case
   Doesn‘t depend on a heavyweight
    container
 Can work with JTA, JDBC, Hibernate,
      JDO, iBATIS transactions…
              Simply change definition of transaction
               manager


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Make ServiceImpl transactional
 Don‘t actually need this much XML per
  transactional object
 Alternative approaches, simpler in large
  applications:
              Use ―auto proxy creator‖ to apply
               similar transaction attributes to multiple
               beans
              Use metadata (annotations) or another
               pointcut approach to apply transactional
               behaviour to multiple classes


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Annotations for Transaction
Demarcation

@Transactional(readOnly=true)
interface MyService {

     @Transactional(readOnly=false,
        rollbackFor=DuplicateOrderIdException.class)
     void createOrder(Order order)
               throws DuplicateOrderIdException ;

     List queryByCriteria(Order criteria);
}



Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Transactions: flexibility
 Rollback rule means that we don‘t need to call
   setRollbackOnly()
       Spring                    also supports programmatic rollback
 Can run this from a JUnit test case in your IDE
   Doesn‘t depend on deplying to an app server

 Can work with JTA, JDBC, JDO, Hibernate,
   iBATIS transactions…
       Simply                     change definition of transaction manager
 Full ability to customize transaction semantics:
    Propagation behavior (REQUIRED, SUPPORTS,
     REQUIRES_NEW, etc.). Isolation level. Read/write
     vs. read-only. Timeout value. Rollback rules.

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring J2EE
 No more JNDI lookups
    JndiObjectFactoryBean

    Generic proxy for DataSources etc.

 No more EJB API dependencies, even in code calling EJBs
    ―Codeless EJB proxies‖

    No more home.create(), Service Locators or Business
     Delegates
    Callers depend on Business Methods interface, not EJB API

    Enhanced testability

 Maximize code reuse by minimizing J2EE API
  dependencies
 Full power of your application server lies under the covers




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Goals of Spring Remoting
 Reduce the amount of glue code needed
 Clearly separate remoting infrastructure from
  application logic
 Increase ease-of-use
 Support both client and server
 Transparent support for different protocols
       HttpInvoker
       Hessian

       Burlap

       RMI

       SOAP (using Axis or XFire)

       Accessing EJBs

       Special WebLogic specific cluster-aware web service invoker



Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring Remoting Overview
 Server-side
              Exporters provide Spring-style configuration for exposing
               services
              Transparent exposure in most cases
              Exporters used for both remoting and JMX
              Translation of remote calls to local calls
              Marshalling of return values and exceptions
 Client-side
              Services are hidden behind (business) interfaces
              Service proxies are generated dynamically
              Translation of local calls to remote calls
              Unmarshalling of return values and exceptions
              Easy unit testing
                  • Inject stub service implementations




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Problems with Traditional JMX
 Requires too much effort from application
  developers
 Code is closely coupled to JMX
 Advanced features require a LOT of
  spaghetti code
              ModelMBeans are a pain to code (see the
               Spring JMX code!)
 JMX 1.0 specification is inconsistent




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring JMX Features (1)
 Transparently expose ANY Spring bean to JMX
 Full control over ObjectNames
 Full control over methods in the management
      interface
              Simple catch-all approach
              Configure in Spring XML
              Use interfaces
              Use source-level metadata (Annotations)
 Removes the need for manual MBean creation
   No need to create Standard MBean interfaces

   No need to create Model MBean metadata



Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring JMX Features (2)
 Declaratively registers MBeans with the
      MBeanServer
              Supports Spring-created AND user-created
               MBeans
              Autodetect MBeans in certain cases
 Declaratively setup JSR-160 connectors
 Access local and remote MBeans via simple Java
      proxies
              MBean dependencies can be injected like any
               other dependency!
 Abstract many implementation inconsistencies


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring Web MVC
 Most similar in design to Struts
              Single shared Controller instance handles
               a particular request type
 Controllers, interceptors run in the IoC
      container
              Important distinguishing feature
              Spring eats its own dog food




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Web MVC: Advantages over Struts
 Allows multiple DispatcherServlets
    More elegant than Struts 1.1 approach

    DispatcherServlets can share a base ―application context‖

 Interceptors as well as controllers
    No need to abuse inheritance to put interception behaviour
     in a common base Action
 No need for custom ActionForms
    Reuse domain objects or DTOs as form objects. MUCH less
     binding code is needed
    Avoid code duplication

 Interface not class based: Easy to customize
 Less tied to JSP
    Clean separation of controller, model and view




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Web tier integration
But I love
  WebWork/Tapestry/Struts/JSF/whatever
 The customer is always right
              …unless the customer has only ever used
               Struts
 We don‘t dictate how to use Spring
   You can preserve your investment (tools etc.)

   You can refactor to use what parts of Spring
    you need
 Seamless Struts, JSF, WebWork integration
 Portlet integration in Spring 1.3


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring Web Flow – What is it?
 A new spring-web module
    A strong compliment to Spring MVC, Struts 1.x, JSF, and
     other frameworks, that addresses one problem really well:
     web application page flow
    Builds on these lower-level frameworks, doesn‘t replace
     them
    Proven in production

 Key benefits:
    Captures page flow as a reusable module

    Makes web application page flow explicit and clear

    Scales elegantly as a web application grows in complexity

    One consistent approach for your developers to learn




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring Web Flow - Design
 What makes a good Web Flow?
   Accomplishes some business goal, e.g.
                  • Book a flight
                  • Pay your taxes
                  • Apply for a Loan
              Encapsulates that business goal as a reusable
               module
                  • A ―black box‖
              Often has multiple paths to support different
               scenarios
                  • Paths may vary based on contextual information
              Often spawns other Flows as sub flows
                  • Has a clear, observable lifecycle: Flow executions start,
                        events happens, they end


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring Web Flow - Design
 What doesn‘t make a good Flow?
              Index pages
              Welcome Pages
              Menus
              Simple Form Submissions
              Sites with a lot of free navigation
 Web flows are best suited for enforcing
      controlled navigation to support business
      process workflows
              Don‘t abuse them

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Web Flow Design – State Diagram

                                                               Phonebook Search Flow State Diagram


    << StartState , ViewState >>                                        << ActionState >>                                               << ActionState >>
                                                                Bind And Validate Search Criteria                                        Execute Query
                                         submit                                                                             success
           View Search Criteria

                                                                                                                                        success


                                                                                             newSearch                                  << ViewState >>
                                                                                                                                          View Results
                                                                                                                   back

                                                                         << SubFlowState             >>                                   select
                                                                               Details
                                                                                                                                        << ActionState >>
                                                                                                                              success
                                                                                                                                          Set Person ID




                  Note how the Details sub flow is a "black box" - its internals are hidden from the Search parent flow!




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring OOP
 No more Singletons
    An antipattern as commonly used

 Program to interfaces, not classes
    Facilitates use of the Strategy pattern
    Makes good OO practice much easier to achieve
    Reduces the cost of programming to interfaces to
     near zero
 Dependency Injection keeps the container from
      messing up your object model
              Base object granularity on OO considerations, not
               Spring considerations
 Combine with transparent persistence to
      achieve a true domain model

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Spring Productivity
 Less code to develop in house
 Focus on your domain
 Reduced testing effort
 ―Old‖ J2EE has a poor productivity record
              Need to simplify the programming model,
               not rely on tools to hide the complexity




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
“Old” J2EE vs Spring
     Write a SLSB                                                                                            Implement a Spring object
              Home interface                                                                                          Business interface
              Component interface                                                                                     Implementation class
              ―Business methods‖ interface                                                                            Straightforward XML
              Bean implementation class                                                                                configuration
              Complex XML configuration
              POJO delegate behind it if you
               want to test outside the
               container                                                                                               The first two steps are
                                                                                                                        necessary in Java anyway
              Much of this is working around
               EJB issues                                                                                              Oops, I really meant
                                                                                                                        ―implement a Java object,‖
              If you want parameterization it                                                                          not ―implement a Spring
               gets even more complex                                                                                   object‖
                   • Need custom code, IoC                                                                             If you want to manage
                        container or ―environment                                                                       simple properties or object
                        variables‖ (ouch)                                                                               dependencies, it‘s easy


    Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
“Old” J2EE vs Spring
 Use your SLSB                                                                                   Use your Spring object
    Write a Service Locator                                                                         Just write the class that
     and/or Business                                                                                  uses it in plain old Java
     Delegate: need JNDI                                                                             Express a dependency of
     code                                                                                             the business interface
    Each class that uses the                                                                         type using Java (setter or
     service needs to depend                                                                          constructor)
     on EJB interface (home                                                                          Simple, intuitive XML
     interface) or you need a                                                                         configuration
     Business Delegate with
     substantial code
     duplication
                                                                                                                No lookup code
              Hard to test outside a                                                                           Easily test with mock
               container                                                                                         object



Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Productivity dividend
 Spring removes unnecessary code
 You end with no Java plumbing code and relatively simple
   XML
         If your Spring XML is complex, you‘re probably doing things
          you couldn‘t do the old way without extensive custom coding
 The old way you have lots of Java plumbing code and lots
   of XML
         A lot of the XML is not standard
 Combine with JDO or Hibernate for transparent
   persistence and the advantage is huge compared to
   traditional J2EE. Still mix in JDBC as needed.
         Real example: financial application with 15% of the code of a
          failed attempt to deliver a ―blueprints‖ solution



Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
MedRec Experience
 A J2EE best practice example by BEA
 A three tier application with
              Presentation tier
              Service tier
              Enterprise Information System tier
 Re-wrote MedRec with Spring
              Demonstrating Spring best practices on
               WLS
              Spring and WLS best practice


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
MedRec Architecture with J2EE
MedRec (Patient/Admin) Application                                                         Shared                                                      Physician Application
Presentation/Interface Tier

                                  JSTL                                                                                                                            JSTL
                                                                                                                                                      JSPs




                                                                                XMLBeans
                  JSPs




                                                                                           Log4j / WL Diagnostic Framework
                                                        Web
                 Struts                               Services                                                                                        Struts
Services Tier




                                                                                                                             Security
         Local / Remote
                                                                 Driven Beans
                                                                                                                                        Local Stateless Session
                                                                  Message-



                                                                                JMX
        Stateless Session                                                                                                                        EJBs
              EJBs
Integration Tier


      Local
       CMP                 JDBC
                                                   JMS
                                                                        JavaMai                                                                 Web Services
      Entity              RowSets                                          l
      Beans


EIS/External Services Tier


                               PointBase                                                                                                            MedRec

                                                                                                                              WebLogic / J2EE component
                                                                                                                              Open Source / 3rd Party component




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
MedRec Architecture with Spring
MedRec (Patient/Admin) Application                                                       Shared                                                               Physician Application
Presentation/Interface Tier
                                                                                                                                                 JSTL
                                     JSTL
                                                                                                                                                         Java Server Pages




                                                                             XMLBeans
         Java Server Pages
                                                       Web                                                                                                     Struts
                   Struts
                                                     Services




                                                                                            Log4j / WL Diagnostic Framework
               Spring Web                                                                                                                                   Spring Web

Services Tier

           Spring / WLS Java Transaction




                                                                         Management
                                                                          Extensions




                                                                                                                              Security
                            Spring




                                                                             Java
                           Remoting                 Message-
                                                     Driven                                                                                             Spring Beans
          Spring Beans                             Enterprise
                                                   Java Beans


Integration Tier
                                                                                                                                                  Spring Remoting
                                             Spring
            Spring                          Messaging               Spring
        Java Database
                                              Java
                                                                   JavaMai                                                                              Web Services
         Connectivity                                                  l
                                            Messaging


EIS/External Services Tier


               PointBase                           MySQL                                                                                                    MedRec
                                                                                                                                         WebLogic / J2EE component
                                                                                                                                         Open Source / 3rd Party component

                                                                                                                                          Spring Framework component


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Quotes
 Spring now has the momentum to
  dominate the J2EE framework space –
  OO guru and consultant Craig Larman
 ―get off your butts and try it out ‖ –
  ‗Pragmatic‘ Dave Thomas




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
A Shameless plug for a good book:
 Written by Rod Johnson
  and Juergen Hoeller
 Describes the Lightweight
  Container Architecture in
  detail
 Practical guide to more
  efficient, more agile,
  more productive J2EE
              Not just a polemic
 Not purely about Spring,
      but
              Uses Spring for all
               examples
              Discusses all key parts of
               Spring


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
The Spring community
 www.springframework.org
 25 developers
              Around 7-8 ―core‖ developers
              Significant number of contributors
 Architects and key developers
              Rod Johnson, Juergen Hoeller
              Alef Arendsen, Keith Donald, Rob Harrop, Colin
               Sampaleanu, Mark Pollack, Thomas Risberg + others
 Framework is developed test-first
 Vibrant community
              Very active mailing lists and forums (6k+ registered users)
 JIRA Issue tracker
 Around 400K direct downloads in late Summer 2005



Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Momentum
     At least 9 books on Spring by late 2005
              J2EE Without EJB: Johnson/Hoeller
              Professional Java Development with Spring:
               Arendsen/Johnson/Hoeller/Risberg/Sampaleanu
              Pro Spring: Rob Harrop
              Spring Live: Matt Raible
              Manning Spring in Action
              Better, Faster Lighter Java (Bruce Tate)
              Spring Developer‘s Handbook (Bruce Tate, O‘Reilly, Q4)
              APress! : Spring MVC and Web Flow book coming
              APress! : Introduction to Spring book coming
     Related projects
              Acegi Security for Spring (Spring Security)
              Spring Rich Client Project
              Spring.NET
              + many frameworks/apps using, integrating with, or
               architecturally based on Spring


Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Roadmap
 Spring 1.2.6 is current production version (released Nov.
  2005)
 Continuing vigorous development and innovation
 Spring 1.3 RC1 in early Dec. 2005
 Upcoming features in 1.3 and beyond:
              XML simplification (dialects)
              Enhanced JMS and messaging integration/functionality
              Enhanced JMX functionality
              Portlet API support
              Continuing AspectJ integration enhancements
              Enhanced use of Annotations, where they make sense
              Enhanced scripting support (scripts can be configured via
               dependency injection, regular objects can be injected with scripts)

              Spring Web Flow final release
              Innovative alternative to XML bean definitions



Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
The Spring Experience 2005




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
The Spring Experience 2005

 International conference for agile Java developers
 http://www.thespringexperience.com
 December 7 – 10th, 2005, Sheraton Resort, Bal Harbour
  Beach Florida
 40+ technical sessions across four tracks: Web,
  Enterprise, Process, Beyond J2EE
 Featuring
              Rod Johnson (Spring Founder, i21 CEO)
              Juergen Hoeller (Spring Co-Founder, i21 CTO)
              Adrian Colyer (AspectJ Founder, i21 Chief Scientist)
              Colin Sampaleanu (Author, Prof. Java Dev. With Spring)
              Rob Harrop (Author, Pro Spring)
              Keith Donald
              Alef Arendsen
              Ben Alex
              … and many more

Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
Interface21 – www.interface21.com

 Spring ―From the Source‖

              Training
                • Both onsite and publicly scheduled (worldwide)
              Consulting
              Support

 Expert consulting on Agile and Lightweight J2EE, AspectJ

 We know Spring best, because we built it
   Almost all core Spring developers work for Interface21
                  • Rod Johnson, Juergen Hoeller, Adrian Colyer, Colin
                        Sampaleanu, Rob Harrop, Keith Donald, Alef Arendsen, Steven
                        Devijver




Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
www.springframework.org



      Questions?

         Colin Sampaleanu
Director, Interface21 North America
       www.interface21.com

Contenu connexe

Tendances

Grameen Solutions Product Engineering Featured Projects 2009 11 12
Grameen Solutions   Product Engineering Featured Projects 2009 11 12Grameen Solutions   Product Engineering Featured Projects 2009 11 12
Grameen Solutions Product Engineering Featured Projects 2009 11 12Grameen Solutions
 
Con3429 pdf 3429_0001
Con3429 pdf 3429_0001Con3429 pdf 3429_0001
Con3429 pdf 3429_0001juancaJdev
 
Pure Ejb Within An Agile Context
Pure Ejb Within An Agile ContextPure Ejb Within An Agile Context
Pure Ejb Within An Agile ContextNoam Bunder
 
The Java EE 7 Platform: Developing for the Cloud (FISL 12)
The Java EE 7 Platform: Developing for the Cloud  (FISL 12)The Java EE 7 Platform: Developing for the Cloud  (FISL 12)
The Java EE 7 Platform: Developing for the Cloud (FISL 12)Arun Gupta
 
Next-Generation Enterprise Application Development with SpringSource dm Serve...
Next-Generation Enterprise Application Development with SpringSource dm Serve...Next-Generation Enterprise Application Development with SpringSource dm Serve...
Next-Generation Enterprise Application Development with SpringSource dm Serve...Aditya Jha
 
Designing JEE Application Structure
Designing JEE Application StructureDesigning JEE Application Structure
Designing JEE Application Structureodedns
 
Roadmap For Fusion Middleware Application Server Infrastructure
Roadmap For Fusion Middleware Application Server InfrastructureRoadmap For Fusion Middleware Application Server Infrastructure
Roadmap For Fusion Middleware Application Server InfrastructureOracleContractors
 
Programming-best practices( beginner) ADF_fusionapps
Programming-best practices( beginner) ADF_fusionappsProgramming-best practices( beginner) ADF_fusionapps
Programming-best practices( beginner) ADF_fusionappsBerry Clemens
 
IBM Portal Web intro
IBM Portal Web introIBM Portal Web intro
IBM Portal Web introdanisman
 
Interactive Forms Review - SDN Day 2008 - Las Vegas
Interactive Forms Review - SDN Day 2008 - Las VegasInteractive Forms Review - SDN Day 2008 - Las Vegas
Interactive Forms Review - SDN Day 2008 - Las Vegasdr.j
 
Intro in JavaEE world (TU Olomouc)
Intro in JavaEE world (TU Olomouc)Intro in JavaEE world (TU Olomouc)
Intro in JavaEE world (TU Olomouc)blahap
 
IBM WebSphere Portal References Education
IBM WebSphere Portal References EducationIBM WebSphere Portal References Education
IBM WebSphere Portal References EducationDvir Reznik
 
Websphere Portal
Websphere PortalWebsphere Portal
Websphere Portaldominion
 
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise ArchitecturesBIOVIA
 
Weblogic 12c experiences - migrations from iAS-platform
Weblogic 12c experiences - migrations from iAS-platformWeblogic 12c experiences - migrations from iAS-platform
Weblogic 12c experiences - migrations from iAS-platformJon Petter Hjulstad
 
Social Enabler for XPages
Social Enabler for XPagesSocial Enabler for XPages
Social Enabler for XPagesNiklas Heidloff
 

Tendances (19)

Grameen Solutions Product Engineering Featured Projects 2009 11 12
Grameen Solutions   Product Engineering Featured Projects 2009 11 12Grameen Solutions   Product Engineering Featured Projects 2009 11 12
Grameen Solutions Product Engineering Featured Projects 2009 11 12
 
Con3429 pdf 3429_0001
Con3429 pdf 3429_0001Con3429 pdf 3429_0001
Con3429 pdf 3429_0001
 
Java EE 6 and GlassFish portfolio
Java EE 6 and GlassFish portfolioJava EE 6 and GlassFish portfolio
Java EE 6 and GlassFish portfolio
 
Pure Ejb Within An Agile Context
Pure Ejb Within An Agile ContextPure Ejb Within An Agile Context
Pure Ejb Within An Agile Context
 
The Java EE 7 Platform: Developing for the Cloud (FISL 12)
The Java EE 7 Platform: Developing for the Cloud  (FISL 12)The Java EE 7 Platform: Developing for the Cloud  (FISL 12)
The Java EE 7 Platform: Developing for the Cloud (FISL 12)
 
Next-Generation Enterprise Application Development with SpringSource dm Serve...
Next-Generation Enterprise Application Development with SpringSource dm Serve...Next-Generation Enterprise Application Development with SpringSource dm Serve...
Next-Generation Enterprise Application Development with SpringSource dm Serve...
 
Designing JEE Application Structure
Designing JEE Application StructureDesigning JEE Application Structure
Designing JEE Application Structure
 
Roadmap For Fusion Middleware Application Server Infrastructure
Roadmap For Fusion Middleware Application Server InfrastructureRoadmap For Fusion Middleware Application Server Infrastructure
Roadmap For Fusion Middleware Application Server Infrastructure
 
JSF 2.2
JSF 2.2JSF 2.2
JSF 2.2
 
Programming-best practices( beginner) ADF_fusionapps
Programming-best practices( beginner) ADF_fusionappsProgramming-best practices( beginner) ADF_fusionapps
Programming-best practices( beginner) ADF_fusionapps
 
IBM Portal Web intro
IBM Portal Web introIBM Portal Web intro
IBM Portal Web intro
 
Interactive Forms Review - SDN Day 2008 - Las Vegas
Interactive Forms Review - SDN Day 2008 - Las VegasInteractive Forms Review - SDN Day 2008 - Las Vegas
Interactive Forms Review - SDN Day 2008 - Las Vegas
 
Intro in JavaEE world (TU Olomouc)
Intro in JavaEE world (TU Olomouc)Intro in JavaEE world (TU Olomouc)
Intro in JavaEE world (TU Olomouc)
 
40020
4002040020
40020
 
IBM WebSphere Portal References Education
IBM WebSphere Portal References EducationIBM WebSphere Portal References Education
IBM WebSphere Portal References Education
 
Websphere Portal
Websphere PortalWebsphere Portal
Websphere Portal
 
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures
 
Weblogic 12c experiences - migrations from iAS-platform
Weblogic 12c experiences - migrations from iAS-platformWeblogic 12c experiences - migrations from iAS-platform
Weblogic 12c experiences - migrations from iAS-platform
 
Social Enabler for XPages
Social Enabler for XPagesSocial Enabler for XPages
Social Enabler for XPages
 

Similaire à [S lide] java_sig-spring-framework

TheSpringFramework
TheSpringFrameworkTheSpringFramework
TheSpringFrameworkShankar Nair
 
Java Ide Day 2008 - Presentation on JDeveloper by Paolo Ramasso
Java Ide Day 2008 - Presentation on JDeveloper by Paolo RamassoJava Ide Day 2008 - Presentation on JDeveloper by Paolo Ramasso
Java Ide Day 2008 - Presentation on JDeveloper by Paolo RamassoJUG Genova
 
Spring Framework
Spring FrameworkSpring Framework
Spring Frameworknomykk
 
Roadmapforfusionmiddlewareapplicationserverinfrastructure 090406080236 Phpapp02
Roadmapforfusionmiddlewareapplicationserverinfrastructure 090406080236 Phpapp02Roadmapforfusionmiddlewareapplicationserverinfrastructure 090406080236 Phpapp02
Roadmapforfusionmiddlewareapplicationserverinfrastructure 090406080236 Phpapp02Gokhan Fazli Celik
 
Spring presentecion isil
Spring presentecion isilSpring presentecion isil
Spring presentecion isilWilly Aguirre
 
Spring presentecion isil
Spring presentecion isilSpring presentecion isil
Spring presentecion isilWilly Aguirre
 
Model Driven Architecture (MDA): Motivations, Status & Future
Model Driven Architecture (MDA): Motivations, Status & FutureModel Driven Architecture (MDA): Motivations, Status & Future
Model Driven Architecture (MDA): Motivations, Status & Futureelliando dias
 
How Spring Framework Really Works?
How Spring Framework Really Works?How Spring Framework Really Works?
How Spring Framework Really Works?NexSoftsys
 
Real world java_ee_patterns
Real world java_ee_patternsReal world java_ee_patterns
Real world java_ee_patternsAlassane Diallo
 
The Complete Spring Tutorial
The Complete Spring TutorialThe Complete Spring Tutorial
The Complete Spring Tutorialcribes
 
Enterprise Spring Building Scalable Applications
Enterprise Spring Building Scalable ApplicationsEnterprise Spring Building Scalable Applications
Enterprise Spring Building Scalable ApplicationsGordon Dickens
 

Similaire à [S lide] java_sig-spring-framework (20)

Spring ppt
Spring pptSpring ppt
Spring ppt
 
TheSpringFramework
TheSpringFrameworkTheSpringFramework
TheSpringFramework
 
Spring
SpringSpring
Spring
 
Spring Framework Rohit
Spring Framework RohitSpring Framework Rohit
Spring Framework Rohit
 
Spring Mvc
Spring MvcSpring Mvc
Spring Mvc
 
Spring
SpringSpring
Spring
 
Java Ide Day 2008 - Presentation on JDeveloper by Paolo Ramasso
Java Ide Day 2008 - Presentation on JDeveloper by Paolo RamassoJava Ide Day 2008 - Presentation on JDeveloper by Paolo Ramasso
Java Ide Day 2008 - Presentation on JDeveloper by Paolo Ramasso
 
Spring User Guide
Spring User GuideSpring User Guide
Spring User Guide
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Roadmapforfusionmiddlewareapplicationserverinfrastructure 090406080236 Phpapp02
Roadmapforfusionmiddlewareapplicationserverinfrastructure 090406080236 Phpapp02Roadmapforfusionmiddlewareapplicationserverinfrastructure 090406080236 Phpapp02
Roadmapforfusionmiddlewareapplicationserverinfrastructure 090406080236 Phpapp02
 
Spring presentecion isil
Spring presentecion isilSpring presentecion isil
Spring presentecion isil
 
Spring presentecion isil
Spring presentecion isilSpring presentecion isil
Spring presentecion isil
 
Model Driven Architecture (MDA): Motivations, Status & Future
Model Driven Architecture (MDA): Motivations, Status & FutureModel Driven Architecture (MDA): Motivations, Status & Future
Model Driven Architecture (MDA): Motivations, Status & Future
 
Introducing spring
Introducing springIntroducing spring
Introducing spring
 
How Spring Framework Really Works?
How Spring Framework Really Works?How Spring Framework Really Works?
How Spring Framework Really Works?
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Real world java_ee_patterns
Real world java_ee_patternsReal world java_ee_patterns
Real world java_ee_patterns
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
The Complete Spring Tutorial
The Complete Spring TutorialThe Complete Spring Tutorial
The Complete Spring Tutorial
 
Enterprise Spring Building Scalable Applications
Enterprise Spring Building Scalable ApplicationsEnterprise Spring Building Scalable Applications
Enterprise Spring Building Scalable Applications
 

Dernier

HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...Nguyen Thanh Tu Collection
 
4.16.24 Poverty and Precarity--Desmond.pptx
4.16.24 Poverty and Precarity--Desmond.pptx4.16.24 Poverty and Precarity--Desmond.pptx
4.16.24 Poverty and Precarity--Desmond.pptxmary850239
 
ICS2208 Lecture6 Notes for SL spaces.pdf
ICS2208 Lecture6 Notes for SL spaces.pdfICS2208 Lecture6 Notes for SL spaces.pdf
ICS2208 Lecture6 Notes for SL spaces.pdfVanessa Camilleri
 
The Contemporary World: The Globalization of World Politics
The Contemporary World: The Globalization of World PoliticsThe Contemporary World: The Globalization of World Politics
The Contemporary World: The Globalization of World PoliticsRommel Regala
 
Dust Of Snow By Robert Frost Class-X English CBSE
Dust Of Snow By Robert Frost Class-X English CBSEDust Of Snow By Robert Frost Class-X English CBSE
Dust Of Snow By Robert Frost Class-X English CBSEaurabinda banchhor
 
Measures of Position DECILES for ungrouped data
Measures of Position DECILES for ungrouped dataMeasures of Position DECILES for ungrouped data
Measures of Position DECILES for ungrouped dataBabyAnnMotar
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfErwinPantujan2
 
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...Postal Advocate Inc.
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designMIPLM
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfPatidar M
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONHumphrey A Beña
 
Textual Evidence in Reading and Writing of SHS
Textual Evidence in Reading and Writing of SHSTextual Evidence in Reading and Writing of SHS
Textual Evidence in Reading and Writing of SHSMae Pangan
 
ClimART Action | eTwinning Project
ClimART Action    |    eTwinning ProjectClimART Action    |    eTwinning Project
ClimART Action | eTwinning Projectjordimapav
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Celine George
 
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptxAUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptxiammrhaywood
 
Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)Mark Reed
 
TEACHER REFLECTION FORM (NEW SET........).docx
TEACHER REFLECTION FORM (NEW SET........).docxTEACHER REFLECTION FORM (NEW SET........).docx
TEACHER REFLECTION FORM (NEW SET........).docxruthvilladarez
 
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...JojoEDelaCruz
 

Dernier (20)

HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
HỌC TỐT TIẾNG ANH 11 THEO CHƯƠNG TRÌNH GLOBAL SUCCESS ĐÁP ÁN CHI TIẾT - CẢ NĂ...
 
4.16.24 Poverty and Precarity--Desmond.pptx
4.16.24 Poverty and Precarity--Desmond.pptx4.16.24 Poverty and Precarity--Desmond.pptx
4.16.24 Poverty and Precarity--Desmond.pptx
 
ICS2208 Lecture6 Notes for SL spaces.pdf
ICS2208 Lecture6 Notes for SL spaces.pdfICS2208 Lecture6 Notes for SL spaces.pdf
ICS2208 Lecture6 Notes for SL spaces.pdf
 
The Contemporary World: The Globalization of World Politics
The Contemporary World: The Globalization of World PoliticsThe Contemporary World: The Globalization of World Politics
The Contemporary World: The Globalization of World Politics
 
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptxYOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
 
Dust Of Snow By Robert Frost Class-X English CBSE
Dust Of Snow By Robert Frost Class-X English CBSEDust Of Snow By Robert Frost Class-X English CBSE
Dust Of Snow By Robert Frost Class-X English CBSE
 
Measures of Position DECILES for ungrouped data
Measures of Position DECILES for ungrouped dataMeasures of Position DECILES for ungrouped data
Measures of Position DECILES for ungrouped data
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
 
INCLUSIVE EDUCATION PRACTICES FOR TEACHERS AND TRAINERS.pptx
INCLUSIVE EDUCATION PRACTICES FOR TEACHERS AND TRAINERS.pptxINCLUSIVE EDUCATION PRACTICES FOR TEACHERS AND TRAINERS.pptx
INCLUSIVE EDUCATION PRACTICES FOR TEACHERS AND TRAINERS.pptx
 
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-design
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdf
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
 
Textual Evidence in Reading and Writing of SHS
Textual Evidence in Reading and Writing of SHSTextual Evidence in Reading and Writing of SHS
Textual Evidence in Reading and Writing of SHS
 
ClimART Action | eTwinning Project
ClimART Action    |    eTwinning ProjectClimART Action    |    eTwinning Project
ClimART Action | eTwinning Project
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17
 
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptxAUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
 
Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)
 
TEACHER REFLECTION FORM (NEW SET........).docx
TEACHER REFLECTION FORM (NEW SET........).docxTEACHER REFLECTION FORM (NEW SET........).docx
TEACHER REFLECTION FORM (NEW SET........).docx
 
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
 

[S lide] java_sig-spring-framework

  • 1. The Spring Framework Colin Sampaleanu Interface21
  • 2. Spring framework goals  Make J2EE easier to use  Address end-to-end requirements rather than one tier  Eliminate need for middle tier ―glue‖  Provide the best Inversion of Control solution  Provide a pure Java AOP implementation, focused on solving common problems in J2EE  Fully portable across application servers  Core container can run in any environment, not just an application server  Some applications don‘t need a full application server: just a web container  But where an app server adds value, take full advantage (no compromises) of all additional advanced functionality Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 3. …Spring framework goals  ―Non-invasive‖ framework  Application code has minimal or no dependency on Spring APIs  Key principal seen throughout Spring‘s design  More power to the POJO  Facilitate unit testing  Allow effective TDD  Allow business objects to be unit tested outside the container  Facilitate OO best practice  We‘re used to implementing ―EJB‖ or ―J2EE‖ applications rather than OO applications.  It doesn‘t have to be this way.  Provide a good alternative to EJB for many applications  Enhance productivity compared to ―traditional‖ J2EE approaches Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 4. Part of a new wave of frameworks  Big change in how J2EE applications are written  Less emphasis on EJB  EJB has been grossly overused  EJB has some unique capabilities for a minority of apps (distributed transaction management, RMI remoting) but for the most part is looking like legacy  Not just Spring  PicoContainer, HiveMind and other Inversion of Control frameworks  EJB 3.0 (2006-2007) programming model looks a lot like (Spring IoC – important features) + Hibernate/JDO  These lightweight frameworks are different from earlier frameworks  Spring is the most mature, most powerful and by far the most popular Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 5. Unique Spring capabilities  Declarative transaction management for POJOs with or without EJB. Optional Annotations support.  Consistent approach to data access, with common exception hierarchy  Simplifies working with JDBC, JDO, Hibernate, TopLink, etc  IoC/AOP integration  Integration with a wide variety of popular products  Gestalt  More than the sum of its parts  Hard to explain in a snappy phrase, but our users love it  Solid, robust, works now  In production in mission-critical apps now, across all industries Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 6. A layered framework  Spring Web Flow  Web MVC  AOP framework  Integrates with IoC  IoC container  Dependency Injection  Transaction management  Data access  JMX  Transparent Remoting  One stop shop but can also use as modules Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 7. Layers of Spring Web AOP Enterprise Context Web Flow AOP core Web-based JDBC + ORM Web MVC AOP Alliance AspectJ Transactions Factories Incl. Views (JSP, Velocity, Remoting Access PDF, Excel) Source-level JMX Event metadata Web Messaging JNDI Integration Spring Core Beans Utilities Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 8. Spring in the Middle Tier  Complete solution for managing business objects  Write your business objects as POJOs  Spring handles wiring and lookup  Simple, consistent, XML format (most common choice) • But the IoC container is not tied to XML • Other formats coming  Application code has few dependencies on the container—often no dependencies on the container  Spring Pet Store sample has no dependencies on Spring IoC  No imports, no magic annotations for IoC: nothing Spring- specific  Easy unit testing. TDD works! Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 9. …Spring in the Middle Tier  Named ―beans‖—objects—provide a clear point for pluggability  Objects that depend on a given bean depend on its interface(s) and/or class  Better practice to depend on interfaces  Can change any object‘s implementation with zero impact on callers  The ―Lego Hypothesis‖ made real in J2EE applications Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 10. …Spring in the Middle Tier  The most complete IoC container  Setter Dependency Injection • Configuration via JavaBean properties  Constructor Dependency Injection • Configuration via constructor arguments • Pioneered by PicoContainer  Method Injection  Dependency Lookup • Avalon/EJB-style callbacks Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 11. Middle Tier: Setter Injection public class PetStoreImpl implements PetStoreFacade { private OrderDao orderDao; private ItemDao itemDao; ... public void setOrderDao(OrderDao orderDao) { this.orderDao = orderDao; } public void setItemDao(ItemDao itemDao) { this.itemDao = itemDao; } ... public void insertOrder(Order order) { this.orderDao.insertOrder(order); this.itemDao.updateQuantity(order); } } Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 12. Middle Tier: Setter Injection <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="... "/> <property name="url" value="..."/> <property name="username" value="...“> <property name="password" value="...“/> </bean> <bean id="itemDao" class="org.springframework.samples.jpetstore.dao.ibatis.SqlMapItemDao"> <property name="dataSource" ref="dataSource"/> <property name="sqlMap" ref="sqlMap"/> </bean> <bean id="petStore“ class="org.springframework.samples.jpetstore.domain.logic.PetStoreImpl"> <property name="orderDao" ref="orderDao"/> <property name="itemDao" ref="itemDao"/> </bean> Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 13. Middle Tier: Constructor Injection public class PetStoreImpl implements PetStoreFacade { private OrderDao orderDao; private ItemDao itemDao; ... public PetStoreImpl(OrderDao orderDao, ItemDao itemDao) { this.orderDao = orderDao; this.itemDao = itemDao; } ... public void insertOrder(Order order) { this.orderDao.insertOrder(order); this.itemDao.updateQuantity(order); } } Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 14. Middle Tier: Constructor Injection <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="... "/> <property name="url" value="..."/> <property name="username" value="...“> <property name="password" value="...“/> </bean> <bean id="itemDao" class="org.springframework.samples.jpetstore.dao.ibatis.SqlMapItemDao"> <property name="dataSource" ref="dataSource"/> <property name="sqlMap" ref="sqlMap"/> </bean> <bean id="petStore“ class="org.springframework.samples.jpetstore.domain.logic.PetStoreImpl"> <constructor-arg ref="orderDao"/> <constructor-arg ref="itemDao"/> </bean> Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 15. Middle Tier: Dependency Injection  Dependencies are expressed in pure Java  Push configuration (container injects dependencies) is much better than pull configuration (objects look up dependencies)  No ad hoc lookup  Code is self-documenting, describing its own dependencies  Can apply consistent management strategy everywhere  Easy to test • No JNDI to stub, properties files to substitute, RDBMS data to set up… Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 16. Middle Tier: Dependency Injection  Properties & Constructor Arguments injected are:  Configuration values (i.e. something like a timeout integer value)  Dependencies on collaborators (i.e. the reference to accountDao in the example)  Can run many existing classes unchanged  ―Autowiring‖  Trivial to test application classes outside the container, without Spring  Can reuse application classes outside the container  Hot swapping, instance pooling (with AOP) Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 17. Spring in the Middle Tier  Advanced IoC features  Manage lists, maps or sets, with arbitrary nesting  Create objects using new or from factory methods  Method Injection • Container can override abstract or concrete methods at runtime • Can use to avoid dependence on Spring (override isolates dependency on Spring API)  Nearly any existing Java object can be used in a Spring context  Leverages standard JavaBeans PropertyEditor machinery • Register custom property editors  Many hooks to customize container behaviour Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 18. Why AOP?  Dependency Injection takes us a long way, but not quite enough on its own  AOP complements IoC to deliver a non-invasive framework  Externalizes crosscutting concerns from application code  Concerns that cut across the structure of an object model  AOP offers a different way of thinking about program structure to an object hierarchy  EJB interception is conceptually similar, but not extensible and imposes too many constraints on components  Can‘t define new aspects  Constrained pointcut model (methods on the component interface)  Spring provides important out-of-the box aspects  Declarative transaction management for any POJO  Remoting  Pooling, and resource acquisition/release Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 19. AOP + IoC: A unique synergy  AOP + IoC is a match made in heaven  Any object obtained from a Spring IoC container can be transparently advised based on configuration  Advisors, pointcuts and advices can themselves be managed by the IoC container  Spring is an integrated, consistent solution Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 20. Custom AOP  Complements, rather then conflicts with, OOP  Email administrator if a particular exception is thrown  Apply custom declarative security checks  Performance monitoring  Auditing  Caching  Objects have clear responsibilities  No need to abuse inheritance  Integration with AspectJ/AspectWerz for when you need a full-blown AOP framework Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 21. Spring DAO  Integrated with Spring transaction management  Unique synergy  Gestalt again…  Doesn‘t reinvent the wheel  There are good solutions for O/R mapping, we make them easier to use  Out-of-the-box support for  JDBC  JDO  Hibernate  TopLink  iBATIS  + others  Model allows support for other technologies  Java Persistence API support coming as soon as spec is stable Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 22. …Spring DAO  Using clearly defined technology agnostic DAO interfaces is a best practice  Implement with JDO, JDBC, Hibernate, iBATIS…  Spring doesn‘t enforce this, but it makes it very easy  Consistent DataAccessException hierarchy allows truly technology-agnostic DAOs public interface ReminderDao { public Collection findRequestsEligibleForReminder() throws DataAccessException; void persist(Reminder reminder) throws DataAccessException; } Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 23. Spring DAO: Consistent exception hierarchy Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 24. Spring DAO: JDBC  Class library offers simpler programming model than raw JDBC  No more try/catch/finally blocks  No more leaked connections  Spring will always close a connection: no scope for programmer error  Meaningful exception hierarchy  No more vendor code lookups • Spring autodetects database and knows what Oracle, DB2 error codes mean • More portable code  More readable code • catch (BadSqlGrammarException ex)  Sophisticated, portable stored procedure and BLOB/CLOB support  Can refactor to clean up JDBC without adopting Spring overall  Incremental adoption: Step by step Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 25. Example Working With the JPetStore Database  Get a list of pet types (Strings) JdbcTemplate template = new JdbcTemplate(dataSource); final List names = new LinkedList(); template.query("SELECT id,name FROM types ORDER BY name", new RowCallbackHandler() { public void processRow(ResultSet rs) throws SQLException { names.add(rs.getString(1)); } });  Note usage of ‗final‘ on the names variable so that the anonymous inner class can have access to it  Remember this when working with callbacks Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 26. Mapping Result sets to Objects  Example of a RowCallbackHandler mapping ResultSets to complex types RowCallbackHandler() { public void processRow(ResultSet rs) throws SQLException { Pet pet=new Pet(); pet.setId(rs.getInt(“pet_id”)); pet.setName(rs.getString(“pet_name”)); … // more fields here pets.add(pet); } Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 27. Spring DAO: ORM (Hibernate / JDO / TopLink / Other)  Spring manages the unit of work (Hibernate Session, JDO PersistenceManager, TopLink UnitOfWork, etc.)  No more passing them around or custom ThreadLocals for this purpose  Sessions are managed within Spring transaction management  Works with JTA or local transactions, with no code changes  Works within EJB container with CMT if desired  Templates (HibernateTemplate/JDOTemplate, etc.) makes common operations easy  Simpler, consistent exception handling  Many operations become one-liners  Less, simpler, code compared to using Hibernate alone  Mixed use of ORM and JDBC within the same transaction Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 28. HibernateTemplate DAO example public class HibernateReminderDao extends HibernateDaoSupport implements ReminderDao { public Collection findRequestsEligibleForReminder() throws DataAccessException { getHibernateTemplate().find("from Request r where r.something = 1"); } public void persist(Reminder reminder) throws DataAccessException { getHibernateTemplate().saveOrUpdate(reminder); } } Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 29. HibernateTemplate DAO example (2) <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource― ref="dataSource"/> <property name="mappingResources"> <value>mycompany/mappings.hbm.xml</value> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">net.sf.hibernate.dialect.HSQLDialect</prop> </props> </property> </bean> <bean id=―myDao" class=―com.mycompany.HibernateReminderDao" autowire=―autodetect―/> Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 30. Spring DAO: JDO  Comparable to Hibernate support  PersistenceManager management just like Hibernate Session management  Mixed use of JDO and JDBC within the same transaction  Support JDO 2.0 features and vendor extensions in a portable manner  All major vendors support similar concepts  We work closely with JDO vendors, including:  SolarMetric (Kodo)  Open source: JPOX JDO  Spring + Kodo is a particularly strong enterprise combination Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 31. Spring DAO: TopLink  Originally written by Oracle, donated to Spring  Basic approach is very similar to Hibernate or JDO integration approach  Mixed use of TopLink and JDBC within the same transaction  Strong enterprise combination Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 32. Spring Transaction  Consistent abstraction  PlatformTransactionManager  Does not reinvent transaction manager  Choose between JTA, JDBC, Hibernate, JDO, etc with simple changes to configuration not Java code  No more rewriting application to scale up from JDBC, JDO, or Hibernate local transactions to JTA global transactions  Use the simplest transaction infrastructure that can possibly work  Global (JTA) transactions optionally take advantage of server-specific enhanced functionality  Local transactions offer more features than standard JTA (isolation levels, savepoints, etc.) Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 33. Spring Transaction (WebLogic)  Enhanced support for transactions in a WebLogic environment  Beyond the level of standard JTA APIs  WebLogicJtaTransactionManager  Allows Spring-driven transactions to be visible in WebLogic‘s transaction monitor  Supports per-transaction isolation level  Enhances resume support when using transaction suspension  Automatically detects WebLogic server version  Usage on a WebLogic client is supported  Fully XA capable access to WebLogic DataSources and JMS Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 34. Programmatic Transaction Management  Simpler, cleaner API than JTA  Exception hierarchy as with DAO  No need to catch multiple exceptions without a common base class  Unchecked exceptions  Use the same API for JTA, JDBC, Hibernate, etc.  Write once have transaction management anywhereTM Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 35. Declarative Transaction Management  Most popular transaction management option  Built on same abstraction as programmatic transaction management  Declarative transaction management for any POJO, without EJB: even without JTA (single database)  More flexible than EJB CMT  Declarative rollback rules: roll back on MyCheckedException  Supports nested transactions and savepoints if the underlying resource manager does  Non-invasive: Minimizes dependence on the container  No more passing around EJBContext Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 36. Making a service transactional  The original service implementation class is unmodified and knows nothing about transactions  Pluggable metadata tells Spring to wrap the target service with a proxy object which looks like the target, but applies transaction semantics on method invocations  Most people today use XML for defining both the services, and the transactional wrappers around them  Once they can commit to a Java 5 dependency, most people will probably prefer to use source code Annotations Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 37. Make ServiceImpl POJO transactional public class ServiceImpl implements Service { private int timeout; private AccountDao accountDao; public void setTimeout(int timeout) { this.timeout = timeout; } public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } public void doSomething() throws ServiceWithdrawnException { } } <bean id="serviceTarget" class="com.mycompany.service.ServiceImpl"> <property name="timeout― value=―30‖/> <property name="accountDao― ref="accountDao"/> </bean> Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 38. Make ServiceImpl transactional <bean id=―service" class=―org.springframework.transaction.interceptor.Transactio nProxyFactoryBean"/> <property name="transactionManager― ref=―txManager"/> <property name="target― ref="serviceTarget"/> <property name="transactionAttributes"> <props> <prop key="do*"> PROPAGATION_REQUIRED,-ServiceWithdrawnException </prop> </props> </property> </bean> Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 39. Make ServiceImpl transactional  Rollback rule means that we don‘t need to call setRollbackOnly()  Spring also supports programmatic rollback  Can run this from a JUnit test case  Doesn‘t depend on a heavyweight container  Can work with JTA, JDBC, Hibernate, JDO, iBATIS transactions…  Simply change definition of transaction manager Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 40. Make ServiceImpl transactional  Don‘t actually need this much XML per transactional object  Alternative approaches, simpler in large applications:  Use ―auto proxy creator‖ to apply similar transaction attributes to multiple beans  Use metadata (annotations) or another pointcut approach to apply transactional behaviour to multiple classes Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 41. Annotations for Transaction Demarcation @Transactional(readOnly=true) interface MyService { @Transactional(readOnly=false, rollbackFor=DuplicateOrderIdException.class) void createOrder(Order order) throws DuplicateOrderIdException ; List queryByCriteria(Order criteria); } Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 42. Transactions: flexibility  Rollback rule means that we don‘t need to call setRollbackOnly()  Spring also supports programmatic rollback  Can run this from a JUnit test case in your IDE  Doesn‘t depend on deplying to an app server  Can work with JTA, JDBC, JDO, Hibernate, iBATIS transactions…  Simply change definition of transaction manager  Full ability to customize transaction semantics:  Propagation behavior (REQUIRED, SUPPORTS, REQUIRES_NEW, etc.). Isolation level. Read/write vs. read-only. Timeout value. Rollback rules. Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 43. Spring J2EE  No more JNDI lookups  JndiObjectFactoryBean  Generic proxy for DataSources etc.  No more EJB API dependencies, even in code calling EJBs  ―Codeless EJB proxies‖  No more home.create(), Service Locators or Business Delegates  Callers depend on Business Methods interface, not EJB API  Enhanced testability  Maximize code reuse by minimizing J2EE API dependencies  Full power of your application server lies under the covers Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 44. Goals of Spring Remoting  Reduce the amount of glue code needed  Clearly separate remoting infrastructure from application logic  Increase ease-of-use  Support both client and server  Transparent support for different protocols  HttpInvoker  Hessian  Burlap  RMI  SOAP (using Axis or XFire)  Accessing EJBs  Special WebLogic specific cluster-aware web service invoker Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 45. Spring Remoting Overview  Server-side  Exporters provide Spring-style configuration for exposing services  Transparent exposure in most cases  Exporters used for both remoting and JMX  Translation of remote calls to local calls  Marshalling of return values and exceptions  Client-side  Services are hidden behind (business) interfaces  Service proxies are generated dynamically  Translation of local calls to remote calls  Unmarshalling of return values and exceptions  Easy unit testing • Inject stub service implementations Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 46. Problems with Traditional JMX  Requires too much effort from application developers  Code is closely coupled to JMX  Advanced features require a LOT of spaghetti code  ModelMBeans are a pain to code (see the Spring JMX code!)  JMX 1.0 specification is inconsistent Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 47. Spring JMX Features (1)  Transparently expose ANY Spring bean to JMX  Full control over ObjectNames  Full control over methods in the management interface  Simple catch-all approach  Configure in Spring XML  Use interfaces  Use source-level metadata (Annotations)  Removes the need for manual MBean creation  No need to create Standard MBean interfaces  No need to create Model MBean metadata Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 48. Spring JMX Features (2)  Declaratively registers MBeans with the MBeanServer  Supports Spring-created AND user-created MBeans  Autodetect MBeans in certain cases  Declaratively setup JSR-160 connectors  Access local and remote MBeans via simple Java proxies  MBean dependencies can be injected like any other dependency!  Abstract many implementation inconsistencies Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 49. Spring Web MVC  Most similar in design to Struts  Single shared Controller instance handles a particular request type  Controllers, interceptors run in the IoC container  Important distinguishing feature  Spring eats its own dog food Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 50. Web MVC: Advantages over Struts  Allows multiple DispatcherServlets  More elegant than Struts 1.1 approach  DispatcherServlets can share a base ―application context‖  Interceptors as well as controllers  No need to abuse inheritance to put interception behaviour in a common base Action  No need for custom ActionForms  Reuse domain objects or DTOs as form objects. MUCH less binding code is needed  Avoid code duplication  Interface not class based: Easy to customize  Less tied to JSP  Clean separation of controller, model and view Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 51. Web tier integration But I love WebWork/Tapestry/Struts/JSF/whatever  The customer is always right  …unless the customer has only ever used Struts  We don‘t dictate how to use Spring  You can preserve your investment (tools etc.)  You can refactor to use what parts of Spring you need  Seamless Struts, JSF, WebWork integration  Portlet integration in Spring 1.3 Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 52. Spring Web Flow – What is it?  A new spring-web module  A strong compliment to Spring MVC, Struts 1.x, JSF, and other frameworks, that addresses one problem really well: web application page flow  Builds on these lower-level frameworks, doesn‘t replace them  Proven in production  Key benefits:  Captures page flow as a reusable module  Makes web application page flow explicit and clear  Scales elegantly as a web application grows in complexity  One consistent approach for your developers to learn Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 53. Spring Web Flow - Design  What makes a good Web Flow?  Accomplishes some business goal, e.g. • Book a flight • Pay your taxes • Apply for a Loan  Encapsulates that business goal as a reusable module • A ―black box‖  Often has multiple paths to support different scenarios • Paths may vary based on contextual information  Often spawns other Flows as sub flows • Has a clear, observable lifecycle: Flow executions start, events happens, they end Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 54. Spring Web Flow - Design  What doesn‘t make a good Flow?  Index pages  Welcome Pages  Menus  Simple Form Submissions  Sites with a lot of free navigation  Web flows are best suited for enforcing controlled navigation to support business process workflows  Don‘t abuse them Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 55. Web Flow Design – State Diagram Phonebook Search Flow State Diagram << StartState , ViewState >> << ActionState >> << ActionState >> Bind And Validate Search Criteria Execute Query submit success View Search Criteria success newSearch << ViewState >> View Results back << SubFlowState >> select Details << ActionState >> success Set Person ID Note how the Details sub flow is a "black box" - its internals are hidden from the Search parent flow! Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 56. Spring OOP  No more Singletons  An antipattern as commonly used  Program to interfaces, not classes  Facilitates use of the Strategy pattern  Makes good OO practice much easier to achieve  Reduces the cost of programming to interfaces to near zero  Dependency Injection keeps the container from messing up your object model  Base object granularity on OO considerations, not Spring considerations  Combine with transparent persistence to achieve a true domain model Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 57. Spring Productivity  Less code to develop in house  Focus on your domain  Reduced testing effort  ―Old‖ J2EE has a poor productivity record  Need to simplify the programming model, not rely on tools to hide the complexity Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 58. “Old” J2EE vs Spring  Write a SLSB  Implement a Spring object  Home interface  Business interface  Component interface  Implementation class  ―Business methods‖ interface  Straightforward XML  Bean implementation class configuration  Complex XML configuration  POJO delegate behind it if you want to test outside the container  The first two steps are necessary in Java anyway  Much of this is working around EJB issues  Oops, I really meant ―implement a Java object,‖  If you want parameterization it not ―implement a Spring gets even more complex object‖ • Need custom code, IoC  If you want to manage container or ―environment simple properties or object variables‖ (ouch) dependencies, it‘s easy Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 59. “Old” J2EE vs Spring  Use your SLSB  Use your Spring object  Write a Service Locator  Just write the class that and/or Business uses it in plain old Java Delegate: need JNDI  Express a dependency of code the business interface  Each class that uses the type using Java (setter or service needs to depend constructor) on EJB interface (home  Simple, intuitive XML interface) or you need a configuration Business Delegate with substantial code duplication  No lookup code  Hard to test outside a  Easily test with mock container object Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 60. Productivity dividend  Spring removes unnecessary code  You end with no Java plumbing code and relatively simple XML  If your Spring XML is complex, you‘re probably doing things you couldn‘t do the old way without extensive custom coding  The old way you have lots of Java plumbing code and lots of XML  A lot of the XML is not standard  Combine with JDO or Hibernate for transparent persistence and the advantage is huge compared to traditional J2EE. Still mix in JDBC as needed.  Real example: financial application with 15% of the code of a failed attempt to deliver a ―blueprints‖ solution Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 61. MedRec Experience  A J2EE best practice example by BEA  A three tier application with  Presentation tier  Service tier  Enterprise Information System tier  Re-wrote MedRec with Spring  Demonstrating Spring best practices on WLS  Spring and WLS best practice Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 62. MedRec Architecture with J2EE MedRec (Patient/Admin) Application Shared Physician Application Presentation/Interface Tier JSTL JSTL JSPs XMLBeans JSPs Log4j / WL Diagnostic Framework Web Struts Services Struts Services Tier Security Local / Remote Driven Beans Local Stateless Session Message- JMX Stateless Session EJBs EJBs Integration Tier Local CMP JDBC JMS JavaMai Web Services Entity RowSets l Beans EIS/External Services Tier PointBase MedRec WebLogic / J2EE component Open Source / 3rd Party component Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 63. MedRec Architecture with Spring MedRec (Patient/Admin) Application Shared Physician Application Presentation/Interface Tier JSTL JSTL Java Server Pages XMLBeans Java Server Pages Web Struts Struts Services Log4j / WL Diagnostic Framework Spring Web Spring Web Services Tier Spring / WLS Java Transaction Management Extensions Security Spring Java Remoting Message- Driven Spring Beans Spring Beans Enterprise Java Beans Integration Tier Spring Remoting Spring Spring Messaging Spring Java Database Java JavaMai Web Services Connectivity l Messaging EIS/External Services Tier PointBase MySQL MedRec WebLogic / J2EE component Open Source / 3rd Party component Spring Framework component Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 64. Quotes  Spring now has the momentum to dominate the J2EE framework space – OO guru and consultant Craig Larman  ―get off your butts and try it out ‖ – ‗Pragmatic‘ Dave Thomas Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 65. A Shameless plug for a good book:  Written by Rod Johnson and Juergen Hoeller  Describes the Lightweight Container Architecture in detail  Practical guide to more efficient, more agile, more productive J2EE  Not just a polemic  Not purely about Spring, but  Uses Spring for all examples  Discusses all key parts of Spring Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 66. The Spring community  www.springframework.org  25 developers  Around 7-8 ―core‖ developers  Significant number of contributors  Architects and key developers  Rod Johnson, Juergen Hoeller  Alef Arendsen, Keith Donald, Rob Harrop, Colin Sampaleanu, Mark Pollack, Thomas Risberg + others  Framework is developed test-first  Vibrant community  Very active mailing lists and forums (6k+ registered users)  JIRA Issue tracker  Around 400K direct downloads in late Summer 2005 Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 67. Momentum  At least 9 books on Spring by late 2005  J2EE Without EJB: Johnson/Hoeller  Professional Java Development with Spring: Arendsen/Johnson/Hoeller/Risberg/Sampaleanu  Pro Spring: Rob Harrop  Spring Live: Matt Raible  Manning Spring in Action  Better, Faster Lighter Java (Bruce Tate)  Spring Developer‘s Handbook (Bruce Tate, O‘Reilly, Q4)  APress! : Spring MVC and Web Flow book coming  APress! : Introduction to Spring book coming  Related projects  Acegi Security for Spring (Spring Security)  Spring Rich Client Project  Spring.NET  + many frameworks/apps using, integrating with, or architecturally based on Spring Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 68. Roadmap  Spring 1.2.6 is current production version (released Nov. 2005)  Continuing vigorous development and innovation  Spring 1.3 RC1 in early Dec. 2005  Upcoming features in 1.3 and beyond:  XML simplification (dialects)  Enhanced JMS and messaging integration/functionality  Enhanced JMX functionality  Portlet API support  Continuing AspectJ integration enhancements  Enhanced use of Annotations, where they make sense  Enhanced scripting support (scripts can be configured via dependency injection, regular objects can be injected with scripts)  Spring Web Flow final release  Innovative alternative to XML bean definitions Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 69. The Spring Experience 2005 Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 70. The Spring Experience 2005  International conference for agile Java developers  http://www.thespringexperience.com  December 7 – 10th, 2005, Sheraton Resort, Bal Harbour Beach Florida  40+ technical sessions across four tracks: Web, Enterprise, Process, Beyond J2EE  Featuring  Rod Johnson (Spring Founder, i21 CEO)  Juergen Hoeller (Spring Co-Founder, i21 CTO)  Adrian Colyer (AspectJ Founder, i21 Chief Scientist)  Colin Sampaleanu (Author, Prof. Java Dev. With Spring)  Rob Harrop (Author, Pro Spring)  Keith Donald  Alef Arendsen  Ben Alex  … and many more Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 71. Interface21 – www.interface21.com  Spring ―From the Source‖  Training • Both onsite and publicly scheduled (worldwide)  Consulting  Support  Expert consulting on Agile and Lightweight J2EE, AspectJ  We know Spring best, because we built it  Almost all core Spring developers work for Interface21 • Rod Johnson, Juergen Hoeller, Adrian Colyer, Colin Sampaleanu, Rob Harrop, Keith Donald, Alef Arendsen, Steven Devijver Copyright 2004-2005, Interface21 Ltd. - Copying, publishing, or distributing without expressed written permission is prohibited.
  • 72. www.springframework.org Questions? Colin Sampaleanu Director, Interface21 North America www.interface21.com