SlideShare a Scribd company logo
The Spring Framework
       Paul Bakker
Goals

  An introduction


Not pointing a winner
Outline
• History and overview
• Dependency Injection
• AOP
• Module deep dive
• Testing
History

Founded by Rod Johnson

First introduced in his book
“J2EE Design &
Development”
Modules
Why Dependency Injection?




   public
double
calculateTotalPrice()
{
   



ProductService
productService
=
new
ProductService();
   



List
products
=
productService.getProducts();

       //iterate
products
and
sum
prices

       return
total;
   }




How would you test this method?
productService.getProducts()




          Database
Throws
public
void
testCalculateTotalPrice()
{
     Calculator
calc
=
new
Calculator();
                                                      Exception...
     assertEquals(150,
calc.calculateTotalPrice());
}




public
double
calculateTotalPrice()
{




ProductService
productService
=
new
ProductService();




List
products
=
productService.getProducts();

    //iterate
products
and
sum
prices

    return
total;
}
public
Calculator(ProductService
productService)
{
     this.productService
=
productService;
}

public
double
calculateTotalPrice()
{




List
products
=
productService.getProducts();

    //iterate
products
and
sum
prices

    return
total;
}
public
void
testCalculateTotalPrice()
{
  Calculator
calc
=

  

new
Calculator(new
ProductServiceMock());

    assertEquals(150,
calc.calculateTotalPrice());
}
Program to interfaces

       not to
  implementations
Inversion of Control
  A container manages dependencies

             IoC Container


   ProductService       Calculator
Configuring a container

  ProductService
pService
=
new
ProductServiceImpl();
  Calculater
calc
=
new
Calculator(pService);

  //init
other
instances




 This will be a lot of work however...
Configuration using
      XML
<bean
id=quot;productServicequot;






class=quot;services.ProductServiceImplquot;/>

<bean
id=quot;calculatorquot;
class=quot;calc.Calculatorquot;>



<constructor‐arg
index=quot;0quot;
ref=quot;productServicequot;/>







                                                          

</bean>




  Spring version 1 way
Configuration using
   annotations
@Stateless(name
=
quot;ProductEJBquot;)
public
class
ProductBean
{




public
ProductBean()
{




}
}




@EJB
ShoppingBasketBean
shoppingBasket;





 JEE 5 way
Spring annotations

• Spring can now be configured using
  annotations
• Use annotations for component
  declarations
• Use XML for container wide configuration
Annotation example

@Service
public
class
SimpleMovieLister
{



private
MovieFinder
movieFinder;







@Autowired



public
SimpleMovieLister(MovieFinder
movieFinder)
{






this.movieFinder
=
movieFinder;



}
}
AutoWiring


• Don’t explicitly wire dependencies
• Just declare beans
Autowiring qualifiers
<bean
class=quot;example.SimpleMovieCatalogquot;>



<qualifier
value=quot;mainquot;/>
</bean>

<bean
class=quot;example.SimpleMovieCatalogquot;>



<qualifier
value=quot;actionquot;/>
</bean>




@Autowired
@Qualifier(quot;mainquot;)
private
MovieCatalog
movieCatalog;
Aspect Oriented
      Programming

• Used internally by Spring;
 • e.g. Transaction Management
• AspectJ integration for easy AOP on your
  Spring beans
2 minute AOP intro
  Class A

                    public void trace(..) {
                      //log something
       Before       }



public void myMethod(..) {
  //do something
}
Module deep dive
JdbcTemplate


int
countOfActorsNamedJoe
=
this.jdbcTemplate.queryForInt(
   quot;select
count(0)
from
t_actors
where
first_name
=
?quot;,

   
new
Object[]{quot;Joequot;});
JdbcTemplate


this.jdbcTemplate.update(

quot;delete
from
actor
where
id
=
?quot;,


new
Object[]
{new
Long.valueOf(actorId)});
SimpleJdbcTemplate

String
sql
=
quot;select
id,
first_name,
last_name
from
T_ACTOR
where
id
=
?quot;;

ParameterizedRowMapper<Actor>
mapper
=
new
ParameterizedRowMapper<Actor>()

