Java Technologies+

Presented by:

Eduardo Burgos

Angel Taveras

Objectives

It’s a course where we plan to show the greatest amount of tools and technologies over which we have been working lately. This idea comes from the amount of people that always asks “what are you working with?”, “what do you use in your work?”, etc.

This class assumes from the student a minimum java knowledge (We’re not going to teach object inheritance or polymorphism), object oriented programming and databases for it’s correct development.

The Way it Works

Angel and I are going to take turns on classes, which means, I will teach some subjects and he will teach others. During all classes, we will both be there (that being teaching or not) to help the students. We will have 1 helping person for every other 10 students in the class. The exercises and homework will be developed in a continuous way, which means those will be used for the next assignment.

For obvious reasons, there will be no tests in this class.

Costs

Contact us

Location

Depends on the schedules.

Weekly Schedule and Start Date

We plan to start on Friday October 31, 2008

The schedule will be Fridays 18:00 - 22:00 and Saturdays 9:00-13:00.

Contents

Module 1: Building Blocks (44 hrs)

Development Environment: Better Builds (12 hrs)

Subversion
Versioning Concept
Repository Creation
Subversion w/Eclipse
Apache Maven
Maven Concept
Build Phases
Configuration
Maven Archetypes
Maven Integration w/Eclipse
Maven Plugins
Continuous Integration (Apache Archiva)
Issue Management Systems
Bugzilla
Mylyn (Eclipse Integration)

Code generation (AppFuse/Apache Velocity/Java Emitter Template [JET]) (8 hrs)

Application Skeleton generation with AppFuse
Generation of small application parts with Apache Velocity
Java Emitter Template (JET)

Data Layer with Hibernate/EJB3 (20 hrs)

1 -ORM Concepts (2 hrs)

What it’s Persistence?
- Relational Databases
- Understanding SQL
- Using SQL in java
- Persistence in Object Oriented Applications

The paradigm mismatch
- The problem of granularity
- The problem of Subtypes
- The problem of identity
- Problems relating to associations
- The problem of data navigation
- The cost of the mismatch

Persistence Layers an alternatives
- Layered Architecture
- Hand-coding persistence layer with SQL/JDBC
- Using Serialization
- Object Oriented Database Systems
- Other Options

Object/Relational Mapping
- What it’s ORM?
- Generic ORM Problems
- Why ORM?
- Introducing Hibernate, EJB3, and JPA

2 - Domain Models (2 hrs)

Implementing The Domain Model
- Addressing Leakage of concerns
- Transparent and automated persistence
- Writing POJOs and Persistent entity classes
- Implementing POJO associations
- Adding Logic to accesor methods

Object/Relational Mapping Metadata
- XML Based metadata
- Annotation-based metadata

3- Mapping Concepts And Strategies (2 hrs)

Understanding Entities And Value Types
- Fine-grained domain models and concept

Mapping Entities with identity
- Understanding java identity and equality
- Handling database identity
- Database primary keys
- Basic value types

Fine-grained models and mapping
- Mapping basic Properties
- Mapping components

4- Inheritance and Custom Types (2 hrs)

Mapping class Inheritance
- Table per Concrete class with implicit polymorphism
- Table per Concrete class with unions
- Table per class hierarchy
- Table per subclass
- Mixed Strategies
- Choosing a Strategy

Creating Custom Mapping Types
- Considering custom mapping types
- Creating a UserType
- Creating a CompositeUserType
- Parameterizing Custom Types
- Mapping Enumerations

5- Mapping Collections (4 hrs)

Sets, bags, lists and maps of value types

Collections of components

Mapping a parent/children relationship
- Multiplicity
- Making the association bidirectional
- Cascade object state

Single Valued Entity associations
- Shared Primary Key associations
- Mapping with a join table

Many-valued entity associations
- One-to-many associations
- Many-to-many associations
- Adding columns to join tables
- Mapping Maps

Polymorphic Associations
- Polymorphic many-to-one associations
- Polymorphic collections
- Polymorphic table per concrete class

6 - Querying with HSQL and JPA QL (4 hrs)

Creating and running Queries
- Preparing a Query
- Executing a Query
- Using named queries

Basic HQL and JPA QL Queries
- Selection
- Restriction
- Projection

Joins, reporting queries, and subselects
- Joining relations and associations
- Reporting queries
- Using subselects

Querying with criteria and example
- Basic Criteria Queries
- Joins and dynamic fetching
- Projection and report queries

Using native SQL queries
- Automatic resultset handling
- Retrieving scalar values

7 - Working with objects (2 hrs)

The persistence lifecycle
- Object States
- The persistence Context

Object Identity and Equality
- Introducing Conversations
- The Scope of Object Identity
- The Detached Objects

Hibernate Interfaces
- Storing/Loading Objects
- Working with detached entity instances

8 - Transactions and Concurrency (2 hrs)

Transaction Essentials
- Database and system transactions
- Transactions in Hibernate Applications
- Transaction with JPA

Controlling concurrent access
- Understanding database-level concurrency
- Optimistic Concurrency Control
- Using isolation

Unit Testing (4 hrs)

Unit Test (What is a test and why do we need it?)
JUnit
maven test (example)
Generating similar tests with Code Gen
Maven Surefire/Cobertura

Module 2: Concurrency, Service Oriented Architecture (60 hrs)


Java 5 Concurrency Framework (8 hrs)


1 - Fundamentals (2.5 hrs)

Thread Safety
- Atomicity
- Locking
- Guarding State with Locks
- Liveness and Performance

Sharing Objects
- Visibility
- Inmutability

Composing Objects
- Design Thread Safe Classes
- Delegating Thread Safety
- Documenting Synchronizacion Policies

