SlideShare a Scribd company logo
A brief overview of java frameworks
   Object Oriented Development Principles and their uses
   Standard(?) Design Patterns and their roles
   Patterns in Java and their uses
   Overview of Spring Framework
   Evolution of Java EE 6 – All the goodies are now in
    official package
   A brief introduction to JUnit – Test Driven Development in
    Java
   The special three –

    • Encapsulation – hiding the concrete implementations
    • Polymorphism – objects has more than one form
    • Inheritance – reusing functionalities


   And some of their derived form/application –

    • Program to an interface, not to an implementation
    • Favor object composition over inheritance


and much more, most notably, Design Patterns……………
   Single Responsibility Principle

   Open-Close Principle

   Liskov Substitution Principle

   Interface Segregation Principle

   Dependency Inversion Principle
   A defining characteristics of a framework

   It’s all about moving away the flow of controls to the
    frameworks.
   Let us consider a program that perform some simple
    command line query –


        puts 'What is your name?'
        name = gets
        process_name(name)
        puts 'What is your quest?'
        quest = gets
        process_quest(quest)
   However, in a window system, I would write something
    like this –


        require 'tk'
        root = TkRoot.new()
        name_label = TkLabel.new() {text "What is Your Name?"}
        name_label.pack
        name = TkEntry.new(root).pack
        name.bind("FocusOut") {process_name(name)}
        quest_label = TkLabel.new() {text "What is Your Quest?"}
        quest_label.pack
        quest = TkEntry.new(root).pack
        quest.bind("FocusOut") {process_quest(quest)}
        Tk.mainloop()
   The control of execution has been handed over to the
    windowing system.

   The control is Inverted, the framework calls the code
    rather than rather than the code calling the framework.

   This principle is also known as Hollywood Principle.
   Let us write a software component that provides a list of
    movies directed by a particular director –
    class MovieLister...
       public Movie[] moviesDirectedBy(String arg) {
         List allMovies = finder.findAll();
         for (Iterator it = allMovies.iterator(); it.hasNext();) {
         Movie movie = (Movie) it.next();
                    if (!movie.getDirector().equals(arg))
                               it.remove();
         }

          return (Movie[]) allMovies.toArray(new
                   Movie[allMovies.size()]);
      }
   moviesDirectedBy is dependent on the implementation of
    the finder object.

   Let’s make this method completely independent of how
    all the movies are being stored. So all the method does
    is refer to a finder, and all that finder does is know how to
    respond to the findAll method.
   It can be done easily by defining an interface –


        public interface MovieFinder {
                 List findAll();
        }
   Let’s provide a concrete implementation of MovieFinder -

    class MovieLister...
          private MovieFinder finder;
          public MovieLister() {
                  finder = new
                           ColonDelimitedMovieFinder("movies1.txt");
          }
   Now we have a new problem – how to get an instance of
    the right finder implementation into place
   The implementation class for the finder isn't linked into
    the program at compile time. Instead we want this lister
    to work with any implementation, and for that
    implementation to be plugged in at some later point.

   The problem is how that link could be made so that lister
    class is ignorant of the implementation class, but can still
    talk to an instance to do its work.
   The basic idea of the Dependency Injection is to have a
    separate object, an assembler, that populates a field in
    the lister class with an appropriate implementation for the
    finder interface.
   Type 1 IoC - Interface Injection

   Type 2 IoC - Setter Injection

   Type 3 IoC - Constructor Injection
   Define a setter method for populating finder –

         class MovieLister...
                 private MovieFinder finder;
        public void setFinder(MovieFinder finder) {
                 this.finder = finder;
                 }
   Similarly let us define a setter for the filename -

        class ColonMovieFinder...
                public void setFilename(String filename) {
                                 this.filename = filename;
                }
   The third step is to set up the configuration for the files.
    Spring supports configuration through XML files and
    also through code, but XML is the expected way to do
    it –
    <beans>
         <bean id="MovieLister" class="spring.MovieLister">
                 <property name="finder">
                         <ref local="MovieFinder"/>
                 </property>
         </bean>
         <bean id="MovieFinder" class="spring.ColonMovieFinder">
                 <property name="filename">
                         <value>movies1.txt</value>
                 </property>
         </bean>
    </beans>
   And then the test –

    public void testWithSpring() throws Exception{
          ApplicationContext ctx = new
                  FileSystemXmlApplicationContext("spring.xml");
          MovieLister lister = (MovieLister)ctx.getBean("MovieLister");
          Movie[] movies = lister.moviesDirectedBy("Sergio Leone");
          assertEquals("Once Upon a Time in the West",
                                   movies[0].getTitle());

    }
          WHERE DID THE new GO ?!
