Your SlideShare is downloading. ×
0
Enterprise Java Web
 Application Frameworks &
Sample Stack Implementation


       Mert ÇALIŞKAN
         mcaliskan@stm.co...
Who am I?


• The Software Plumber :)
    SCJP certified dude bla bla...
• Open Source Evangelist
  Founder & Author of var...
Agenda

• The aim: Enterprise Java WebApp Framework
• Which stack to choose?
•
• The Stack
• Questions are welcome anytime...
The aim: Enterprise WebApp Framework


• MVC pattern
• Quality & Competency of “The Stack”
• Performance & Scalability
• L...
Which stack to choose?
               UI                              Controller/Dep.Inj.
         JSF        Struts      ...
• It’s nothing new!
      not “yet another java framework”
• It’s a stack demonstration with OSS
• Released on 01.2009
• h...
DOMAIN MODEL




  AddressBook                      Contact
id                             id
                1       0..*...
THE STACK
    VIEW
                       MAVEN
 JSF
                                ECLIPSE
   FACELETS

ORCHESTRA       ...
JSF-1
•   A standard (v1.2_13 and v2.0.1 FCS)

•   A component oriented & event-driven framework




• Binding makes JSF P...
JSF-2

• 3rd Party Ajaxified Frameworks
    PrimeFACES - Crazy Turks
    RichFACES - JBoss
    IceFACES - Sun
    ADFFaces ...
FACELETS

• ViewHandler created for JSF
• mixing JSF + JSP for JSF 1.x
• well balanced HTML : xhtml
• Templating
• Composi...
SPRING-1

• Dependency Injection & IoC
    with XML and annotations


• JEE ( JMS, EJBs, JCA ...)


• AOP
• ORM Integratio...
SPRING-2
                         ORM
 DAO                                                Web
                        Hibe...
SPRING-3