{


public
Actor
mapRow(ResultSet
rs,
int
rowNum)
throws
SQLException
{





Actor
actor
=
new
Actor();





actor.setId(rs.getLong(quot;idquot;));





actor.setFirstName(rs.getString(quot;first_namequot;));





actor.setLastName(rs.getString(quot;last_namequot;));





return
actor;


}
};

return
this.simpleJdbcTemplate.queryForObject(sql,
mapper,
id);
Exceptions
• Spring wraps every jdbc exception
• Same structure for ORM exceptions
• Handle specific database exceptions in a
  uniform way
• Translate checked exception to unchecked
  exceptions
Module deep dive
ORM Integration

• Hibernate
• iBATIS
• JDO
• TopLink
• JPA
Session Factory
              Configuration
<bean
id=quot;mySessionFactoryquot;




class=quot;org.springframework.orm.hibernate3.LocalSessionFactoryBeanquot;>



<property
name=quot;dataSourcequot;
ref=quot;myDataSourcequot;/>



<property
name=quot;mappingResourcesquot;>






<list>









<value>product.hbm.xml</value>






</list>



</property>



<property
name=quot;hibernatePropertiesquot;>






<value>









hibernate.dialect=org.hibernate.dialect.HSQLDialect






</value>



</property>
</bean>
Hibernate Template
           Configuration

<bean
id=quot;myProductDaoquot;
class=quot;product.ProductDaoImplquot;>
   <property
name=quot;sessionFactoryquot;
ref=quot;mySessionFactoryquot;/>
</bean>
Hibernate Template
public
class
HibernateProductDao
extends
HibernateDaoSupport
{




public
Collection
loadProductsByCategory(String
category)
throws















DataAccessException,
MyException
{







return
this.hibernateTemplate.find(
   




quot;from
test.Product
product
where
product.category=?quot;,
category);
   }
}
Transactions


It’s just more configuration
<bean
id=quot;myTxManagerquot;








class=quot;org.springframework.orm.hibernate3.HibernateTransactionManagerquot;>



<property
name=quot;sessionFactoryquot;
ref=quot;mySessionFactoryquot;/>
</bean>

<aop:config>



<aop:pointcut
id=quot;productServiceMethodsquot;
expression=quot;execution(*









product.ProductService.*(..))quot;/>



<aop:advisor
advice‐ref=quot;txAdvicequot;
pointcut‐







ref=quot;productServiceMethodsquot;/>
</aop:config>

 <tx:advice
id=quot;txAdvicequot;
transaction‐manager=quot;myTxManagerquot;>
 


<tx:attributes>
 





<tx:method
name=quot;increasePrice*quot;
propagation=quot;REQUIREDquot;/>
 





<tx:method
name=quot;someOtherBusinessMethodquot;

 







propagation=quot;REQUIRES_NEWquot;/>
 





<tx:method
name=quot;*quot;
propagation=quot;SUPPORTSquot;
read‐only=quot;truequot;/>
 


</tx:attributes>
</tx:advice>
<bean
id=quot;myTxManagerquot;








class=quot;org.springframework.orm.hibernate3.HibernateTransactionManagerquot;>



<property
name=quot;sessionFactoryquot;
ref=quot;mySessionFactoryquot;/>
</bean>

<aop:config>



<aop:pointcut
id=quot;productServiceMethodsquot;
expression=quot;execution(*









product.ProductService.*(..))quot;/>



<aop:advisor
advice‐ref=quot;txAdvicequot;
pointcut‐







ref=quot;productServiceMethodsquot;/>
</aop:config>

 <tx:advice
id=quot;txAdvicequot;
transaction‐manager=quot;myTxManagerquot;>
 


<tx:attributes>
 





<tx:method
name=quot;increasePrice*quot;
propagation=quot;REQUIREDquot;/>
 





<tx:method
name=quot;someOtherBusinessMethodquot;

 







propagation=quot;REQUIRES_NEWquot;/>
 





<tx:method
name=quot;*quot;
propagation=quot;SUPPORTSquot;
read‐only=quot;truequot;/>
 


</tx:attributes>
</tx:advice>




      Transaction manager
<bean
id=quot;myTxManagerquot;








class=quot;org.springframework.orm.hibernate3.HibernateTransactionManagerquot;>



<property
name=quot;sessionFactoryquot;
ref=quot;mySessionFactoryquot;/>
</bean>

<aop:config>