A brief overview of java frameworks
   Spring

   Google Guice – created by Google

   Pico Container

   Avalon

   Context and Dependency Injection – official Sun Java DI
    Container

   Seasar
   Assume you have a graphical class with many set...()
    methods. After each set method, the data of the graphics
    changed, thus the graphics changed and thus the
    graphics need to be updated on screen.


   Assume to repaint the graphics you must call
    Display.update().
   The classical approach is to solve this by adding more
    code. At the end of each set method you write –


        void set...(...) {
                 :
                 :
                 Display.update();
        }
   What will happen if there are 20-30 of these set methods
    ?


   Also whenever a new set-method is added, developers
    must be sure to not forget adding this to the end,
    otherwise they just created a bug.
   AOP solves this without adding tons of code, instead you
    add an aspect -

        after() : set() {
                  Display.update();
        }

         after running any method that is a set   pointcut,
    run the following code.
   And you define a point cut –


        pointcut set() : execution(* set*(*) ) &&
                                  this(MyGraphicsClass) &&
                                  within(com.company.*);

   If a method is named set* (* means any name might
follow after set), regardless of what the method returns
(first asterisk) or what parameters it takes (third asterisk)
and it is a method of MyGraphicsClass and this class is
part of the package com.company.*, then this is a set()
pointcut.
   This example also shows one of the big downsides of
    AOP. It is actually doing something that many
    programmers consider an Anti-Pattern. The exact pattern
    is called Action at a distance.


   Action at a distance is an anti-pattern (a recognized
    common error) in which behavior in one part of a
    program varies wildly based on difficult or impossible to
    identify operations in another part of the program.
   AspectJ

   Spring

   Seasar
   Object-relational mapping is a programming technique
    for converting data between incompatible type systems in
    relational databases and object-oriented programming
    languages.

   This creates, in effect, a virtual object database that can
    be used from within the programming language.

   It's good for abstracting the datastore out in order to
    provide an interface that can be used in your code.
   Without ORM, we write code like this –

           String sql = "SELECT ... FROM persons WHERE id = 10";
           DbCommand cmd = new DbCommand(connection, sql);
           Result res = cmd.Execute();
           String name = res[0]["FIRST_NAME"];

   With the help of ORM tools, we can do –

           Person p = repository.GetPerson(10);
           String name = p.FirstName;
    Or -
           Person p = Person.Get(Person.Properties.Id == 10);
   The SQL is hidden away from logic code. This has the
    benefit of allowing developers to more easily support
    more database engines.


   Developers can focus on writing the logic, instead of
    getting all the SQL right. The code will typically be more
    readable as well.
   Object-relational mapping is the Vietnam of our industry
    – Ted Neward.


   Developers are struggling for years with the huge
    mismatch between relational database models and
    traditional object models.
   Granularity – more classes than the number of
    corresponding tables.

   Subtyping

   Identity – primary key vs. object identity and object
    equality

   Associations – unidirectional in OOP vs. foreign keys.

   Data Navigation – walking the object graph vs. SQL joins
   Hibernate – the highly popular ORM tool for Java, has a
    corresponding .NET version too (NHibernate). Uses
    HQL.


   Java Persistence API – official sun java specification for
    managing persistence.
A brief overview of java frameworks
A brief overview of java frameworks
A brief overview of java frameworks
A brief overview of java frameworks
   Seam Framework – AJAX + JSF + JPA + EJB 3.0 + BPM

   Log4J – logging framework for Java

   JUnit – Test Driven Development in Java

   Maven – actually not a framework, more of a build
    system, but still………
   Wikipedia

   Personal Website of Martin Fowler

   Stackoverflow

   Official Spring Documentation

   Coding Horror

   Official Java EE 6 Tutorial
Questions?

More Related Content

What's hot (19)

PPTX
Asp.net MVC training session
Hrichi Mohamed
 
PPTX
Jsf presentation
Ashish Gupta
 
PDF
Impactos no Design utilizando programação funcional Light Talk
Luiz Costa
 
PDF
Spring framework 3.2 > 4.0 — themes and trends
Arawn Park
 
PDF
Java server faces
Fábio Santos
 
PDF
JavaEE6 my way
Nicola Pedot
 
PPTX
MVC for Desktop Application - Part 3
晟 沈
 
