Course Outline
Java is now a mature language. With the advent of Java 5 and now Java 6, the language has seen profound improvements of which not all developers are aware. This course highlights those improvements, as well as delving into a range of topics that an experienced Java developer needs, such as design patterns, logging and testing frameworks, performance and concurrency issues: skills that underpin best Java development project practice worldwide.
This course has very much a workshop feel by design, as experienced Java developers will typically come to this course with individual issues and requirements, and our expert instructors can usually adapt the course content on the fly and have the flexibility to concentrate on topics as required (within reason!).
Course Content
All exercises and examples are designed to achieve the maximum benefit for delegates. They aim to effectively demonstrate the advanced concepts covered in the course and provide an opportunity to experiment with them; many of the exercises develop custom API’s which encapsulate complex functionality that can be used in numerous real world applications.
This course has been developed for real-world, commercial scenarios by our expert instructors. See below for detailed syllabus. If you have a technical question, please email sales@jbinternational.co.uk
What you will learn
1. Advanced language concepts, including generics, enumerations and other Java 5 additions to the Java language.
2. A solid grounding in use of Java for distributed programming, including web techniques.
3. Best practices, including use of open source frameworks and techniques that are now mainstream project standards.
4. How to use design patterns effectively and apply them in practical contexts.
Advanced Java Training Course Outline
Improvements to the Java Language
Exploiting type-safe Collection classes with generics
Writing your own generified, flexible classes
How to minimize casting with autoboxing
Annotations for improving compiler effectiveness
Providing your own annotations
Effective string processing with regular expressions
Flexible parameter lists with varargs
Farewell to lists of constants: enumerations
Maintainability & Extensibility with Design Patterns
Beyond simple OO
Why new is not always best: creational patterns
One and only one instance with Singleton
Controlling what you create with Factory Method
Improved object relationships: structural patterns
Bridging divides with Adapter
When inheritance is not enough: Decorator
Object oriented algorithms: behavioural patterns
Divide and rule with Command
Event-driven processing: Observer
Applying State and Strategy
Enforcing lifecycles with Template Method
Logging Best Practice
System.out.println considered harmful
Controlling message destinations
Filtering messages by severity
Choices of logging framework: Java native logging versus log4j
Avoiding commitment: Apache
Commons Logging
Creative applications for logging
Optimizing the Java Development Lifecycle
Beyond simple build management with ANT
Incorporating and automating project-wide testing
Enforcing code quality standards
Gathering metrics
Spotting anti-patterns
Further automation with Maven
Controlling dependencies
Maven and IDE integration
Configuration management with SubVersion
New features of Java
JUnit: testing framework and philosophy
Testing best practice
Improved test management with annotations
Container-based testing for enterprise Java components
Approaches for Distributed Applications
Java's raw networking capabilities
Simplifying access to networked resources:
URL and URLConnection
Improved remote method invocation (RMI) and macro frameworks - Web client/server architectures
Apache HttpClient
Web containers: Apache Tomcat
Designing Secure Applications
Locking down the JVM with policy-based security
Implications of security for writing Java code
Authentication and authorisation in enterprise Java environments
High Performance Java
Tools for profiling your Java code
Analysing response times and bottlenecks
Automating load and stress testing
High-performance IO for files and networks: java.nio.
Common performance-related coding issues
Configuring the JVM for best performance
Managing and monitoring Java applications with JMX
Concurrency Utilities
Thread-safe building blocks: the java.util.concurrent* packages
Scheduling and synchronizing tasks
Implementing highly scalable concurrent algorithms