<aop:pointcut
id=quot;productServiceMethodsquot;
expression=quot;execution(*









product.ProductService.*(..))quot;/>



<aop:advisor
advice‐ref=quot;txAdvicequot;
pointcut‐







ref=quot;productServiceMethodsquot;/>
</aop:config>

 <tx:advice
id=quot;txAdvicequot;
transaction‐manager=quot;myTxManagerquot;>
 


<tx:attributes>
 





<tx:method
name=quot;increasePrice*quot;
propagation=quot;REQUIREDquot;/>
 





<tx:method
name=quot;someOtherBusinessMethodquot;

 







propagation=quot;REQUIRES_NEWquot;/>
 





<tx:method
name=quot;*quot;
propagation=quot;SUPPORTSquot;
read‐only=quot;truequot;/>
 


</tx:attributes>
</tx:advice>




      Pointcut and Advisor
<bean
id=quot;myTxManagerquot;








class=quot;org.springframework.orm.hibernate3.HibernateTransactionManagerquot;>



<property
name=quot;sessionFactoryquot;
ref=quot;mySessionFactoryquot;/>
</bean>

<aop:config>



<aop:pointcut
id=quot;productServiceMethodsquot;
expression=quot;execution(*









product.ProductService.*(..))quot;/>



<aop:advisor
advice‐ref=quot;txAdvicequot;
pointcut‐







ref=quot;productServiceMethodsquot;/>
</aop:config>

 <tx:advice
id=quot;txAdvicequot;
transaction‐manager=quot;myTxManagerquot;>
 


<tx:attributes>
 





<tx:method
name=quot;increasePrice*quot;
propagation=quot;REQUIREDquot;/>
 





<tx:method
name=quot;someOtherBusinessMethodquot;

 







propagation=quot;REQUIRES_NEWquot;/>
 





<tx:method
name=quot;*quot;
propagation=quot;SUPPORTSquot;
read‐only=quot;truequot;/>
 


</tx:attributes>
</tx:advice>




 Advice - Propagation properties
Module deep dive
Web MVC
        Components

• Controllers
• View Handlers
• Validation
Controller Hierarchy
AbstractController                   MultiactionController


             CommandController


                           FormController


                                      WizzardController
Compared to other
   web frameworks
• Web MVC is very simple
• It’s ‘action’ based
 • Close to the request/response model
• It doesn’t have conversational state
Spring Portlets

• Web MVC for JSR-168
• Exactly the same programming model for
  Portlets and Servlets
• Doesn’t hide the Portlet specific flow
Testing
• Spring Mock
• Integration Testing
Spring Mocks


• Mock often used objects
 • Request, Response, Session, JNDI etc.
Spring integration
         testing

• Test Wiring
• Test DAOs
Test DAOs

• Wire beans
• Manage transactions
• Rollback transaction after each test
• Mix Hibernate and plain JDBC in one
  transaction
DAO test example

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={quot;daos.xmlquot;})
public
final
class
HibernateTitleDaoTests
{



@Autowired



private
HibernateTitleDao
titleDao;







public
void
testLoadTitle()
throws
Exception
{






Title
title
=
this.titleDao.loadTitle(new
Long(10));






assertNotNull(title);



}
}
Closed source Spring?
The verdict

• Spring is very complete
• It’s “environment friendly”
• It helps loose coupling
• It’s much better than J2EE
Do we still need it?


• JEE 5 has a similar programming model
• Seam is a much better web framework
Where to start

• http://springframework.org
• Reference documentation
• Spring Pet store
Spring related

• Spring Webflow
• Spring security (acegi)
• Spring webservices
• Spring integration
Enjoy your evening

More Related Content

What's hot

How Reactive do we need to be
How Reactive do we need to beHow Reactive do we need to be
How Reactive do we need to be
Jana Karceska
 
Hidden rocks in Oracle ADF
Hidden rocks in Oracle ADFHidden rocks in Oracle ADF
Hidden rocks in Oracle ADF
Euegene Fedorenko
 
Apex 5 plugins for everyone version 2018
Apex 5 plugins for everyone   version 2018Apex 5 plugins for everyone   version 2018
Apex 5 plugins for everyone version 2018
Alan Arentsen
 
Vue fundamentasl with Testing and Vuex
Vue fundamentasl with Testing and VuexVue fundamentasl with Testing and Vuex
Vue fundamentasl with Testing and Vuex
Christoffer Noring
 