PPT
Jsf 2.0 Overview
hereisbharat
 
PPT
ASP .net MVC
Divya Sharma
 
PDF
Grails 2.0 vs asp.net mvc 4
Umar Ali
 
PPTX
MVC for Desktop Application - Part 1
晟 沈
 
PDF
بررسی چارچوب جنگو
railsbootcamp
 
PDF
ASP.NET MVC 3
Buu Nguyen
 
PPTX
Asp.Net MVC3 - Basics
Saravanan Subburayal
 
PDF
MV(C, mvvm) in iOS and ReactiveCocoa
Yi-Shou Chen
 
PDF
Building Large Scale Javascript Application
Anis Ahmad
 
PPT
A Taste of Java ME
wiradikusuma
 
PPTX
MVVM Lights
Denis Voituron
 
PPT
Spring and DWR
wiradikusuma
 
Asp.net MVC training session
Hrichi Mohamed
 
Jsf presentation
Ashish Gupta
 
Impactos no Design utilizando programação funcional Light Talk
Luiz Costa
 
Spring framework 3.2 > 4.0 — themes and trends
Arawn Park
 
Java server faces
Fábio Santos
 
JavaEE6 my way
Nicola Pedot
 
MVC for Desktop Application - Part 3
晟 沈
 
Jsf 2.0 Overview
hereisbharat
 
ASP .net MVC
Divya Sharma
 
Grails 2.0 vs asp.net mvc 4
Umar Ali
 
MVC for Desktop Application - Part 1
晟 沈
 
بررسی چارچوب جنگو
railsbootcamp
 
ASP.NET MVC 3
Buu Nguyen
 
Asp.Net MVC3 - Basics
Saravanan Subburayal
 
MV(C, mvvm) in iOS and ReactiveCocoa
Yi-Shou Chen
 
Building Large Scale Javascript Application
Anis Ahmad
 
A Taste of Java ME
wiradikusuma
 
MVVM Lights
Denis Voituron
 
Spring and DWR
wiradikusuma
 

Similar to A brief overview of java frameworks (20)

PPT
React native
Mohammed El Rafie Tarabay
 
PDF
Design patterns
Anas Alpure
 
PDF
Whoops! Where did my architecture go?
Oliver Gierke
 
PDF
Java EE 6 CDI Integrates with Spring & JSF
Jiayun Zhou
 
PPTX
L09 Frameworks
Ólafur Andri Ragnarsson
 
PDF
JavaScript Miller Columns
Jonathan Fine
 
PDF
Nt1310 Unit 3 Language Analysis
Nicole Gomez
 
PPTX
Design Pattern Mastery - Momentum Dev Con 19 Apr 2018
Steven Smith
 
PPTX
Evolution of Patterns
Chris Eargle
 
PDF
Whoops! where did my architecture go?
Oliver Gierke
 
PPTX
Group111
Shahriar Robbani
 
PPTX
Entity Framework: Nakov @ BFU Hackhaton 2015
Svetlin Nakov
 
PPSX
Oop features java presentationshow
ilias ahmed
 
PDF
Java design patterns
Shawn Brito
 
PPTX
Desing pattern prototype-Factory Method, Prototype and Builder
paramisoft
 
PPTX
Javascript internals
Nir Noy
 
PPTX
Adding a modern twist to legacy web applications
Jeff Durta
 
PDF
Xopus Application Framework
Jady Yang
 
PDF
Fabric - a server management tool from Instagram
Jay Ren
 
PDF
Advanced java jee material by KV Rao sir
AVINASH KUMAR
 
Design patterns
Anas Alpure
 
Whoops! Where did my architecture go?
Oliver Gierke
 
Java EE 6 CDI Integrates with Spring & JSF
Jiayun Zhou
 
L09 Frameworks
Ólafur Andri Ragnarsson
 
JavaScript Miller Columns
Jonathan Fine
 
Nt1310 Unit 3 Language Analysis
Nicole Gomez
 
Design Pattern Mastery - Momentum Dev Con 19 Apr 2018
Steven Smith
 
Evolution of Patterns
Chris Eargle
 
Whoops! where did my architecture go?
Oliver Gierke
 
Entity Framework: Nakov @ BFU Hackhaton 2015
Svetlin Nakov
 
Oop features java presentationshow
ilias ahmed
 
Java design patterns
Shawn Brito
 
Desing pattern prototype-Factory Method, Prototype and Builder
paramisoft
 