Building Blocks
- Sync Collections
- Concurrent Collections
- Blocking Queues
- Producer/Consumer Pattern
- Synchronizers

2 - Structuring Concurrent Applications (2.5 hrs)

Task Execution
- Executing tasks and threads
- The EXecutor Framework

Cancellation And Shutdown
- Task Cancellation
- Stoping a thread-based service
- Handling abnormal thread termination
- JVM shutdown

Applying Thread Pools
- Implicit couplings between tasks and execution policies
- Sizing thread pools
- Configuring ThreadPools
- Parallelizing Recursive Algorithms

GUI Applications and Threads (Swing Applications)
- Why are GUIs single-threaded ?
- Short-running GUI Tasks
- Long-running GUI Tasks
- Shared data models
- Other forms of single-threaded subsystems

3 - Liveness, Performance (1 hr)

Avoiding Liveness Hazards
- Deadlock
- Avoiding and diagnosing deadlocks
- Other liveness hazards

Perfomance and Scalability
- Thinking about performance
- Amdahl’s Law
- Cost introduced by threads
- Reducing Lock Contention
- Comparing Map Performance
- Reducing Context Switch Overhead


4 - Advanced Topics (2 hrs)

Explicit Locks
- Fairness
- Performance
- Synchronized and ReentrantLocks
- Read-Write Locks

Custom Synchronizers
- Anatomy of a Synchronizer
- AQS (AbstractQueuedSynchronizer)

Atomic Variables and Nonblocking Algorithms
- Disadvantages of Locking
- Hardware Support for Concurrency
- Atomic Variables
- Nonblocking Algorithms

Spring Framework (8 hrs)

Spring IoC (Inversion of Control container) (3 hrs)
Spring Security (Only interfaces, each framework will implement security on it’s own way with spring-security) (1 hr)
Spring AOP (Aspect Oriented Programming) (4 hrs)

Process Scheduling/Quartz in action! (4 hrs)

Motivation
What is Quartz?
Why Quartz?
Samples

Lucene (Text Indexing) (6 hrs)

Core Lucene
- Understanding Lucene
- Indexing and Searching
- Understanding the core Indexing Classes
- Understanding the core Searching Classes

Indexing
- Understanding the indexing process
- Basic Index Operations
- Boosting Documents And Fields
- Indexing Dates
- Indexing Numbers
- Indexing Fields used for sorting
- Controlling the indexing process
- Optimizing an index
- Concurrency, thread-safety, and locking issues

Searching
- Implementing a simple search feature
- Using IndexSearcher
- Understanding Lucene Scoring
- Creating queries
- Parsing Query Expressions

Analysis
- Using Analyzers
- Analyzing the analyzer
- Using the build-in analyzers
- Dealing with keyword fields
- “Sounds like” querying
- Synonyms, aliases, and words that mean the same
- Stemming analysis
- Language Analysis

Advanced Search Techniques
- Sorting search results
- Using PhrasePrefixQuery
- Querying on multiple fields at once
- Span queries
- Filtering a Search
- Searching across multiple indexes

Extending Search
- Using a custom sort method
- Using a custom HitCollector
- Extending QueryParser
- Using a Custom Filter

Hibernate Search (Text Indexing) (2 hrs)

Architecture
- Work execution
- Reader strategy

Configuration
- Directory Configuration
- Reader strategy configuration
- Enabling Hibernate Search and Automatic Indexing

Mapping entities to the index structure
- Mapping an Entity
- Property/Field Bridge

Querying
- Building Queries
- Retrieving the results
- Filters
- Optimizing the query process
- Native Lucene Queries

Manual Indexing
- Indexing
- Purging

Index Optimization
- Automatic Optimization
- Manual Optimization
- Adjusting Optimization

Web Services (Apache CXF) (8 hrs)

SOAP

REST

Some different transports (JMS, HTTP, JBI).


JBI/OSGI (8 hrs)

JBI 1.0 concept (Service assemblies, service units, service engines)
JBI 2.0 (upcoming)
Introduction to Apache Servicemix
OSGI concept
Eclipse with osgi
Plugin/Module model
Servicemix 4 application

Management Console - JMX (2 hrs)

MBeans, etc

JackRabbit/Apache Sling - Document Oriented Databases (4 hrs)

Jackrabbit/Sling database access from web services
Development of a small application using this service model

Module 3: User Interface Frameworks (36 horas)

Reporting (BIRT) (4 hrs)


AJAX with GWT (12 hrs)

Getting Started

- Introducing GWT
- Creating the Default Application

Building User Interfaces

- Working with Widgets
- Working with Panels
- Handling Events
- Creating Composite Widgets
- Building JSNI Components
- Modularizing an Application

Advanced Techniques

- Communicating with GWT-RPC
- Client-Side RPC Architecture
- Achieving Interoperability with JSON
- Automatically generating New Code
- Changing application based on GWT properties

Adobe Flex/AIR (20 horas)

Flex Basic (4 hrs)
Comparing flash and flex
Comparing web and desktop (air)
Flex Builder
MXML
Data Binding
i18n
Events

Components (4 hrs)

Grids
Containers
Renderers
Creating new components

Validation (2 hrs)

Effects (1 hr)

Basic Effects

Services (3 hrs)

Web Services
HTTP Services
RPC (delayed until we get to BlazeDS)
Object types (RPC bind, XML, E4X, Flex objects)
Converting an application to AIR ( 2 hrs )

BlazeDS Proxy, RPC, AMF (Adobe Flex) (4 hrs)

Proxy Service concept
AMF binary protocol
RPC concept
RPC bound data types
BlazeDS sample with a spring factory

Please fill out this form to subscribe: (click this link or fill directly below)

Java Technologies+ Subscription Form