14922 java script built (1)
14922 java script built (1)14922 java script built (1)
14922 java script built (1)
dineshrana201992
 
React lecture
React lectureReact lecture
React lecture
Christoffer Noring
 
Android TDD
Android TDDAndroid TDD
Android TDD
Godfrey Nolan
 
An intro to cqrs
An intro to cqrsAn intro to cqrs
An intro to cqrs
Neil Robbins
 
Deep dive into Oracle ADF
Deep dive into Oracle ADFDeep dive into Oracle ADF
Deep dive into Oracle ADF
Euegene Fedorenko
 
Marcus Portfolio
Marcus  PortfolioMarcus  Portfolio
Marcus Portfolio
marobertson22
 
Kotlin : Advanced Tricks - Ubiratan Soares
Kotlin : Advanced Tricks - Ubiratan SoaresKotlin : Advanced Tricks - Ubiratan Soares
Kotlin : Advanced Tricks - Ubiratan Soares
iMasters
 
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Ontico
 
My java file
My java fileMy java file
My java file
Anamika Chauhan
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in react
BOSC Tech Labs
 
ZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in ScalaZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in Scala
Wiem Zine Elabidine
 
Integrating React.js with PHP projects
Integrating React.js with PHP projectsIntegrating React.js with PHP projects
Integrating React.js with PHP projects
Ignacio Martín
 
Using of TDD practices for Magento
Using of TDD practices for MagentoUsing of TDD practices for Magento
Using of TDD practices for Magento
Ivan Chepurnyi
 
Higher-Order Components — Ilya Gelman
Higher-Order Components — Ilya GelmanHigher-Order Components — Ilya Gelman
Higher-Order Components — Ilya Gelman
500Tech
 
Mpg Dec07 Gian Lorenzetto
Mpg Dec07 Gian Lorenzetto Mpg Dec07 Gian Lorenzetto
Mpg Dec07 Gian Lorenzetto
melbournepatterns
 
Redux vs Alt
Redux vs AltRedux vs Alt
Redux vs Alt
Uldis Sturms
 

What's hot (20)

How Reactive do we need to be
How Reactive do we need to beHow Reactive do we need to be
How Reactive do we need to be
 
Hidden rocks in Oracle ADF
Hidden rocks in Oracle ADFHidden rocks in Oracle ADF
Hidden rocks in Oracle ADF
 
Apex 5 plugins for everyone version 2018
Apex 5 plugins for everyone   version 2018Apex 5 plugins for everyone   version 2018
Apex 5 plugins for everyone version 2018
 
Vue fundamentasl with Testing and Vuex
Vue fundamentasl with Testing and VuexVue fundamentasl with Testing and Vuex
Vue fundamentasl with Testing and Vuex
 
14922 java script built (1)
14922 java script built (1)14922 java script built (1)
14922 java script built (1)
 
React lecture
React lectureReact lecture
React lecture
 
Android TDD
Android TDDAndroid TDD
Android TDD
 
An intro to cqrs
An intro to cqrsAn intro to cqrs
An intro to cqrs
 
Deep dive into Oracle ADF
Deep dive into Oracle ADFDeep dive into Oracle ADF
Deep dive into Oracle ADF
 
Marcus Portfolio
Marcus  PortfolioMarcus  Portfolio
Marcus Portfolio
 
Kotlin : Advanced Tricks - Ubiratan Soares
Kotlin : Advanced Tricks - Ubiratan SoaresKotlin : Advanced Tricks - Ubiratan Soares
Kotlin : Advanced Tricks - Ubiratan Soares
 
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
Паразитируем на React-экосистеме (Angular 4+) / Алексей Охрименко (IPONWEB)
 
My java file
My java fileMy java file
My java file
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in react
 
ZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in ScalaZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in Scala
 
Integrating React.js with PHP projects
Integrating React.js with PHP projectsIntegrating React.js with PHP projects
Integrating React.js with PHP projects
 
Using of TDD practices for Magento
Using of TDD practices for MagentoUsing of TDD practices for Magento
Using of TDD practices for Magento
 
Higher-Order Components — Ilya Gelman
Higher-Order Components — Ilya GelmanHigher-Order Components — Ilya Gelman
Higher-Order Components — Ilya Gelman
 