Javascript internals
Nir Noy
 
Adding a modern twist to legacy web applications
Jeff Durta
 
Xopus Application Framework
Jady Yang
 
Fabric - a server management tool from Instagram
Jay Ren
 
Advanced java jee material by KV Rao sir
AVINASH KUMAR
 
Ad

More from MD Sayem Ahmed (7)

PPTX
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
ODP
Distributed systems - A Primer
MD Sayem Ahmed
 
ODP
Factory Method Pattern
MD Sayem Ahmed
 
ODP
An Introduction to Maven Part 1
MD Sayem Ahmed
 
PPT
Restful web services
MD Sayem Ahmed
 
PPT
An introduction to javascript
MD Sayem Ahmed
 
PPTX
01. design pattern
MD Sayem Ahmed
 
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
Distributed systems - A Primer
MD Sayem Ahmed
 
Factory Method Pattern
MD Sayem Ahmed
 
An Introduction to Maven Part 1
MD Sayem Ahmed
 
Restful web services
MD Sayem Ahmed
 
An introduction to javascript
MD Sayem Ahmed
 
01. design pattern
MD Sayem Ahmed
 
Ad

Recently uploaded (20)

PDF
ARAL_Orientation_Day-2-Sessions_ARAL-Readung ARAL-Mathematics ARAL-Sciencev2.pdf
JoelVilloso1
 
PPTX
How to Handle Salesperson Commision in Odoo 18 Sales
Celine George
 
PDF
Aprendendo Arquitetura Framework Salesforce - Dia 03
Mauricio Alexandre Silva
 
PPTX
ASRB NET 2023 PREVIOUS YEAR QUESTION PAPER GENETICS AND PLANT BREEDING BY SAT...
Krashi Coaching
 
PPTX
HUMAN RESOURCE MANAGEMENT: RECRUITMENT, SELECTION, PLACEMENT, DEPLOYMENT, TRA...
PRADEEP ABOTHU
 
PPTX
grade 5 lesson matatag ENGLISH 5_Q1_PPT_WEEK4.pptx
SireQuinn
 
PDF
ARAL-Orientation_Morning-Session_Day-11.pdf
JoelVilloso1
 
PDF
Women's Health: Essential Tips for Every Stage.pdf
Iftikhar Ahmed
 
PDF
Generative AI: it's STILL not a robot (CIJ Summer 2025)
Paul Bradshaw
 
PPTX
How to Create Odoo JS Dialog_Popup in Odoo 18
Celine George
 
PDF
The Different Types of Non-Experimental Research
Thelma Villaflores
 
PPTX
PPT-Q1-WK-3-ENGLISH Revised Matatag Grade 3.pptx
reijhongidayawan02
 
PPTX
How to Set Up Tags in Odoo 18 - Odoo Slides
Celine George
 
PPTX
A PPT on Alfred Lord Tennyson's Ulysses.
Beena E S
 
PDF
CONCURSO DE POESIA “POETUFAS – PASSOS SUAVES PELO VERSO.pdf
Colégio Santa Teresinha
 
PDF
The History of Phone Numbers in Stoke Newington by Billy Thomas
History of Stoke Newington
 
PPT
Talk on Critical Theory, Part II, Philosophy of Social Sciences
Soraj Hongladarom
 
PPTX
care of patient with elimination needs.pptx
Rekhanjali Gupta
 
PPTX
GRADE-3-PPT-EVE-2025-ENG-Q1-LESSON-1.pptx
EveOdrapngimapNarido
 
PPTX
Universal immunization Programme (UIP).pptx
Vishal Chanalia
 
ARAL_Orientation_Day-2-Sessions_ARAL-Readung ARAL-Mathematics ARAL-Sciencev2.pdf
JoelVilloso1
 
How to Handle Salesperson Commision in Odoo 18 Sales
Celine George
 
Aprendendo Arquitetura Framework Salesforce - Dia 03
Mauricio Alexandre Silva
 
ASRB NET 2023 PREVIOUS YEAR QUESTION PAPER GENETICS AND PLANT BREEDING BY SAT...
Krashi Coaching
 
HUMAN RESOURCE MANAGEMENT: RECRUITMENT, SELECTION, PLACEMENT, DEPLOYMENT, TRA...
PRADEEP ABOTHU
 
grade 5 lesson matatag ENGLISH 5_Q1_PPT_WEEK4.pptx
SireQuinn
 
ARAL-Orientation_Morning-Session_Day-11.pdf
JoelVilloso1
 
