1. Java Application as a Black Box: codebase management, building, troubleshooting and running. 30hrs.
- Understanding Java platform architecture and its typical defects
- Hands-on skill of managing Java codebase with version control tool
- Understanding core Java application structure for fast localization focus
- Hands-on skill of building and autotesting complex Java Application
- Understanding core Java syntax to localize and report compile-time errors
- Hands-on skill of running and debugging complex Java Application
- Understanding core Application architecture for fast localization focus
- RAM ≥ 8Гб
- Wi-Fi with Internet access
- git
- JDK8
- IDEA (trial Ultimate)
- Maven
- Tomcat
- Chrome standalone offline installer
- Docker for Windows or Docker for Mac
- github.org :443 :80
- repo1.maven.org :443 :80
- jcenter.bintray.com :443 :80
- hub.docker.com :443 :80
- Schedule
- Trainer
- Training overview
- Rules
- Pairs forming and introduction
- Topics focus demand from attendees
- Additional topics demand form attendees
- Java Platform definition
- Java Platform goals and constrains
- Brief history and versioning
- Basic terms: JVM, JRE, JDK
- Sourcepath and Classpath
- Two-classes Java application manual build and run cycle
- Run-time parametrization: JVM parameters, application properties, program arguments
- Two-classes Java application manual build and run cycle with run-time parametrization
javac
java
javadoc
- Class and its responsibility
- Method and its intention
- Package and its cohesion
- JAR and executable JARs
- Compiler warnings
- Compiler errors (CNFE, typing)
- Run-time errors (CNDFE, Exceptions and Errors)
- Compiling milti-class packaged application from sources
- Compiling milti-class packaged application from sources and raw comiled classes
- Compiling milti-class packaged application from sources and JARed comiled classes
- Making and running executable JAR
- Making and running executable JAR from packaged sources and JARed comiled classes
- Local repo
- Commit
- Log
- Tag
- Branch
- Remote repo
- Clone
- Push
- Pull
- Make group custom branch
- Local and remote workflow with IDE tool
- Fork this repo with your account
- Add pair as collborator
- Clone fork locally
git clone --branch master --depth 1 https://github.com/ACCOUNT/java-application-building
- Open project with IDE
- Make identyfing change and push
- Distributed
- Centralized
- Team branch
- Relese branch
- Git Flow: feature branches + dev branch
- Trunk-based development + Feature toggling
- Making pull-request: code review + merge
- Make change
- Make pull-request for code review and merge
- Make reverse pull-request to get trainers changes
- Build lifecycles
- Lifecycles phases
- Plugins
- Managing plugins with pom.xml
- Dependecy artifacts: JARed classes, sources, javadocs
- Artifact repositories
- Artifact identifying
- Artifact versioning: stable and snapshots
- Dependency management with pom.xml
- Typical issues: dependency hell
- Unit vs Integration tests pattern
- Partial application build with IDE
- Uber-jar pattern
- Full application build with IDE
- Build results analysing
- Full application build with IDE
- Errors analysing
- Compile errors fixing
- Build without tests ran
- Project settings and structure: modules, sourcepath + classpath
- Main and Test sources
- Workspace
- Views and hotkey switching
- Editing sources and foreground compilation
- Debugging methods
- Running tests from IDE
- Running application with run configuration and hotkey shortcut
- Full application building from Maven view
- Hotkey shortcuts for git workflow operations
- Main hotkey
- Edit: fix test defects localized
- Debug
- Run tests
- Full Maven build
- Build results analysing
- Commit and push
- Methods and Call Stack
- Objects and Heap Object Space
- Classes and Perm/Meta Space
- References in all scopes and GC
- Class locading errors: compilation and run-time
- Static context access
- NPE
- OOME: object heap space leak
- OOME: perm/meta space leak
- GC overhelming and stop-the-world
- Application profiling with VisualGC plugin and Heap profiling
- Heap dump
- Application profiling with VisualGC plugin and Heap profiling
- Type
- Object
- Handling
- Stack trace
- Built-in
- Errors vs Exceptions
- Checked vs Unchecked
- Where to handle: system architecture layering aspect
- How to handle: patterns
- TRW
- Stateful vs Stateless components
- Business exception design and handling
- Exception suppression demo
- Business exception design and handling
- Thread concept
- Scheduler
- Scheduler overhead issue
- Data race issue
- Thread-safety design and documetation
- Threads syncronization: why
- Deadlock issue
- Data race issue demo
- Application profiling with threads states and stack dump
- Application profiling with threads states and stack dump
- HTTP as a transport layer
- Methods
- Payload
- Errors
- JavaEE/JakartaEE standart
- Tomcat overview
- Web application layout
- Webapp building
- Webapp deploying
- Webapp running
- Webapp undeploying
- Components: servlets, jsp, filters, listeners
- UI webapp architecture
- REST- and Web-services architecture
- Simple UI webapp building and deploying to Tomcat
- HTTP layer sniffing with Chrome
- Simple UI webapp building and deploying to Tomcat
- HTTP layer sniffing with Chrome
- Framework definintion
- Typical application architecture: layers
- Typical responsibilities
- Application configuration: why and what
- Why not JavaEE
- Responsibilities
- Application configuration ways
- Context definition
- Profiles definition
- Typical issues with context components
- Responsibilities for REST and SOAP API
- Typical issues with Controllers
- Responsibilities
- Typical issues with Boot modules
- REST API overview
- Structure of Boot application for API
- Building and running
- Building and running Boot REST API application
- Manual tesing
- Plain files
- RDBMS
- NoSQL/NewSQL
- Pros and Cons
- JDBC API: db schema constrains, type mapping, transactions
- JPA API: entities and constrains, caching, transactions
- Spring Boot Data generated repositores
- Configuring constraints
- Db schema constrains
- Entities constraints
- Validation API constraints
- JDBC transactions and isolation, db deadlocks
- JPA transactions and optimistic exceptions
- Why
- DB versioning with Liquibase and access with Boot Data repositories
- Add entity field with Validation API constraints
- Add Liquibase change
- Build and run application
- Manual testing
- Testing scopes mapped to application architecture
- Test structure
- Test doublers
- Reporting: test run and coverage
- Test error types
- Attendees choose their typical scope for demo
- Unit test: plain service + manual doubling
- Unit test: service + spring context doubling
- Integration test: controller + serivce
- Integration test: controller + service + repository
- Integration test: HTTP layer + controller + service + repository
- Integration test: HTTP layer + controller + service + remote REST service + repository
- HTML overview
- Selenium API overview
- Selenide library
- Driver manager library
- UI Selenide test with Chrome headless mode off
- Choose testing scope
- Implement autotest
- Run from IDE
- Run full Maven build
- Analyse reports
- Logging libraries hell overview
- SLF4J API
- Logback configuration
- Profiles
- Production issues
- Centralized remote logging architecture
- ELK stack for implementation
- Remote ELK overview
- Application logs to Logstash
- Log stream with Kibana
- Log searching and filtering with Kibana
- Business events filtering
- Kibana dashboards for business events
- What to monitor?
- Gathering system metrics with Beats
- Kibana dashboards
- What to monitor?
- JMX MBeans
- MBeans implementations: JVM, container, framework, application
- Remote monitoring with JVisualVM
- Customize logging level
- Analyse logs
- Local monitoring with JVVM
- Production process overview
- Bottlenecks
- Communications as a key
- DevOps culture
- Source management
- Artifact management
- CI
- Autotesting
- Stage provisioing and IaaC concept
- Stage virtualization and containerization
- CD
- DB versioning
- Feature toggling
- Deployment patterns
- Production logging and monitoring
- Where is QA adds value?
- CD pipeline demo
- Push feature change full-auto to prod environment
- Containerization goals
- Containerization vs virtualization
- QA use-cases and value
- Docker images
- Docker container
- Docker Hub
- Image provisioning
- Application dockeriaztion
- Container run
- Docker Compose
- Docker Swarm
- k8s
- Daily retrospectives