Mpg Dec07 Gian Lorenzetto
Mpg Dec07 Gian Lorenzetto Mpg Dec07 Gian Lorenzetto
Mpg Dec07 Gian Lorenzetto
 
Redux vs Alt
Redux vs AltRedux vs Alt
Redux vs Alt
 

Viewers also liked

Appengine Nljug
Appengine NljugAppengine Nljug
Appengine Nljug
Paul Bakker
 
Els DéUs óLíMpics En L’Art.
Els DéUs óLíMpics En L’Art.Els DéUs óLíMpics En L’Art.
Els DéUs óLíMpics En L’Art.Reixel
 
Web Applications of the future: Combining JEE6 & JavaFX
Web Applications of the future: Combining JEE6 & JavaFXWeb Applications of the future: Combining JEE6 & JavaFX
Web Applications of the future: Combining JEE6 & JavaFX
Paul Bakker
 
Rich Enterprise Applications with JavaFX
Rich Enterprise Applications with JavaFXRich Enterprise Applications with JavaFX
Rich Enterprise Applications with JavaFX
Max Katz
 
JavaFX - Sketch Board to Production
JavaFX - Sketch Board to ProductionJavaFX - Sketch Board to Production
JavaFX - Sketch Board to Production
Yoav Aharoni
 
JavaFX 2 Rich Desktop Platform
JavaFX 2 Rich Desktop PlatformJavaFX 2 Rich Desktop Platform
JavaFX 2 Rich Desktop Platform
Rajmahendra Hegde
 
Building RIA Applications with JavaFX
Building RIA Applications with JavaFXBuilding RIA Applications with JavaFX
Building RIA Applications with JavaFX
Max Katz
 

Viewers also liked (7)

Appengine Nljug
Appengine NljugAppengine Nljug
Appengine Nljug
 
Els DéUs óLíMpics En L’Art.
Els DéUs óLíMpics En L’Art.Els DéUs óLíMpics En L’Art.
Els DéUs óLíMpics En L’Art.
 
Web Applications of the future: Combining JEE6 & JavaFX
Web Applications of the future: Combining JEE6 & JavaFXWeb Applications of the future: Combining JEE6 & JavaFX
Web Applications of the future: Combining JEE6 & JavaFX
 
Rich Enterprise Applications with JavaFX
Rich Enterprise Applications with JavaFXRich Enterprise Applications with JavaFX
Rich Enterprise Applications with JavaFX
 
JavaFX - Sketch Board to Production
JavaFX - Sketch Board to ProductionJavaFX - Sketch Board to Production
JavaFX - Sketch Board to Production
 
JavaFX 2 Rich Desktop Platform
JavaFX 2 Rich Desktop PlatformJavaFX 2 Rich Desktop Platform
JavaFX 2 Rich Desktop Platform
 
Building RIA Applications with JavaFX
Building RIA Applications with JavaFXBuilding RIA Applications with JavaFX
Building RIA Applications with JavaFX
 

Similar to Spring 2.5

Curso Symfony - Clase 2
Curso Symfony - Clase 2Curso Symfony - Clase 2
Curso Symfony - Clase 2
Javier Eguiluz
 
Keep your Wicket application in production
Keep your Wicket application in productionKeep your Wicket application in production
Keep your Wicket application in production
Martijn Dashorst
 
Ngrx meta reducers
Ngrx meta reducersNgrx meta reducers
Ngrx meta reducers
Eliran Eliassy
 
Testing AngularJS
Testing AngularJSTesting AngularJS
Testing AngularJS
Jacopo Nardiello
 
How to write clean tests
How to write clean testsHow to write clean tests
How to write clean tests
Danylenko Max
 
jQuery Internals + Cool Stuff
jQuery Internals + Cool StuffjQuery Internals + Cool Stuff
jQuery Internals + Cool Stuff
jeresig
 
Introduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnitIntroduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnit
Michelangelo van Dam
 
What's Coming in Spring 3.0
What's Coming in Spring 3.0What's Coming in Spring 3.0
What's Coming in Spring 3.0
Matt Raible
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydney
julien.ponge
 
The secret unit testing tools no one ever told you about
The secret unit testing tools no one ever told you aboutThe secret unit testing tools no one ever told you about
The secret unit testing tools no one ever told you about
Dror Helper
 
