Chapter 1 - TESTING SPRING SECURITY: Verify access rules, NOT JUST happy paths
- TLDR
- WHAT IS A SECURITY INTEGRATION TEST?
- WHY INTEGRATION TESTING MATTERS FOR SECURITY
- HAPPY PATHS ARE NOT ENOUGH
- 1. TEST WITH A MOCK USER
- HOW @WITHMOCKUSER WORKS
- ROLES BECOME AUTHORITIES
- MOCK USER DOES NOT TEST REAL LOGIN
- WHEN @WITHMOCKUSER IS A GOOD FIT
- SPRING DOCUMENTATION REFERENCE
- 2. USE A MOCK SECURITY CONTEXT
- WHY BUILD A CUSTOM SECURITY CONTEXT?
- TESTSECURITYCONTEXTHOLDER
- CUSTOM PRINCIPALS
- SPRING DOCUMENTATION REFERENCE
- 3. VERIFY 401 AND 403 RESPONSES
- 401 VS 403
- WHY THE DISTINCTION MATTERS
- EXACT 401 BEHAVIOR CAN DEPEND ON CONFIGURATION
- TEST DENIED PATHS AS CAREFULLY AS ALLOWED PATHS
- 4. TEST A SECURED CONTROLLER WRITE
- WHAT THIS TEST VERIFIES
- WHY CSRF MATTERS
- TESTING CSRF IS PART OF TESTING SECURITY
- SECURITY TESTS SHOULD MATCH THE REAL RULES
- PRINCIPAL TESTING
- WHY PRINCIPAL SHAPE MATTERS
- SECURITYFILTERCHAIN IS PART OF THE CONTRACT
- METHOD SECURITY SHOULD ALSO BE TESTED
- TEST AUTHENTICATION AND AUTHORIZATION SEPARATELY
- WHY MOCK SECURITY IS USEFUL
- WHAT MOCK SECURITY DOES NOT PROVE
- A PRACTICAL SECURITY TEST MATRIX
- EXAMPLE TEST STRUCTURE
- SECURITY TESTS AS EXECUTABLE DOCUMENTATION
- TAKEAWAYS
Chapter 2 - SPRING BOOT gRPC IN 5 STEPS: A BEGINNER-FRIENDLY PATH
- TLDR
- WHAT IS gRPC?
- WHAT IS PROTOCOL BUFFERS?
- STEP 1 - ADD THE STARTER
- WHY THE STARTER HELPS
- STEP 2 - DEFINE THE CONTRACT
- UNARY RPC
- SERVER STREAMING
- STEP 3 - GENERATE THE JAVA API
- GENERATED CODE IS CENTRAL TO gRPC
- WHY CODE GENERATION MATTERS
- STEP 4 - IMPLEMENT THE SERVICE
- WHAT THE GENERATED BASE CLASS DOES
- WHAT @GRPCSERVICE DOES
- BUSINESS LOGIC STAYS NORMAL JAVA
- STREAMOBSERVER
- STEP 5 - IMPORT THE CLIENT
- CLIENT STUB MENTAL MODEL
- BLOCKING STUB
- TEST THE SERVICE WITH grpcurl
- WHAT grpcurl IS USEFUL FOR
- OTHER TESTING TOOLS
- gRPC IS CONTRACT-FIRST
- STRONGLY TYPED COMMUNICATION
- STREAMING IS A FIRST-CLASS FEATURE
- SPRING BOOT REDUCES THE WIRING
- gRPC IS NOT AUTOMATICALLY BETTER THAN REST
- REST AND gRPC CAN COEXIST
- PRODUCTION CONCERNS
- TLS
- MTLS
- DEADLINES
- RETRIES
- MESSAGE LIMITS
- TRACING
- HEALTH CHECKS
- A SIMPLE BEGINNER RECAP
- THE MAIN MENTAL MODEL
- TAKEAWAYS
Chapter 3 - JAVA “MAGIC” TYPES: THE ONES YOU CAN’T NAME (NON-DENOTABLE TYPES)
- TLDR
- THE “NULL TYPE”
- VAR + ANONYMOUS CLASS
- NO STRUCTURAL TYPES IN JAVA
- GENERICS
- TAKEAWAYS
Chapter 4 - EMBABEL 1.0.0 GA: 5 STEPS TO YOUR FIRST JAVA AGENT APP
- TLDR
- 1. ADD EMBABEL TO YOUR APPLICATION
- MODEL PROVIDERS
- 2. CREATE THE SPRING BOOT APPLICATION
- AGENTIC CODE INSIDE THE JVM APPLICATION
- 3. DEFINE A STRONGLY TYPED DOMAIN MODEL
- MORE THAN SIMPLE DTOS
- WHY STRONG TYPING MATTERS
- 4. EXTRACT THE REQUEST AND CALL TOOLS
- ACTION 1 - UNDERSTAND THE REQUEST
- CREATEOBJECTIFPOSSIBLE
- ACTION 2 - RESEARCH WITH TOOLS
- ACTIONS CAN MIX DIFFERENT KINDS OF WORK
- 5. DECLARE THE GOAL
- WHAT @ACHIEVESGOAL MEANS
- SCRIPTED PIPELINE VS GOAL-ORIENTED AGENT
- GOAP PLANNING
- REPLANNING
- NORMAL APPLICATION CODE STILL MATTERS
- STRUCTURED OUTPUT
- WHY STRUCTURED OUTPUT IS IMPORTANT
- EMBABEL AND SPRING AI
- THE LAYERS MENTAL MODEL
- WHAT ELSE 1.0.0 EXPANDS
- MODULE MATURITY STILL MATTERS
- GA DOES NOT REMOVE ARCHITECTURAL JUDGMENT
- A SIMPLE FIVE-STEP RECAP
- THE CORE DESIGN IDEA
- WHEN THIS MODEL IS USEFUL
- TAKEAWAYS
Chapter 5 - 10 JAVA DESIGN PATTERNS EVERY DEVELOPER SHOULD RECOGNIZE
- TLDR
- 1. STRATEGY
- WHEN STRATEGY IS USEFUL
- WHY STRATEGY HELPS
- 2. SIMPLE FACTORY
- FACTORY MENTAL MODEL
- WHEN SIMPLE FACTORY IS USEFUL
- FACTORY VS DIRECT CONSTRUCTION
- 3. BUILDER
- WHY BUILDER IS USEFUL
- WHEN BUILDER IS A GOOD FIT
- BUILDER MENTAL MODEL
- 4. ADAPTER
- ADAPTER MENTAL MODEL
- WHEN ADAPTER IS USEFUL
- WHY ADAPTER REDUCES COUPLING
- 5. DECORATOR
- DECORATOR MENTAL MODEL
- COMMON DECORATOR USE CASES
- WHY DECORATOR IS POWERFUL
- DECORATOR VS INHERITANCE
- 6. OBSERVER
- OBSERVER MENTAL MODEL
- WHEN OBSERVER IS USEFUL
- THE OBSERVER TRADE-OFF
- USE OBSERVER WITH DISCIPLINE
- 7. TEMPLATE METHOD
- TEMPLATE METHOD MENTAL MODEL
- WHEN TEMPLATE METHOD IS USEFUL
- TEMPLATE METHOD TRADE-OFF
- 8. COMMAND
- COMMAND MENTAL MODEL
- WHEN COMMAND IS USEFUL
- COMMAND AND ASYNCHRONOUS EXECUTION
- 9. FACADE
- WHAT THE FACADE MAY HIDE
- WHEN FACADE IS USEFUL
- FACADE VS ADAPTER
- 10. PROXY
- PROXY MENTAL MODEL
- COMMON PROXY USE CASES
- PROXY IN SPRING
- PROXY IN HIBERNATE
- DECORATOR VS PROXY
- HOW THE 10 PATTERNS GROUP TOGETHER
- DO NOT START WITH THE PATTERN NAME
- PATTERNS ARE A SHARED VOCABULARY
- PATTERNS IN FRAMEWORKS
- THE OVER-ENGINEERING TRAP
- A PATTERN SHOULD EARN ITS COMPLEXITY
- A SIMPLE RECOGNITION CHECKLIST
- TAKEAWAYS
Chapter 6 - ZGC means “Z Garbage Collector,” not “Zero Garbage Collector.”
- TLDR
- A BRIEF HISTORY OF ZGC
- WHAT ZGC IS TRYING TO OPTIMIZE
- CONCURRENT DOES NOT MEAN PAUSE-FREE
- WHY ZGC PAUSES CAN STAY SHORT
- COLORED POINTERS
- LOAD AND STORE BARRIERS
- RELOCATING OBJECTS CONCURRENTLY
- WHY COMPACTION MATTERS
- WHY GENERATIONAL ZGC MATTERS
- WHY THE YOUNG GENERATION IS CHEAPER TO COLLECT
- ENABLING ZGC ON JDK 25
- ENABLING GENERATIONAL ZGC ON JDK 21
- ZGC VS G1
- G1’S GENERAL-PURPOSE STRENGTH
- ZGC’S LATENCY FOCUS
- HEAP HEADROOM MATTERS
- WHAT IS AN ALLOCATION STALL?
- CONCURRENT GC STILL USES CPU
- WHAT TO CHECK WHEN ZGC STRUGGLES
- LIVE SET SIZE
- ALLOCATION RATE
- LARGE ALLOCATIONS
- ZGC REQUIRES MINIMAL TUNING, NOT ZERO TUNING
- WHAT COMES NEXT?
- THE LONG-TERM VISION
- A SIMPLE ZGC MENTAL MODEL
- WHEN ZGC IS A GOOD FIT
- WHEN G1 MAY STILL BE BETTER
- TEST WITH REAL WORKLOADS
- TAKEAWAYS
Chapter 7 - REST API DESIGN: MAKE YOUR API EASY TO USE BEFORE MAKING IT PERFECT
- TLDR
- 1. START WITH RESOURCES, NOT ACTIONS
- LET HTTP PROVIDE THE VERBS
- RESOURCE RELATIONSHIPS
- 2. FILTERING IS PART OF THE API DESIGN
- CONSISTENT FILTER SYNTAX
- SORTING SHOULD SUPPORT REAL USE CASES
- PAGINATION IS NOT AN AFTERTHOUGHT
- KEYSET OR SEEK PAGINATION
- WHY PAGINATION DESIGN MATTERS
- 3. BULK OPERATIONS NEED CLEAR SEMANTICS
- BULK CREATE
- BULK UPDATE
- BULK GET OR DELETE
- PARTIAL FAILURE IS THE HARD PART
- MULTI-STATUS STYLE RESPONSES
- 4. RETURN USEFUL RESPONSES
- DELETE RESPONSES
- STRUCTURED ERRORS
- WHY STRUCTURED ERRORS MATTER
- 5. USE HTTP STATUS CODES PROPERLY
- STATUS CODES HELP CLIENTS DECIDE WHAT TO DO
- 6. THINK ABOUT FIELDS AND PAYLOAD SIZE
- EMBEDDING RELATED DATA
- THE EMBEDDING TRAP
- 7. SECURITY IS NOT OPTIONAL
- CACHING HEADERS
- RATE-LIMIT FEEDBACK
- 8. VERSIONING: CHOOSE A RULE AND STICK TO IT
- CONSISTENCY MATTERS MORE THAN ARGUMENTS
- 9. REST PURITY VS PRAGMATISM
- HATEOAS AS A REST IDEA
- PRAGMATISM DOES NOT MEAN IGNORANCE
- AN API IS NOT GOOD BECAUSE SWAGGER LOOKS CLEAN
- DESIGN FOR DEVELOPER EXPERIENCE
- BORING CONSISTENCY IS A FEATURE
- A SIMPLE REST API DESIGN CHECKLIST
- TAKEAWAYS
Chapter 8 - FIVE JAPANESE MINDSET PRINCIPLES FOR CLEANER CODE
- TLDR
- 1. KAIZEN - CONTINUOUS IMPROVEMENT
- BEFORE
- AFTER
- KAIZEN AS A CODING HABIT
- WHY SMALL REFACTORINGS MATTER
- 2. GANBARU - PERSEVERE THROUGH DIFFICULTY
- EXAMPLE
- PERSEVERANCE DOES NOT MEAN COMPLEXITY
- SMALL FUNCTIONS REDUCE COGNITIVE LOAD
- 3. SHOSHIN - BEGINNER’S MIND
- BAD NAME
- BETTER NAME
- MEANINGFUL NAMES ARE DOCUMENTATION
- SHOSHIN IN CODE REVIEW
- 4. WABI-SABI - THE BEAUTY OF IMPERFECTION
- SIMPLE CODE FIRST
- THE OVER-ENGINEERING TRAP
- SIMPLE DOES NOT MEAN CARELESS
- WABI-SABI AND “PERFECT” ARCHITECTURE
- 5. MUSHIN - CLEAR MIND, NO DISTRACTION
- MAGIC VALUE EXAMPLE
- WHY MAGIC VALUES BREAK FOCUS
- DUPLICATION ALSO BREAKS FLOW
- MUSHIN AS CODE CLARITY
- THE FIVE PRINCIPLES TOGETHER
- CLEAN CODE IS NOT PERFECT CODE
- SENIORITY AND CODE QUALITY
- A SIMPLE REVIEW CHECKLIST
- TAKEAWAYS
Chapter 9 - SPRING BOOT 4.1.0: LAZY JDBC CONNECTIONS + gRPC
- TLDR
- 1. FETCH JDBC CONNECTIONS LAZILY
- THE TRADITIONAL BEHAVIOR
- WHY THIS CAN WASTE CONNECTIONS
- WHAT LAZY JDBC FETCHING CHANGES
- WHAT COUNTS AS FIRST JDBC USAGE?
- WHEN LAZY FETCHING HELPS MOST
- CONNECTION-POOL BENEFITS
- DO NOT ENABLE IT BLINDLY
- 2. WHAT SPRING BOOT 4.1 ADDS FOR gRPC
- EXPOSE A gRPC SERVICE AS A SPRING BEAN
- DEFAULT SERVER MODEL
- IMPORT A GENERATED gRPC CLIENT
- CHANNEL AND CLIENT INFRASTRUCTURE
- WHY THIS MATTERS
- OTHER SPRING BOOT 4.1.0 IMPROVEMENTS
- SSRF MITIGATION SUPPORT
- ASYNC OBSERVABILITY CONTEXT
- UPGRADE NOTES
- REVIEW REMOVALS BEFORE UPGRADING
- LAZY JDBC AND gRPC SOLVE DIFFERENT PROBLEMS
- WHEN TO USE LAZY JDBC FETCHING
- WHEN TO USE gRPC
- TAKEAWAYS
Chapter 10 - APACHE SHIRO 2.2.0: JAVA SECURITY WITHOUT THE HEAVY NOISE
- TLDR
- WHAT IS APACHE SHIRO?
- THE SHIRO SUBJECT
- FEATURE 1 - AUTHENTICATION
- THE REALM CONCEPT
- FEATURE 2 - AUTHORIZATION
- ROLES VS PERMISSIONS
- FEATURE 3 - SESSION MANAGEMENT
- WHY SESSION MANAGEMENT MATTERS
- WHAT APACHE SHIRO 2.2.0 BRINGS
- WHEN APACHE SHIRO CAN MAKE SENSE
- SHIRO IS NOT “BETTER THAN SPRING SECURITY”
- THE SPRING ECOSYSTEM EQUIVALENTS
- CAN SHIRO BE USED WITH SPRING BOOT?
- WHEN SHIRO WITH SPRING BOOT MAY BE REASONABLE
- IMPORTANT SECURITY NOTE
- WHY PATCH LEVELS MATTER MORE FOR SECURITY LIBRARIES
- A SIMPLE SHIRO MENTAL MODEL
- WHY SOME TEAMS LIKE SHIRO
- WHEN SPRING SECURITY IS THE BETTER DEFAULT
- TAKEAWAYS
Chapter 11 - MASTERING OAUTH 2.0 AND OPENID CONNECT WITH SPRING BOOT
- TLDR
- KEY POINT 1 - TURN A SPRING APP INTO AN OAUTH 2.0 RESOURCE SERVER
- CONFIGURE THE TOKEN ISSUER
- WHAT THE ISSUER URI REPRESENTS
- RESOURCE SERVER RESPONSIBILITY
- KEY POINT 2 - SECURE ENDPOINTS WITH ROUTE RULES
- METHOD-LEVEL SECURITY
- HOW SPRING MAPS SCOPES
- ROUTE SECURITY VS METHOD SECURITY
- KEY POINT 3 - OIDC LOGIN WITHOUT STORING PASSWORDS
- THE OIDC LOGIN FLOW
- WHERE THE PASSWORD LIVES
- OIDC CLIENT CONFIGURATION
- THE OPENID SCOPE
- ID TOKEN VS ACCESS TOKEN
- AUTHORIZATION CODE FLOW
- ACCESS THE LOGGED-IN USER
- WHAT OIDCUSER CONTAINS
- SESSION-BASED AUTHENTICATED USER
- OAUTH 2.0 VS OPENID CONNECT
- WHAT ABOUT PKCE?
- WHY PKCE MATTERS
- SPRING AND PKCE
- CLIENT SECRETS
- RESOURCE SERVER VS OIDC LOGIN
- AUTHORIZATION SERVER VS RESOURCE SERVER
- SIMPLE ARCHITECTURE FOR API SECURITY
- SIMPLE ARCHITECTURE FOR USER LOGIN
- THE BIG RESPONSIBILITY SPLIT
- TAKEAWAYS
Chapter 12 - OPENAPI 3.1 WITH SPRING BOOT 4: DOCUMENT YOUR API CONTRACT, NOT JUST YOUR CODE
- TLDR
- WHAT IS OPENAPI?
- OPENAPI IS A CONTRACT
- SPRINGDOC OPENAPI
- 1. ADD OPENAPI AND SWAGGER UI
- 2. DESCRIBE API METADATA
- 3. DOCUMENT AN ENDPOINT OPERATION
- TAGS HELP ORGANIZE OPERATIONS
- 4. DOCUMENT SCHEMAS WITH VALIDATION
- VALIDATION AND DOCUMENTATION SHOULD AGREE
- DTO AS CODE AND DOCUMENTATION
- 5. DOCUMENT RESPONSES CLEARLY
- WHY ERROR DOCUMENTATION MATTERS
- 6. DOCUMENT SECURITY
- OPENAPI DOES NOT SECURE THE API
- 7. SPLIT THE API INTO GROUPS
- ONE CODEBASE, MULTIPLE CONTRACTS
- OPENAPI VS SWAGGER
- GENERATED CONTRACTS ARE MACHINE-READABLE
- CODE-FIRST CONTRACT GENERATION
- THE CONTRACT CAN DRIFT
- WHAT TO DOCUMENT FIRST
- API CONTRACT VS IMPLEMENTATION
- A SIMPLE ARCHITECTURE
- WHY GOOD OPENAPI DOCUMENTATION MATTERS
- TAKEAWAYS
Chapter 13 - KEYCLOAK FOR JAVA DEVELOPERS: IDENTITY WITHOUT REINVENTING LOGIN
- TLDR
- WHAT IS KEYCLOAK?
- IDENTITY PROVIDER VS APPLICATION
- 1. PROTECT A SPRING BOOT API WITH KEYCLOAK TOKENS
- WHAT SPRING SECURITY VALIDATES
- AUTHENTICATION VS AUTHORIZATION
- 2. MAP KEYCLOAK ROLES TO SPRING SECURITY AUTHORITIES
- METHOD SECURITY
- 3. CREATE USERS WITH THE KEYCLOAK ADMIN CLIENT
- WHAT THE ADMIN API CAN AUTOMATE
- KEYCLOAK REALMS
- CLIENTS
- TOKENS
- OPENID CONNECT, OAUTH 2.0, AND SAML
- WHERE KEYCLOAK SITS ON THE TECH RADAR
- WHY KEYCLOAK IS INTERESTING
- CONTROL COMES WITH OPERATIONAL RESPONSIBILITY
- SPRING SECURITY VS KEYCLOAK
- THE COMMON ARCHITECTURE
- WHY NOT BUILD LOGIN YOURSELF?
- KEYCLOAK AS INFRASTRUCTURE
- WHEN KEYCLOAK IS A GOOD FIT
- WHEN A MANAGED SERVICE MAY BE BETTER
- TAKEAWAYS
Chapter 14 - JAVA 26 & 27: WHAT DEVELOPERS SHOULD REALLY WATCH
- TLDR
- LANGUAGE: PRIMITIVE PATTERNS GET MORE NATURAL
- WHY EXACT CONVERSION MATTERS
- LIBRARIES: MORE MODERN APIS FOR REAL USE CASES
- HTTP/3 FOR HTTPCLIENT
- PEM ENCODING AND DECODING
- STRUCTURED CONCURRENCY
- WHY STRUCTURE HELPS
- LAZY CONSTANTS
- PERFORMANCE: THE VECTOR API
- WHERE THE VECTOR API CAN HELP
- RUNTIME IMPROVEMENTS
- AOT OBJECT CACHING
- G1 IMPROVEMENTS
- COMPACT OBJECT HEADERS
- SECURITY: POST-QUANTUM TLS
- WHAT JAVA DEVELOPERS SHOULD UNDERSTAND
- POST-QUANTUM DOES NOT MEAN PERFECT SECURITY
- TOOLING: FINAL SHOULD REALLY MEAN FINAL
- WHY REFLECTIVE FINAL-FIELD MUTATION MATTERS
- DEVELOPER ACTION ITEMS FOR JEP 500
- PREVIEW AND INCUBATOR FEATURES
- A SIMPLE WAY TO GROUP THE CHANGES
- WHAT DEVELOPERS SHOULD REALLY WATCH
- THE BIGGER DIRECTION
- TAKEAWAYS
Chapter 15 - THE 12 LABOURS OF PRIMEFACES 15.0.15
- TLDR
- WHAT PRIMEFACES IS
- 1. SCHEDULE TOOLTIP ESCAPING
- 2. SCHEDULE TOOLTIP WITH TRUSTED HTML
- 3. SELECTONEMENU ACCESSIBILITY
- 4. PANEL TOGGLE HEADER BEHAVIOR
- 5. CONFIRM BEFORE SHOW CALLBACK
- 6. INPUTNUMBER AND AUTONUMERIC UPDATE
- 7. TEXTEDITOR PASTE CLEANUP
- 8. PANELMENU STATEFULNESS
- 9. AJAX ERROR HANDLING
- 10. BLOCKUI CLEANUP
- 11. AUTOCOMPLETE MORETEXT FIX
- 12. SLIDER PRECISION
- WHAT THIS RELEASE SAYS ABOUT PRIMEFACES
- WHY PRIMEFACES STILL MATTERS
- IMPORTANT CONCEPT FOR NEW DEVELOPERS
- TAKEAWAYS
Chapter 16 - PLUG JAVA INTO PGVECTOR
- TLDR
- WHAT IS A VECTOR HERE?
- WHAT IS PGVECTOR?
- DATABASE SETUP
- SPRING AI DEPENDENCIES
- APPLICATION CONFIGURATION
- ADD DOCUMENTS FROM JAVA
- SEARCH BY MEANING
- SIMPLE REST ENDPOINT
- HOW THE FULL FLOW WORKS
- WHY JAVA DEVELOPERS SHOULD CARE
- PGVECTOR AS A FOUNDATION FOR RAG
- WHY MODEL DIMENSION MATTERS
- INDEXING MATTERS TOO
- METADATA FILTERING
- PRODUCTION CONCERNS
- A SIMPLE MENTAL MODEL
- TAKEAWAYS
Chapter 17 - 10 JAVA RED FLAGS THAT REVEAL A BAD JAVA DEVELOPER
- TLDR
- 1. RELIES ON FRAMEWORK MAGIC WITHOUT UNDERSTANDING JAVA
- 2. STARTS CODING BEFORE CLARIFYING THE PROBLEM
- 3. OVERUSES PATTERNS FOR SIMPLE PROBLEMS
- 4. WRITES DENSE OR FLASHY CODE THAT NOBODY WANTS TO READ
- 5. CANNOT EXPLAIN TRADE-OFFS
- 6. BLAMES OTHERS OR “THE INFRA” FOR EVERY FAILURE
- 7. DISMISSES TESTING, CODE REVIEW, OR DOCUMENTATION
- 8. CONFUSES CONFIDENCE WITH COMPETENCE
- 9. REINVENTS WHAT JAVA ALREADY PROVIDES
- 10. IGNORES NULLS, EDGE CASES, AND FAILURE PATHS
- THE PATTERN BEHIND THE RED FLAGS
- WHAT GOOD JAVA DEVELOPERS DO DIFFERENTLY
- TAKEAWAYS
Chapter 18 - SPRING CLOUD STREAM: A PRACTICAL INTRO TO EVENT-DRIVEN APPS
- TLDR
- WHAT SPRING CLOUD STREAM REALLY IS
- PROS
- CONS
- CREATE A SIMPLE MESSAGE CONSUMER
- FUNCTIONAL BINDING NAMES
- BINDER SPI
- CHANGE THE BROKER, KEEP THE BUSINESS CODE
- BINDING API
- CONNECT A FUNCTION INPUT AND OUTPUT
- THE PUB/SUB MODEL
- PUBLISH ONE EVENT TO MULTIPLE APPLICATIONS
- SPRING KAFKA VS SPRING CLOUD STREAM
- WHEN TO CHOOSE SPRING KAFKA
- SPRING KAFKA EXAMPLE
- WHEN TO CHOOSE SPRING CLOUD STREAM
- SPRING CLOUD STREAM VERSION OF THE SAME CONSUMER
- THE PRACTICAL RULE OF THUMB
- ABSTRACTION DOES NOT REMOVE BROKER KNOWLEDGE
- TAKEAWAYS
Chapter 19 - SPRING BATCH VS @SCHEDULED: THEY DO NOT SOLVE THE SAME PROBLEM
- TLDR
- THE KEY DIFFERENCE
- WHEN @SCHEDULED IS ENOUGH
- WHEN SPRING BATCH IS THE RIGHT TOOL
- WHAT SPRING BATCH ADDS
- CHUNK PROCESSING
- RESTARTABILITY
- SKIP AND RETRY LOGIC
- THE COMMON MISTAKE
- THE IMPORTANT NUANCE
- USING BOTH TOGETHER
- SIMPLE DECISION GUIDE
- TAKEAWAYS
Chapter 20 - CLAWRUNR SHOWS WHAT A JAVA AI AGENT RUNTIME CAN LOOK LIKE
- TLDR
- WHY THIS PROJECT MATTERS
- WHAT JOBRUNR ACTUALLY IS
- WHY JOBRUNR CHANGES THE AGENT STORY
- RUNTIME-LOADED SKILLS
- MODEL PROVIDERS
- MCP CONNECTIVITY
- HOW CLAWRUNR DIFFERS FROM SPRING AI OR EMBABEL
- SPRING AI
- EMBABEL
- CLAWRUNR
- CLAWRUNR IS BUILT ON SPRING AI, NOT AGAINST IT
- A SIMPLIFIED CLAWRUNR ARCHITECTURE
- WHY RELIABLE SCHEDULING MATTERS FOR AGENTS
- LOCAL-FIRST EXECUTION
- TAKEAWAYS
Chapter 21 - SPRING WEB SERVICES: SPRING’S SOAP STACK, CLEARLY EXPLAINED
- TLDR
- SPRING-WS IN ONE SENTENCE
- WHEN TO THINK ABOUT SPRING-WS
- THE FOUR CORE BUILDING BLOCKS
- CODE SNIPPET 1 - THE XSD
- CODE SNIPPET 2 - THE ENDPOINT CLASS
- CODE SNIPPET 3 - DYNAMIC WSDL CONFIGURATION
- CODE SNIPPET 4 - WEBSERVICETEMPLATE
- WHY CONTRACT-FIRST MATTERS
- RELEASE CONTEXT - MARCH 2026
- TAKEAWAYS
Chapter 22 - JAKARTA AGENTIC AI: STANDARDIZING AI AGENTS FOR JAVA ENTERPRISE
- TLDR
- WHAT IS JAKARTA AGENTIC AI?
- WHY THIS MATTERS FOR JAVA DEVELOPERS
- HOW AN AGENT WORKFLOW LOOKS
- THE CORE ANNOTATIONS
- LLM INTEGRATION WITHOUT LOCK-IN
- INTEGRATION WITH THE JAKARTA STACK
- TAKEAWAYS
Chapter 23 - SKINNY JAR VS FAT JAR: REDUCING REPEATED DEPENDENCY TRANSFERS
- TLDR
- WHAT IS A FAT JAR?
- THE LIMITATION OF FAT JARS
- WHAT IS A SKINNY JAR?
- WHY SOME TEAMS PREFER SKINNY JARS
- FAT JAR VS SKINNY JAR
- TOOLS THAT SUPPORT THIS APPROACH
- DEPLOYMENT MENTAL MODEL
- TAKEAWAYS
Chapter 24 - SERVLET DEVELOPMENT: THE FOUNDATIONS OF JAVA WEB APPLICATIONS
- TLDR
- WRITING A SERVLET
- REQUEST FORWARDING VS RESPONSE REDIRECTION
- REQUEST FORWARDING
- RESPONSE REDIRECTION
- PERSISTING DATA ACROSS REQUESTS
- COMMON PERSISTENCE SCOPES
- SERVLET FILTERS
- SERVLET LISTENERS
- TAKEAWAYS
Chapter 25 - SPRING CLOUD (WITHOUT THE HYPE)
- TLDR
- DEFINE SPRING CLOUD
- SPRING VS SPRING BOOT VS SPRING CLOUD
- PROS
- CONS
- RELEASE CONTEXT - JUNE 2026
- MINI SPRING CLOUD SETUP
- 1. CONFIG SERVER
- 2. CONFIG CLIENT
- 3. API GATEWAY
- BOM: DEPENDENCY MANAGEMENT
- SPRING CLOUD FEATURES
- TAKEAWAYS
Chapter 26 - RESTFUL WEB SERVICES WITH JAX-RS (JAKARTA REST)
- TLDR
- SIMPLE RESTFUL WEB SERVICE
- CONVERTING DATA BETWEEN JAVA AND XML WITH JAXB
- RESTFUL WEB SERVICE CLIENT
- QUERY AND PATH PARAMETERS
- SERVER-SENT EVENTS
- SSE SERVER
- SSE CLIENT
- TAKEAWAYS
Chapter 27 - JAVA VS CLOJURE: SAME JVM, VERY DIFFERENT MINDSET
- TLDR
- HELLO WORLD: TASTE THE SYNTAX
- DATA MODELING: CLASSES VS PLAIN DATA
- TRANSFORMATIONS: STREAMS VS SEQUENCES
- IMMUTABILITY: OPTIONAL VS DEFAULT
- CONCURRENCY: LOCKS/THREADS VS REDUCED SHARED MUTABLE STATE
- INTEROP: CLOJURE CALLS JAVA
- WHERE JAVA SHINES
- WHERE CLOJURE SHINES
- TAKEAWAYS
Chapter 28 - SECURING JAKARTA EE APPLICATIONS: IDENTITY STORES + AUTH MECHANISMS
- TLDR
- THE TWO BUILDING BLOCKS
- IDENTITY STORES: DATABASE
- IDENTITY STORES: LDAP DIRECTORY
- IDENTITY STORES: CUSTOM
- AUTHENTICATION MECHANISMS: BASIC
- AUTHENTICATION MECHANISMS: FORM
- CUSTOM FORM AUTHENTICATION
- TAKEAWAYS
Chapter 29 - JAKARTA MESSAGING (JMS) - QUEUES VS TOPICS
- TLDR
- CONTEXT: WHAT JMS IS, WITHOUT THE HYPE
- MESSAGE QUEUES: POINT-TO-POINT
- MESSAGE TOPICS: PUBLISH / SUBSCRIBE
- QUEUE VS TOPIC
- DURABLE SUBSCRIPTIONS
- TAKEAWAYS
Chapter 30 - JAKARTA EE WEBSOCKET: REAL-TIME SERVER + JAVA CLIENT (NO MAGIC, JUST API)
- TLDR
- WHY WEBSOCKETS?
- DEVELOPING AN ANNOTATED WEBSOCKET SERVER ENDPOINT
- DEVELOPING WEBSOCKET CLIENTS IN JAVA
- TYRUS: EXTRA TOOLING AND IMPLEMENTATION FEATURES
- TAKEAWAYS
Chapter 31 - STRATEGIC DDD: ALIGN BUSINESS + SOFTWARE (WITHOUT OVERCOMPLICATING IT)
- TLDR
- WHAT IS “STRATEGIC DDD” (IN ONE LINE)
- HOW TO APPROACH IT
- WHAT YOU GET OUT OF IT
- DOMAINS & SUBDOMAINS
- BOUNDED CONTEXTS: THE GAME CHANGER
- HOW CONTEXTS TALK
- BUSINESS NEEDS ANSWERS
- TAKEAWAYS
Chapter 32 - OBJECT-RELATIONAL MAPPING (ORM) WITH JPA / JAKARTA PERSISTENCE
- TLDR
- DEFINE ORM + JPA
- ENTITY RELATIONSHIPS (THE BIG 3)
- COMPOSITE PRIMARY KEYS (WHEN 1 COLUMN IS NOT ENOUGH)
- JPQL (QUERY THE MODEL, NOT THE TABLES)
- CRITERIA API (TYPE-SAFE… BUT VERBOSE)
- BEAN VALIDATION SUPPORT (VALIDATE BEFORE YOU HIT THE DB)
- TAKEAWAYS
Chapter 33 - AFTER JAVA FULLSTACK: from building features to engineering systems
- TLDR
- THE STARTING POINT: SOLID JAVA FOUNDATIONS
- THEN COMES THE JAVA FULLSTACK JOURNEY
- FULLSTACK GIVES BREADTH
- WHAT COMES AFTER FULLSTACK?
- THE NEXT STEP IS ENGINEERING DEPTH
- FROM FEATURE CORRECTNESS TO SYSTEM RELIABILITY
- DISTRIBUTED SYSTEMS CHANGE THE RULES
- CONSISTENCY BECOMES A DESIGN DECISION
- RESILIENCE BECOMES PART OF APPLICATION DESIGN
- OBSERVABILITY BECOMES ESSENTIAL
- SECURITY BECOMES SYSTEMIC
- PERFORMANCE IS MORE THAN FAST CODE
- CLOUD COST IS ALSO AN ENGINEERING CONCERN
- THE NEXT STEP IS ARCHITECTURAL JUDGMENT
- WHEN A MODULAR MONOLITH IS ENOUGH
- WHEN ASYNCHRONOUS COMMUNICATION ADDS VALUE
- WHEN EVENTUAL CONSISTENCY IS ACCEPTABLE
- COMPLEXITY HAS A COST
- ARCHITECTURE IS ABOUT TRADE-OFFS
- THE NEXT STEP IS DOMAIN UNDERSTANDING
- UNDERSTAND THE BUSINESS DOMAIN
- USERS HAVE CONSTRAINTS
- CRITICAL WORKFLOWS DESERVE SPECIAL ATTENTION
- THE COST OF FAILURE CHANGES DESIGN
- CONNECT CODE TO BUSINESS VALUE
- THE NEXT STEP IS ORGANIZATIONAL IMPACT
- FROM PERSONAL OUTPUT TO TEAM OUTPUT
- IMPROVE ENGINEERING STANDARDS
- MENTORING MULTIPLIES KNOWLEDGE
- SIMPLIFY DEVELOPMENT WORKFLOWS
- REDUCE RECURRING INCIDENTS
- HELP TEAMS MAKE BETTER DECISIONS
- CREATE PLATFORMS THAT MULTIPLY PRODUCTIVITY
- POSSIBLE CAREER DIRECTIONS
- TECH LEAD
- SOFTWARE ARCHITECT
- PLATFORM ENGINEER
- STAFF OR PRINCIPAL ENGINEER
- ENGINEERING MANAGER
- DIFFERENT PATHS, NOT ONE LADDER
- FROM FEATURES TO SYSTEMS
- FROM SYSTEMS TO OUTCOMES
- A SIMPLE MATURITY MODEL
- WHAT “SENIOR” REALLY STARTS TO MEAN
- KNOWING EVERYTHING IS NOT THE GOAL
- TAKEAWAYS
Chapter 34 - GO FURTHER WITH JAVA AND SPRING
- JAVA CERTIFICATION
- SPRING CERTIFICATION
- SPRING STUDY GUIDE
- JAVA DEVELOPER ROADMAP
- HOW TO USE THESE RESOURCES
- KEEP BUILDING
- RESOURCES
- FINAL WORD