<context:property-placeholder location="classpath:application.properties">
...
<context:component-scan base-pack...
SPRING-4
@Service("addressBookService")
public class AddressBookServiceImpl implements
AddressBookService {
  ...	
	 @Auto...
MyFaces ORCHESTRA


• Conversation Scoped beans &
  Conversation Scoped Persistence Contexts
     LazyInitializationExcept...
JPA-1


• Standard (Java EE 5.0)
  object/relational mapping and persistent management interface


• Support from differen...
JPA-2


@Entity
public class AddressBook extends BaseObject {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)...
JPA-3

Some DAO code:
public AddressBook loadById(Long id) {
	 return entityManager.find(AddressBook.class, id);
}

public...
HIBERNATE-1


• Object / Relational Mapping framework
• No hassle with result set handling object
  conversion and SQL, we...
Hibernate Search

•   Bringing full text search engine to the
    persistence domain model
                        e.g. : ...
H.S. - How To Use
• Configuration
    Transparent with JPA
      (hibernate entity manager)
      (hibernate annotations)
•...
H.S. - Example

@Entity
@Indexed
public class AddressBook extends BaseObject {

    @Field(index=Index.TOKENIZED, store=St...
H.S. - Example

   @SuppressWarnings("unchecked")
public List<AddressBook> findByWord(String searchWord) throws ParseExcep...
HIBERNATE VALIDATOR-1

• Reference implementation for JSR 303:
  Bean Validation
• DRY (Don’t Repeat Yourself)
           ...
HIBERNATE VALIDATOR-2


@Field
@NotEmpty(message="Name should not be empty")
@Length(min=4, max=40)
private String name;
	...
HIBERNATE ENVERS-1


• Versioning for JPA entities
• A part of Hibernate with Hib.3.5
• Simple to implement with annotatio...
HIBERNATE ENVERS-2
                   Entities
R    id=”1”                               id=”4”
e   data=”x”              ...
HIBERNATE ENVERS-3


@Entity
@Indexed
@Audited
public class Contact extends BaseObject {

    @Field
    @Versioned
    pr...
Apache CXF-1

• open-source services framework
• annotation driven
• JAX-WS & JAX-RS compliant
• soap + rest
• xml + json
Apache CXF-2
@Component("addressBookWebService")
@WebService
public class AddressBookWebService {

	   @Autowired
	   priv...
Apache CXF-3

http://localhost:8080/mesir/ws/addressbook/allAddressBookTitles
MAVEN

• Stop “building the build” and focus on
  building the application...!
• A uniform build system...
• Project Objec...
MAVEN - The POM-1

<project ...>	
   <modelVersion>4.0.0</modelVersion>
   <groupId>tr.mc</groupId>
   <artifactId>mesir</...
MAVEN - The POM-2

    <dependencies>
       ...
	    	 <dependency>
	    	 	 <groupId>org.springframework</groupId>
	    ...
MAVEN - The POM-3
	   <repositories>
	   	 <repository>
	   	      <id>mesir-repo</id>
	   	      <url>http://mesir.google...
ECLIPSE-1

• Universal toolset for Development
• Open Source IDE
• Extensible architecture based on plugins
• Specified mos...
ECLIPSE-2



•
Thank you...


    http://www.jroller.com/mert

http://www.twitter.com/mertcaliskan
Upcoming SlideShare
Loading in...5
×

Enterprise Java Web Application Frameworks Sample Stack Implementation

5,001

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,001
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
117
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Transcript of "Enterprise Java Web Application Frameworks Sample Stack Implementation"

    1. 1. Enterprise Java Web Application Frameworks & Sample Stack Implementation Mert ÇALIŞKAN mcaliskan@stm.com.tr STM Inc. 2009
    2. 2. Who am I? • The Software Plumber :) SCJP certified dude bla bla... • Open Source Evangelist Founder & Author of various Open Source Projects • Member of MyFaces Community OpenLogic Expert Community Member
    3. 3. Agenda • The aim: Enterprise Java WebApp Framework • Which stack to choose? • • The Stack • Questions are welcome anytime..!
    4. 4. The aim: Enterprise WebApp Framework • MVC pattern • Quality & Competency of “The Stack” • Performance & Scalability • Learning Curve & Development Speed ! don’t let cutting edge turn into bleeding edge... release early & release often..! • Community Factor & Open Source support (forums- mailing lists & etc.)
    5. 5. Which stack to choose? UI Controller/Dep.Inj. JSF Struts Spring Guice HiveMind Spring MVC WebWork ZK picoContainer XWork Wicket Tapestry GWT Model/Persistence Layer Echo3 Cocoon Hibernate iBatis Integration Toplink KODO Apache CXF Apache Axis2 IDE EclipseLink Eclipse IntelliJ Spring WS IDEA JDeveloper NetBEANS
    6. 6. • It’s nothing new! not “yet another java framework” • It’s a stack demonstration with OSS • Released on 01.2009 • http://code.google.com/p/mesir • 2000+ downloads
    7. 7. DOMAIN MODEL AddressBook Contact id id 1 0..* text name creationDate email contacts phone
    8. 8. THE STACK VIEW MAVEN JSF ECLIPSE FACELETS ORCHESTRA Apache CXF MODEL CONTROLLER JPA HIBERNATE H.SEARCH SPRING H.VALIDATOR with SecuRITY ENVERS
    9. 9. JSF-1 • A standard (v1.2_13 and v2.0.1 FCS) • A component oriented & event-driven framework • Binding makes JSF Powerful Bind a bean’s variable to component <h:inputText value=“#{person.name}” /> Bind a method to the action component <h:commandButton action=“#{personSavePage.savePerson}” /> • Conversion & Validation no hassle with java.util.Date extensible - write your own converter & validator
    10. 10. JSF-2 • 3rd Party Ajaxified Frameworks PrimeFACES - Crazy Turks RichFACES - JBoss IceFACES - Sun ADFFaces - Oracle • IDE Support (Eclipse - NetBeans - JDeveloper) • Everything’s gonna be alright with JSF 2.0 :)
    11. 11. FACELETS • ViewHandler created for JSF • mixing JSF + JSP for JSF 1.x • well balanced HTML : xhtml • Templating • Composite Components
    12. 12. SPRING-1 • Dependency Injection & IoC with XML and annotations • JEE ( JMS, EJBs, JCA ...) • AOP • ORM Integration, DAO Support tx management, entityManager
    13. 13. SPRING-2 ORM DAO Web Hibernate Spring JDBC JPA JEE Spring WEB MVC TopLink Framework Transaction JDO Integration management JMX OJB Struts iBatis JMS Tapestry JCA JSF Remoting JSPs EJB Velocity Email FreeMarker AOP JasperReports Excel Spring Portlet MVC Spring AOP AspectJ Integration
    14. 14. SPRING-3 <context:property-placeholder location="classpath:application.properties"> ... <context:component-scan base-package="tr.mesir" /> ... <tx:annotation-driven /> ... <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy- method="close"> <property name="driverClassName" value="${database.driver}"/> <property name="url" value="${database.uri}"/> <property name="username" value="${database.username}"/> <property name="password" value="${database.password}"/> </bean> ... <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" />
    15. 15. SPRING-4 @Service("addressBookService") public class AddressBookServiceImpl implements AddressBookService { ... @Autowired private AddressBookDAO addressBookDAO; ... } @Repository public class AddressBookDAOImpl implements AddressBookDAO { ... @PersistenceContext protected EntityManager entityManager; ... }
    16. 16. MyFaces ORCHESTRA • Conversation Scoped beans & Conversation Scoped Persistence Contexts LazyInitializationException or NonUniqueObjectException • Heavily built-on Spring Framework
    17. 17. JPA-1 • Standard (Java EE 5.0) object/relational mapping and persistent management interface • Support from different vendors hibernate - toplink - eclipselink - kodo ... • Enhanced Query Langugage (JPQL)
    18. 18. JPA-2 @Entity public class AddressBook extends BaseObject { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToMany(cascade={CascadeType.ALL}) @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) private List<Contact> contacts = new ArrayList<Contact>(); }
    19. 19. JPA-3 Some DAO code: public AddressBook loadById(Long id) { return entityManager.find(AddressBook.class, id); } public void save(AddressBook addressBook) { entityManager.persist(addressBook); } public List<String> findAllTitles() { return entityManager.createQuery("select ab.title from AddressBook ab").getResultList(); }
    20. 20. HIBERNATE-1 • Object / Relational Mapping framework • No hassle with result set handling object conversion and SQL, well almost for SQL :) • Support for any DB with dialects Oracle, MySQL, PostgreSQL, HSQL, DB2, Sybase and many more....
    21. 21. Hibernate Search • Bringing full text search engine to the persistence domain model e.g. : amazon search • Apache Lucene™ under the hood • Lucene Directory File - DB - in mem • JPA Triggered Event System Persist - Update - Delete
    22. 22. H.S. - How To Use • Configuration Transparent with JPA (hibernate entity manager) (hibernate annotations) • Annotation Based @Indexed @Field(store, index) @IndexedEmbedded .....
    23. 23. H.S. - Example @Entity @Indexed public class AddressBook extends BaseObject { @Field(index=Index.TOKENIZED, store=Store.NO) private String title; @OneToMany(cascade={CascadeType.ALL}) @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) @IndexedEmbedded private List<Contact> contacts = new ArrayList<Contact>(); .... }
    24. 24. H.S. - Example @SuppressWarnings("unchecked") public List<AddressBook> findByWord(String searchWord) throws ParseException { // Since contacts list is declared as @IndexedEmbedded inside AddressBook, // we can search through the name or email of a contact also. MultiFieldQueryParser parser = new MultiFieldQueryParser(new String[] { "title", "contacts.name", "contacts.email" }, new StandardAnalyzer()); Query query = parser.parse(searchWord); FullTextQuery ftq = getFullTextEntityManager().createFullTextQuery( query, AddressBook.class); return ftq.getResultList(); }
    25. 25. HIBERNATE VALIDATOR-1 • Reference implementation for JSR 303: Bean Validation • DRY (Don’t Repeat Yourself) express your domain constraints once..! property2DDLSchema • annotation-based @NotNull @NotEmpty @Length(min=, max=) ........ @Email @Pattern @Valid ........ • custom validators
    26. 26. HIBERNATE VALIDATOR-2 @Field @NotEmpty(message="Name should not be empty") @Length(min=4, max=40) private String name; @Field @NotEmpty(message="Email should not be empty") @Email private String email;
    27. 27. HIBERNATE ENVERS-1 • Versioning for JPA entities • A part of Hibernate with Hib.3.5 • Simple to implement with annotations @Audited .... • Querying on Revisions, Entity at Revisions
    28. 28. HIBERNATE ENVERS-2 Entities R id=”1” id=”4” e data=”x” data=”p” v id=”2” id=”3” i data=”a” data=”x” s id=”1” id=”2” i data=”y” data=”b” o n id=”2” id=”4” data=”c” data=”r” s
    29. 29. HIBERNATE ENVERS-3 @Entity @Indexed @Audited public class Contact extends BaseObject { @Field @Versioned private String name; }
    30. 30. Apache CXF-1 • open-source services framework • annotation driven • JAX-WS & JAX-RS compliant • soap + rest • xml + json
    31. 31. Apache CXF-2 @Component("addressBookWebService") @WebService public class AddressBookWebService { @Autowired private AddressBookService addressBookService; @WebMethod public List<String> allAddressBookTitles() { return addressBookService.findAllTitles(); } } spring configuration: <jaxws:endpoint id="addressBookWS" implementor="#addressBookWebService" address="/addressbook" />
    32. 32. Apache CXF-3 http://localhost:8080/mesir/ws/addressbook/allAddressBookTitles
    33. 33. MAVEN • Stop “building the build” and focus on building the application...! • A uniform build system... • Project Object Model (POM) • Guidelines for best practices while doing development (TDD - Cont. Int. & etc.)
    34. 34. MAVEN - The POM-1 <project ...> <modelVersion>4.0.0</modelVersion> <groupId>tr.mc</groupId> <artifactId>mesir</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>mesir</name> <url>http://code.google.com/p/mesir</url> <description>Skeleton project for java based web applications</description> ... ... ... ... </project>
    35. 35. MAVEN - The POM-2 <dependencies> ... <dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>2.5.6</version> <scope>test</scope> </dependency> ... </dependencies>
    36. 36. MAVEN - The POM-3 <repositories> <repository> <id>mesir-repo</id> <url>http://mesir.googlecode.com/svn/trunk/mavenrepo</url> </repository> <repository> <id>jboss</id> <url>http://repository.jboss.com/maven2</url> </repository> <repository> <id>apache-snapshot</id> <url>http://people.apache.org/repo/m2-snapshot-repository</url> </repository> </repositories>
    37. 37. ECLIPSE-1 • Universal toolset for Development • Open Source IDE • Extensible architecture based on plugins • Specified mostly on Java but development language is independent... CDT - PHP - Cobol • Plugins used while developing mesir: subclipse m2eclipse
    38. 38. ECLIPSE-2 •
    39. 39. Thank you... http://www.jroller.com/mert http://www.twitter.com/mertcaliskan
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×