guice-servlet
guice-servletguice-servlet
guice-servlet
Masaaki Yonebayashi
 
Mgd08 lab01
Mgd08 lab01Mgd08 lab01
Mgd08 lab01
Hock Leng PUAH
 
Wicket Live on Stage
Wicket Live on StageWicket Live on Stage
Wicket Live on Stage
Martijn Dashorst
 
PHPUnit testing to Zend_Test
PHPUnit testing to Zend_TestPHPUnit testing to Zend_Test
PHPUnit testing to Zend_Test
Michelangelo van Dam
 
Functional Javascript
Functional JavascriptFunctional Javascript
Functional Javascript
guest4d57e6
 
Navigating the xDD Alphabet Soup
Navigating the xDD Alphabet SoupNavigating the xDD Alphabet Soup
Navigating the xDD Alphabet Soup
Dror Helper
 
Developing ASP.NET Applications Using the Model View Controller Pattern
Developing ASP.NET Applications Using the Model View Controller PatternDeveloping ASP.NET Applications Using the Model View Controller Pattern
Developing ASP.NET Applications Using the Model View Controller Pattern
goodfriday
 
Yakov Fain - Design Patterns a Deep Dive
Yakov Fain - Design Patterns a Deep DiveYakov Fain - Design Patterns a Deep Dive
Yakov Fain - Design Patterns a Deep Dive
360|Conferences
 
Testing with VS2010 - A Bugs Life
Testing with VS2010 - A Bugs LifeTesting with VS2010 - A Bugs Life
Testing with VS2010 - A Bugs Life
Peter Gfader
 
2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests
Tomek Kaczanowski
 

Similar to Spring 2.5 (20)

Curso Symfony - Clase 2
Curso Symfony - Clase 2Curso Symfony - Clase 2
Curso Symfony - Clase 2
 
Keep your Wicket application in production
Keep your Wicket application in productionKeep your Wicket application in production
Keep your Wicket application in production
 
Ngrx meta reducers
Ngrx meta reducersNgrx meta reducers
Ngrx meta reducers
 
Testing AngularJS
Testing AngularJSTesting AngularJS
Testing AngularJS
 
How to write clean tests
How to write clean testsHow to write clean tests
How to write clean tests
 
jQuery Internals + Cool Stuff
jQuery Internals + Cool StuffjQuery Internals + Cool Stuff
jQuery Internals + Cool Stuff
 
Introduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnitIntroduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnit
 
What's Coming in Spring 3.0
What's Coming in Spring 3.0What's Coming in Spring 3.0
What's Coming in Spring 3.0
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydney
 
The secret unit testing tools no one ever told you about
The secret unit testing tools no one ever told you aboutThe secret unit testing tools no one ever told you about
The secret unit testing tools no one ever told you about
 
guice-servlet
guice-servletguice-servlet
guice-servlet
 
Mgd08 lab01
Mgd08 lab01Mgd08 lab01
Mgd08 lab01
 
Wicket Live on Stage
Wicket Live on StageWicket Live on Stage
Wicket Live on Stage
 
PHPUnit testing to Zend_Test
PHPUnit testing to Zend_TestPHPUnit testing to Zend_Test
PHPUnit testing to Zend_Test
 
Functional Javascript
Functional JavascriptFunctional Javascript
Functional Javascript
 
Navigating the xDD Alphabet Soup
Navigating the xDD Alphabet SoupNavigating the xDD Alphabet Soup
Navigating the xDD Alphabet Soup
 
Developing ASP.NET Applications Using the Model View Controller Pattern
Developing ASP.NET Applications Using the Model View Controller PatternDeveloping ASP.NET Applications Using the Model View Controller Pattern
Developing ASP.NET Applications Using the Model View Controller Pattern
 
Yakov Fain - Design Patterns a Deep Dive
Yakov Fain - Design Patterns a Deep DiveYakov Fain - Design Patterns a Deep Dive
Yakov Fain - Design Patterns a Deep Dive
 
Testing with VS2010 - A Bugs Life
Testing with VS2010 - A Bugs LifeTesting with VS2010 - A Bugs Life
Testing with VS2010 - A Bugs Life
 
2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests
 

Recently uploaded

GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 

Recently uploaded (20)

GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 

Spring 2.5