Women's Health: Essential Tips for Every Stage.pdf
Iftikhar Ahmed
 
Generative AI: it's STILL not a robot (CIJ Summer 2025)
Paul Bradshaw
 
How to Create Odoo JS Dialog_Popup in Odoo 18
Celine George
 
The Different Types of Non-Experimental Research
Thelma Villaflores
 
PPT-Q1-WK-3-ENGLISH Revised Matatag Grade 3.pptx
reijhongidayawan02
 
How to Set Up Tags in Odoo 18 - Odoo Slides
Celine George
 
A PPT on Alfred Lord Tennyson's Ulysses.
Beena E S
 
CONCURSO DE POESIA “POETUFAS – PASSOS SUAVES PELO VERSO.pdf
Colégio Santa Teresinha
 
The History of Phone Numbers in Stoke Newington by Billy Thomas
History of Stoke Newington
 
Talk on Critical Theory, Part II, Philosophy of Social Sciences
Soraj Hongladarom
 
care of patient with elimination needs.pptx
Rekhanjali Gupta
 
GRADE-3-PPT-EVE-2025-ENG-Q1-LESSON-1.pptx
EveOdrapngimapNarido
 
Universal immunization Programme (UIP).pptx
Vishal Chanalia
 

A brief overview of java frameworks

  • 2. Object Oriented Development Principles and their uses  Standard(?) Design Patterns and their roles  Patterns in Java and their uses  Overview of Spring Framework  Evolution of Java EE 6 – All the goodies are now in official package  A brief introduction to JUnit – Test Driven Development in Java
  • 3. The special three – • Encapsulation – hiding the concrete implementations • Polymorphism – objects has more than one form • Inheritance – reusing functionalities  And some of their derived form/application – • Program to an interface, not to an implementation • Favor object composition over inheritance and much more, most notably, Design Patterns……………
  • 4. Single Responsibility Principle  Open-Close Principle  Liskov Substitution Principle  Interface Segregation Principle  Dependency Inversion Principle
  • 5. A defining characteristics of a framework  It’s all about moving away the flow of controls to the frameworks.
  • 6. Let us consider a program that perform some simple command line query – puts 'What is your name?' name = gets process_name(name) puts 'What is your quest?' quest = gets process_quest(quest)
  • 7. However, in a window system, I would write something like this – require 'tk' root = TkRoot.new() name_label = TkLabel.new() {text "What is Your Name?"} name_label.pack name = TkEntry.new(root).pack name.bind("FocusOut") {process_name(name)} quest_label = TkLabel.new() {text "What is Your Quest?"} quest_label.pack quest = TkEntry.new(root).pack quest.bind("FocusOut") {process_quest(quest)} Tk.mainloop()
  • 8. The control of execution has been handed over to the windowing system.  The control is Inverted, the framework calls the code rather than rather than the code calling the framework.  This principle is also known as Hollywood Principle.
  • 9. Let us write a software component that provides a list of movies directed by a particular director – class MovieLister... public Movie[] moviesDirectedBy(String arg) { List allMovies = finder.findAll(); for (Iterator it = allMovies.iterator(); it.hasNext();) { Movie movie = (Movie) it.next(); if (!movie.getDirector().equals(arg)) it.remove(); } return (Movie[]) allMovies.toArray(new Movie[allMovies.size()]); }
  • 10. moviesDirectedBy is dependent on the implementation of the finder object.  Let’s make this method completely independent of how all the movies are being stored. So all the method does is refer to a finder, and all that finder does is know how to respond to the findAll method.
  • 11. It can be done easily by defining an interface – public interface MovieFinder { List findAll(); }
  • 12. Let’s provide a concrete implementation of MovieFinder - class MovieLister... private MovieFinder finder; public MovieLister() { finder = new ColonDelimitedMovieFinder("movies1.txt"); }
  • 13. Now we have a new problem – how to get an instance of the right finder implementation into place
  • 14. The implementation class for the finder isn't linked into the program at compile time. Instead we want this lister to work with any implementation, and for that implementation to be plugged in at some later point.  The problem is how that link could be made so that lister class is ignorant of the implementation class, but can still talk to an instance to do its work.
  • 15. The basic idea of the Dependency Injection is to have a separate object, an assembler, that populates a field in the lister class with an appropriate implementation for the finder interface.
  • 16. Type 1 IoC - Interface Injection  Type 2 IoC - Setter Injection  Type 3 IoC - Constructor Injection
  • 17. Define a setter method for populating finder – class MovieLister... private MovieFinder finder; public void setFinder(MovieFinder finder) { this.finder = finder; }
  • 18. Similarly let us define a setter for the filename - class ColonMovieFinder... public void setFilename(String filename) { this.filename = filename; }
  • 19. The third step is to set up the configuration for the files. Spring supports configuration through XML files and also through code, but XML is the expected way to do it – <beans> <bean id="MovieLister" class="spring.MovieLister"> <property name="finder"> <ref local="MovieFinder"/> </property> </bean> <bean id="MovieFinder" class="spring.ColonMovieFinder"> <property name="filename"> <value>movies1.txt</value> </property> </bean> </beans>
  • 20. And then the test – public void testWithSpring() throws Exception{ ApplicationContext ctx = new FileSystemXmlApplicationContext("spring.xml"); MovieLister lister = (MovieLister)ctx.getBean("MovieLister"); Movie[] movies = lister.moviesDirectedBy("Sergio Leone"); assertEquals("Once Upon a Time in the West", movies[0].getTitle()); } WHERE DID THE new GO ?!
  • 22. Spring  Google Guice – created by Google  Pico Container  Avalon  Context and Dependency Injection – official Sun Java DI Container  Seasar
  • 23. Assume you have a graphical class with many set...() methods. After each set method, the data of the graphics changed, thus the graphics changed and thus the graphics need to be updated on screen.  Assume to repaint the graphics you must call Display.update().
  • 24. The classical approach is to solve this by adding more code. At the end of each set method you write – void set...(...) { : : Display.update(); }
  • 25. What will happen if there are 20-30 of these set methods ?  Also whenever a new set-method is added, developers must be sure to not forget adding this to the end, otherwise they just created a bug.
  • 26. AOP solves this without adding tons of code, instead you add an aspect - after() : set() { Display.update(); } after running any method that is a set pointcut, run the following code.
  • 27. And you define a point cut – pointcut set() : execution(* set*(*) ) && this(MyGraphicsClass) && within(com.company.*); If a method is named set* (* means any name might follow after set), regardless of what the method returns (first asterisk) or what parameters it takes (third asterisk) and it is a method of MyGraphicsClass and this class is part of the package com.company.*, then this is a set() pointcut.
  • 28. This example also shows one of the big downsides of AOP. It is actually doing something that many programmers consider an Anti-Pattern. The exact pattern is called Action at a distance.  Action at a distance is an anti-pattern (a recognized common error) in which behavior in one part of a program varies wildly based on difficult or impossible to identify operations in another part of the program.
  • 29. AspectJ  Spring  Seasar
  • 30. Object-relational mapping is a programming technique for converting data between incompatible type systems in relational databases and object-oriented programming languages.  This creates, in effect, a virtual object database that can be used from within the programming language.  It's good for abstracting the datastore out in order to provide an interface that can be used in your code.
  • 31. Without ORM, we write code like this – String sql = "SELECT ... FROM persons WHERE id = 10"; DbCommand cmd = new DbCommand(connection, sql); Result res = cmd.Execute(); String name = res[0]["FIRST_NAME"];  With the help of ORM tools, we can do – Person p = repository.GetPerson(10); String name = p.FirstName; Or - Person p = Person.Get(Person.Properties.Id == 10);
  • 32. The SQL is hidden away from logic code. This has the benefit of allowing developers to more easily support more database engines.  Developers can focus on writing the logic, instead of getting all the SQL right. The code will typically be more readable as well.
  • 33. Object-relational mapping is the Vietnam of our industry – Ted Neward.  Developers are struggling for years with the huge mismatch between relational database models and traditional object models.
  • 34. Granularity – more classes than the number of corresponding tables.  Subtyping  Identity – primary key vs. object identity and object equality  Associations – unidirectional in OOP vs. foreign keys.  Data Navigation – walking the object graph vs. SQL joins
  • 35. Hibernate – the highly popular ORM tool for Java, has a corresponding .NET version too (NHibernate). Uses HQL.  Java Persistence API – official sun java specification for managing persistence.
  • 40. Seam Framework – AJAX + JSF + JPA + EJB 3.0 + BPM  Log4J – logging framework for Java  JUnit – Test Driven Development in Java  Maven – actually not a framework, more of a build system, but still………
  • 41. Wikipedia  Personal Website of Martin Fowler  Stackoverflow  Official Spring Documentation  Coding Horror  Official Java EE 6 Tutorial