pivotal certified spring enterprise integration specialist...

15
Covers Spring Boot

Upload: lyngoc

Post on 30-Aug-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

Krnac

Shelve in:Programming Languages/Java

User level:Intermediate–Advanced

www.apress.com

RELATED

BOOKS FOR PROFESSIONALS BY PROFESSIONALS®

Pivotal Certified Spring Enterprise Integration Specialist ExamThe Pivotal Certified Spring Enterprise Integration Specialist Exam study guide will go over enterprise integration and related fundamentals and scenarios and prepare you for what’s asked on the official exam when you take it. Exam topics covered include remoting, web services, RESTful services, JMS with Spring, transactions, batch processing with Spring Batch and Spring Integration.

When you become Pivotal Certified, you will have one of the most valuable credentials in Java. The demand for Spring skills is skyrocketing. Pivotal certification helps you advance your skills and your career, and get the maximum benefit from Spring. Earning a Pivotal Certified Enterprise Integration Specialist designation demonstrates your understanding of Spring.

• How to use Spring to create concurrent applications and schedule tasks• How to do remoting to implement client-server applications• How to work with Spring Web services to create loosely coupled Web services

and clients• How to use Spring MVC to create RESTful Web services and clients• How to integrate JMS for asynchronous messaging-based communication• How to use local and distributed transactions• How to use Spring Integration to create event-driven pipes-and-filters

architectures and integrate with external applications• How to use Spring Batch for managed, scalable batch processing that is

based on both custom and built-in processing components

SOURCE CODE ONLINE 9 781484 207949

54999ISBN 978-1-4842-0794-9

Covers Spring Boot

Pivotal Certified Spring Enterprise Integration

Specialist ExamA Study Guide

Lubos Krnac

Pivotal Certified Spring Enterprise Integration Specialist Exam

Copyright © 2015 by Lubos Krnac

This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Exempted from this legal reservation are brief excerpts in connection with reviews or scholarly analysis or material supplied specifically for the purpose of being entered and executed on a computer system, for exclusive use by the purchaser of the work. Duplication of this publication or parts thereof is permitted only under the provisions of the Copyright Law of the Publisher's location, in its current version, and permission for use must always be obtained from Springer. Permissions for use may be obtained through RightsLink at the Copyright Clearance Center. Violations are liable to prosecution under the respective Copyright Law.

ISBN-13 (pbk): 978-1-4842-0794-9

ISBN-13 (electronic): 978-1-4842-0793-2

Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image, we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark.

The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights.

While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material contained herein.

Managing Director: Welmoed SpahrLead Editor: Steve AnglinTechnical Reviewer: Manuel Jordan EleraEditorial Board: Steve Anglin, Louise Corrigan, Jonathan Gennick, Robert Hutchinson,

Michelle Lowman, James Markham, Susan McDermott, Matthew Moodie, Jeffrey Pepper, Douglas Pundick, Ben Renow-Clarke, Gwenan Spearing

Coordinating Editor: Mark PowersCopy Editor: Sharon WilkeyCompositor: SPi GlobalIndexer: SPi Global Artist: SPi GlobalCover Designer: Anna Ishchenko

Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail [email protected], or visit www.springeronline.com. Apress Media LLC is a California LLC and the sole member (owner) is Springer Science+Business Media Finance Inc. (SSBM Finance Inc.). SSBM Finance Inc. is a Delaware corporation.

For information on translations, please e-mail [email protected], or visit www.apress.com.

Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Special Bulk Sales–eBook Licensing web page at www.apress.com/bulk-sales.

Any source code or other supplementary materials referenced by the author in this text is available to readers at www.apress.com/9781484207949. For detailed information about how to locate your book’s source code, go to www.apress.com/source-code/. Readers can also access source code at SpringerLink in the Supplementary Material section for each chapter.

iii

Contents at a Glance

About the Author �����������������������������������������������������������������������������������������������������xv

About the Technical Reviewer �������������������������������������������������������������������������������xvii

Acknowledgments ��������������������������������������������������������������������������������������������������xix

Introduction ������������������������������������������������������������������������������������������������������������xxi

■Chapter 1: Tasks and Scheduling �������������������������������������������������������������������������� 1

■Chapter 2: Remoting �������������������������������������������������������������������������������������������� 25

■Chapter 3: Web Services �������������������������������������������������������������������������������������� 45

■Chapter 4: RESTful Web Services ������������������������������������������������������������������������ 89

■Chapter 5: Java Message Service ��������������������������������������������������������������������� 159

■Chapter 6: JMS Transactions ����������������������������������������������������������������������������� 209

■Chapter 7: Distributed Transactions ������������������������������������������������������������������ 251

■Chapter 8: Spring Integration ���������������������������������������������������������������������������� 273

■Chapter 9: Spring Batch ������������������������������������������������������������������������������������ 381

Index ��������������������������������������������������������������������������������������������������������������������� 515

v

Contents

About the Author �����������������������������������������������������������������������������������������������������xv

About the Technical Reviewer �������������������������������������������������������������������������������xvii

Acknowledgments ��������������������������������������������������������������������������������������������������xix

Introduction ������������������������������������������������������������������������������������������������������������xxi

■Chapter 1: Tasks and Scheduling �������������������������������������������������������������������������� 1

Multithreading in Java ������������������������������������������������������������������������������������������������������ 2

Java SE ��������������������������������������������������������������������������������������������������������������������������������������������������� 2

Java EE ��������������������������������������������������������������������������������������������������������������������������������������������������� 9

Task Scheduling ����������������������������������������������������������������������������������������������������������������������������������� 10

Multithreading with Spring ��������������������������������������������������������������������������������������������� 12

org�springframework�core�task�TaskExecutor �������������������������������������������������������������������������������������� 13

org�springframework�scheduling�Trigger ���������������������������������������������������������������������������������������������� 14

Task Scheduler ������������������������������������������������������������������������������������������������������������������������������������� 14

Configuring Asynchronous Tasks ���������������������������������������������������������������������������������������������������������� 15

Configuring Scheduled Tasks ��������������������������������������������������������������������������������������������������������������� 21

Summary ������������������������������������������������������������������������������������������������������������������������ 24

■Chapter 2: Remoting �������������������������������������������������������������������������������������������� 25

Remote Method Invocation��������������������������������������������������������������������������������������������� 26

Spring RMI Support ������������������������������������������������������������������������������������������������������������������������������ 29

Spring RMI Summary���������������������������������������������������������������������������������������������������������������������������� 33

vi

■ Contents

Spring HttpInvoker ��������������������������������������������������������������������������������������������������������� 34

HttpInvoker Served via HttpRequestHandlerServlet ����������������������������������������������������������������������������� 35

HttpInvoker Served via DispatcherServlet �������������������������������������������������������������������������������������������� 38

HttpInvoker Served via Simple Java HTTP Server �������������������������������������������������������������������������������� 39

HttpInvoker Service Accessed from Client ������������������������������������������������������������������������������������������� 41

Summary ������������������������������������������������������������������������������������������������������������������������ 43

■Chapter 3: Web Services �������������������������������������������������������������������������������������� 45

Introduction to Web Services ����������������������������������������������������������������������������������������� 45

Java Web Services ��������������������������������������������������������������������������������������������������������� 46

Spring Web Services ������������������������������������������������������������������������������������������������������ 48

Contract Creation ���������������������������������������������������������������������������������������������������������������������������������� 49

Endpoint Mapping ��������������������������������������������������������������������������������������������������������������������������������� 52

JAXB 2 Endpoint-Mapping Example ����������������������������������������������������������������������������������������������������� 54

Spring Context Configuration ����������������������������������������������������������������������������������������� 60

Transports ���������������������������������������������������������������������������������������������������������������������� 63

HTTP/HTTPS ������������������������������������������������������������������������������������������������������������������������������������������ 63

JMS������������������������������������������������������������������������������������������������������������������������������������������������������� 63

E-mail �������������������������������������������������������������������������������������������������������������������������������������������������� 63

XMPP ��������������������������������������������������������������������������������������������������������������������������������������������������� 64

Servlet Transports ��������������������������������������������������������������������������������������������������������������������������������� 64

Web Service Client ��������������������������������������������������������������������������������������������������������� 67

Intercepting Messages ��������������������������������������������������������������������������������������������������� 73

Server-Side Interception ����������������������������������������������������������������������������������������������������������������������� 74

Client-Side Interception ������������������������������������������������������������������������������������������������������������������������ 78

Error Handling ���������������������������������������������������������������������������������������������������������������� 80

Server-Side Error Handling ������������������������������������������������������������������������������������������������������������������� 80

Client-Side Error Handling �������������������������������������������������������������������������������������������������������������������� 83

Out-of-Container Testing ������������������������������������������������������������������������������������������������ 84

Server-Side Testing Support ����������������������������������������������������������������������������������������������������������������� 84

Client-Side Testing Support ������������������������������������������������������������������������������������������������������������������ 86

Summary ������������������������������������������������������������������������������������������������������������������������ 87

vii

■ Contents

■Chapter 4: RESTful Web Services ������������������������������������������������������������������������ 89

REST Principles �������������������������������������������������������������������������������������������������������������� 90

Client/Server Separation ���������������������������������������������������������������������������������������������������������������������� 90

CRUD Operations ���������������������������������������������������������������������������������������������������������������������������������� 90

Uniform Interface ���������������������������������������������������������������������������������������������������������������������������������� 90

Statelessness ��������������������������������������������������������������������������������������������������������������������������������������� 91

Layered Architecture ���������������������������������������������������������������������������������������������������������������������������� 92

HATEOAS ����������������������������������������������������������������������������������������������������������������������������������������������� 92

Cacheability ������������������������������������������������������������������������������������������������������������������������������������������ 92

Flexibility ���������������������������������������������������������������������������������������������������������������������������������������������� 92

HTTP Overview ��������������������������������������������������������������������������������������������������������������� 93

HTTP Methods Used by REST ����������������������������������������������������������������������������������������� 95

JAX-RS ��������������������������������������������������������������������������������������������������������������������������� 98

JAX-RS Implementations ���������������������������������������������������������������������������������������������������������������������� 98

JAX-RS API �������������������������������������������������������������������������������������������������������������������������������������������� 98

Common Classes Used in Examples ����������������������������������������������������������������������������������������������������� 99

JAX-RS Endpoint ��������������������������������������������������������������������������������������������������������������������������������� 103

Spring MVC ������������������������������������������������������������������������������������������������������������������� 110

Configuring Spring MVC for REST ������������������������������������������������������������������������������������������������������� 111

Spring MVC Mappings ������������������������������������������������������������������������������������������������������������������������ 115

Lower-level Abstraction Injection ������������������������������������������������������������������������������������������������������� 117

String MVC CRUD Example ����������������������������������������������������������������������������������������������������������������� 118

@RestController Example ������������������������������������������������������������������������������������������������������������������� 125

Spring MVC REST with Headers and Query Parameters ��������������������������������������������������������������������� 127

Testing Spring MVC REST APIs ������������������������������������������������������������������������������������� 130

perform ����������������������������������������������������������������������������������������������������������������������������������������������� 130

andExpect ������������������������������������������������������������������������������������������������������������������������������������������� 130

andReturn ������������������������������������������������������������������������������������������������������������������������������������������� 131

andDo ������������������������������������������������������������������������������������������������������������������������������������������������� 131

viii

■ Contents

MockMvc Instance Creation ��������������������������������������������������������������������������������������������������������������� 131

MockMvc Integration Test Example ���������������������������������������������������������������������������������������������������� 131

MockMvc Unit Test Example ��������������������������������������������������������������������������������������������������������������� 137

Consuming REST ���������������������������������������������������������������������������������������������������������� 142

Custom Error Handler ������������������������������������������������������������������������������������������������������������������������� 145

Client-Side Testing ������������������������������������������������������������������������������������������������������� 147

Consuming REST Asynchronously �������������������������������������������������������������������������������� 153

Summary ���������������������������������������������������������������������������������������������������������������������� 158

■Chapter 5: Java Message Service ��������������������������������������������������������������������� 159

JMS Standard Overview ����������������������������������������������������������������������������������������������� 160

Java JMS API ���������������������������������������������������������������������������������������������������������������� 161

JMS Message ������������������������������������������������������������������������������������������������������������������������������������� 162

JMS Infrastructure Abstractions ��������������������������������������������������������������������������������������������������������� 162

Java JMS Examples ����������������������������������������������������������������������������������������������������� 163

Synchronous JMS 1�1 Example ���������������������������������������������������������������������������������������������������������������������� 164

Synchronous JMS 2�0 Example ���������������������������������������������������������������������������������������������������������� 168

Asynchronous JMS Example �������������������������������������������������������������������������������������������������������������� 171

Spring JMS ������������������������������������������������������������������������������������������������������������������� 174

Configuring Spring JMS ���������������������������������������������������������������������������������������������������������������������� 175

Caching JMS Resources ��������������������������������������������������������������������������������������������������������������������� 179

Using JmsTemplate ���������������������������������������������������������������������������������������������������������������������������� 181

Using the MessageCreator Callback ��������������������������������������������������������������������������������������������������� 185

Listening to JMS Messages ���������������������������������������������������������������������������������������������������������������� 187

Converting JMS Messages ����������������������������������������������������������������������������������������������������������������� 192

Using the Publish/Subscribe JMS Model �������������������������������������������������������������������������������������������� 203

Integrating JMS with Higher-Level Messaging Abstractions �������������������������������������������������������������� 206

Summary ���������������������������������������������������������������������������������������������������������������������� 208

ix

■ Contents

■Chapter 6: JMS Transactions ����������������������������������������������������������������������������� 209

JMS Reliability Mechanisms ���������������������������������������������������������������������������������������� 209

Java JMS Transaction Examples ���������������������������������������������������������������������������������� 210

Common Classes for Spring JMS Examples����������������������������������������������������������������� 219

AUTO_ACKNOWLEDGE Mode ���������������������������������������������������������������������������������������� 222

Success Scenario ������������������������������������������������������������������������������������������������������������������������������� 224

Lost Message with Listener ���������������������������������������������������������������������������������������������������������������� 225

Lost Message with Synchronous Reception ��������������������������������������������������������������������������������������� 227

CLIENT_ACKNOWLEDGE Mode ������������������������������������������������������������������������������������� 229

Success Scenario ������������������������������������������������������������������������������������������������������������������������������� 230

Duplicate Message Scenario �������������������������������������������������������������������������������������������������������������� 232

DUPS_OK_ACKNOWLEDGE Mode ��������������������������������������������������������������������������������� 234

Local JMS Transactions with Spring ���������������������������������������������������������������������������� 235

Success Scenario ������������������������������������������������������������������������������������������������������������������������������� 236

Duplicate Message Scenario �������������������������������������������������������������������������������������������������������������� 238

JmsTransactionManager ���������������������������������������������������������������������������������������������� 241

Handling Duplicates ����������������������������������������������������������������������������������������������������� 244

Summary ���������������������������������������������������������������������������������������������������������������������� 249

■Chapter 7: Distributed Transactions ������������������������������������������������������������������ 251

Understanding Distributed Transactions ���������������������������������������������������������������������� 251

Cons of Distributed Transactions ���������������������������������������������������������������������������������� 254

Distributed Transactions with Spring ��������������������������������������������������������������������������� 254

Common Classes for JTA Examples���������������������������������������������������������������������������������������������������� 255

Spring JTA Example with XML Configuration ������������������������������������������������������������������������������������� 258

Spring JTA Example with Java Configuration ������������������������������������������������������������������������������������� 266

Spring Boot JTA Example�������������������������������������������������������������������������������������������������������������������� 270

Summary ���������������������������������������������������������������������������������������������������������������������� 271

x

■ Contents

■Chapter 8: Spring Integration ���������������������������������������������������������������������������� 273

Spring Integration Introduction ������������������������������������������������������������������������������������ 274

Spring Integration’s Main Concepts ����������������������������������������������������������������������������� 275

Common Classes Used in SI Examples ������������������������������������������������������������������������ 275

Message ����������������������������������������������������������������������������������������������������������������������� 277

Programmatic Creation of Messages ������������������������������������������������������������������������������������������������� 278

Parsing Message Headers ������������������������������������������������������������������������������������������������������������������ 281

Message Endpoint �������������������������������������������������������������������������������������������������������� 283

Message Endpoint Types �������������������������������������������������������������������������������������������������������������������� 283

List of Message Endpoints ������������������������������������������������������������������������������������������������������������������ 284

Channel Adapter ��������������������������������������������������������������������������������������������������������������������������������� 285

Service Activator ��������������������������������������������������������������������������������������������������������������������������������� 294

Messaging Gateway ��������������������������������������������������������������������������������������������������������������������������� 298

Transformer ���������������������������������������������������������������������������������������������������������������������������������������� 303

Content Enricher ��������������������������������������������������������������������������������������������������������������������������������� 311

Filter ��������������������������������������������������������������������������������������������������������������������������������������������������� 314

Router ������������������������������������������������������������������������������������������������������������������������������������������������� 320

Bridge ������������������������������������������������������������������������������������������������������������������������������������������������� 329

Chain��������������������������������������������������������������������������������������������������������������������������������������������������� 334

Splitter ������������������������������������������������������������������������������������������������������������������������������������������������ 335

Aggregator ������������������������������������������������������������������������������������������������������������������������������������������ 340

Message Channel ��������������������������������������������������������������������������������������������������������� 349

DirectChannel ������������������������������������������������������������������������������������������������������������������������������������� 351

QueueChannel ������������������������������������������������������������������������������������������������������������������������������������ 351

PriorityChannel ����������������������������������������������������������������������������������������������������������������������������������� 352

RendezvousChannel ��������������������������������������������������������������������������������������������������������������������������� 354

ExecutorChannel ��������������������������������������������������������������������������������������������������������������������������������� 356

PublishSubscribeChannel ������������������������������������������������������������������������������������������������������������������� 357

NullChannel ���������������������������������������������������������������������������������������������������������������������������������������� 359

Channel Interceptor ���������������������������������������������������������������������������������������������������������������������������� 359

Wire Tap ���������������������������������������������������������������������������������������������������������������������������������������������� 362

xi

■ Contents

Error Handling �������������������������������������������������������������������������������������������������������������� 364

Custom Class in Error-Handling Examples ����������������������������������������������������������������������������������������� 365

Synchronous Error Propagation Example ������������������������������������������������������������������������������������������� 365

Asynchronous Bidirectional Flow ������������������������������������������������������������������������������������������������������� 367

Asynchronous Unidirectional Flow ����������������������������������������������������������������������������������������������������� 368

Global Error Handler Overriding ���������������������������������������������������������������������������������������������������������� 370

Custom Error Channel Example ���������������������������������������������������������������������������������������������������������� 370

Transaction Handling ���������������������������������������������������������������������������������������������������� 372

Transaction Propagation Example ������������������������������������������������������������������������������������������������������ 372

Transacted Polling Example ���������������������������������������������������������������������������������������������������������������� 375

MessagingTemplate ����������������������������������������������������������������������������������������������������� 377

MessagingTemplate Example ������������������������������������������������������������������������������������������������������������� 377

Summary ���������������������������������������������������������������������������������������������������������������������� 378

■Chapter 9: Spring Batch ������������������������������������������������������������������������������������ 381

Spring Batch Domain ��������������������������������������������������������������������������������������������������� 381

Chunk-Oriented Processing ����������������������������������������������������������������������������������������� 382

Common Classes for Chunk-Oriented Processing Examples�������������������������������������������������������������� 383

Chunk-Oriented Processing Example with XML Configuration ����������������������������������������������������������� 386

Chunk-Oriented Processing Example with Java Configuration ���������������������������������������������������������� 389

Example with File Reader and JDBC Writer ���������������������������������������������������������������������������������������� 390

Tasklet Step ������������������������������������������������������������������������������������������������������������������ 394

Common Classes for Tasklet Examples ���������������������������������������������������������������������������������������������� 394

Tasklet Step Example with XML Configuration ����������������������������������������������������������������������������������� 395

Tasklet Step Example with Java Configuration ����������������������������������������������������������������������������������� 398

JobLauncher ����������������������������������������������������������������������������������������������������������������� 400

JobLauncher Example with XML Configuration ���������������������������������������������������������������������������������� 400

JobLauncher Example with Java Configuration ��������������������������������������������������������������������������������� 402

Asynchronous JobLauncher Example ������������������������������������������������������������������������������������������������� 404

xii

■ Contents

JobParameters ������������������������������������������������������������������������������������������������������������� 406

CommandLineJobRunner ��������������������������������������������������������������������������������������������� 410

Execute Thin JAR from the Command Line ���������������������������������������������������������������������������������������� 410

Execute Fat Spring Boot JAR from the Command Line ���������������������������������������������������������������������� 411

Execute XML Job from the Command Line ����������������������������������������������������������������������������������������� 411

Execute Job with Parameters from the Command Line ��������������������������������������������������������������������� 412

JobRepository �������������������������������������������������������������������������������������������������������������� 415

Configuring JobRepository with XML Configuration ��������������������������������������������������������������������������� 416

Configuring JobRepository with Java Configuration��������������������������������������������������������������������������� 418

Stateful Job and Step Execution ���������������������������������������������������������������������������������� 420

ExecutionContext �������������������������������������������������������������������������������������������������������������������������������� 420

Batch Scopes �������������������������������������������������������������������������������������������������������������������������������������� 427

Batch-Processing Listeners ����������������������������������������������������������������������������������������� 437

XML Configuration of Job Interception Example ��������������������������������������������������������������������������������� 438

Java Configuration of Job Interception Example �������������������������������������������������������������������������������� 440

XML Configuration of Step Interception Example ������������������������������������������������������������������������������� 442

Java Configuration of Step Interception example ������������������������������������������������������������������������������� 444

XML Configuration of Chunk-Oriented Processing Listeners �������������������������������������������������������������� 446

Java Configuration of Chunk-Oriented Processing Listeners ������������������������������������������������������������� 454

ItemStream ������������������������������������������������������������������������������������������������������������������� 455

XML Example of ItemStream Usage ��������������������������������������������������������������������������������������������������� 456

Java Configuration Example of ItemStream Usage ���������������������������������������������������������������������������� 460

Job and Step Inheritance ��������������������������������������������������������������������������������������������� 461

Configuring Restart ������������������������������������������������������������������������������������������������������ 463

XML Configuration Example of Step Restart ��������������������������������������������������������������������������������������� 463

Java Configuration Example of Step Restart �������������������������������������������������������������������������������������� 466

Control Repeat of Step Execution ��������������������������������������������������������������������������������� 468

Reacting to Failures ����������������������������������������������������������������������������������������������������� 471

XML Configuration of Skip and SkipListener �������������������������������������������������������������������������������������� 471

Java Configuration of Skip and SkipListener �������������������������������������������������������������������������������������� 475

xiii

■ Contents

XML Configuration of Retry ����������������������������������������������������������������������������������������������������������������� 476

Java Configuration of Retry ���������������������������������������������������������������������������������������������������������������� 478

Conditional Execution of Step �������������������������������������������������������������������������������������� 479

XML Configuration of Step Decision ��������������������������������������������������������������������������������������������������� 479

Java Configuration of Step Decision ��������������������������������������������������������������������������������������������������� 482

Scaling and Parallel Processing ����������������������������������������������������������������������������������� 484

Multithreaded Step ����������������������������������������������������������������������������������������������������������������������������� 484

Parallel Steps �������������������������������������������������������������������������������������������������������������������������������������� 487

Remote Chunking of Step ������������������������������������������������������������������������������������������������������������������� 491

Partitioning a Step ������������������������������������������������������������������������������������������������������������������������������ 497

Spring Batch Admin ������������������������������������������������������������������������������������������������������ 508

Summary ���������������������������������������������������������������������������������������������������������������������� 514

Index ��������������������������������������������������������������������������������������������������������������������� 515

xv

About the Author

I started my career as an embedded software developer, and these capabilities were also the focus of my studies. But soon I changed to Java and Spring development. I worked hard for nearly seven years on web and enterprise projects of various sizes and domains. I gained Spring Enterprise Integration Specialist certification in 2014.

I am naturally amazed by the Spring ecosystem; reinventing the wheel is not an option for me. A huge passion of mine is automation and testing. I am lazy and strongly believe that developers shouldn’t be doing repetitive tasks. That is why the examples for this book (https://github.com/lkrnac/book-eiws-code-samples) are all covered by tests. One of the reasons that Spring is my framework of choice is its testability.

I write blog posts on my site, www.lkrnac.net, that are often republished on DZone, Java Code Geeks, and Web Code Geeks. I am also

interested in modern JavaScript development: ES6, Node.js, Grunt, Gulp, LoopBack, and AngularJS. My Twitter handle is @luboskrnac and my e-mail address is [email protected].

xvii

About the Technical Reviewer

Manuel Jordan Elera is an autodidactic developer and researcher who enjoys learning new technologies for his own experiments and creating new integrations.

Manuel won the 2010 Springy Award—Community Champion and Spring Champion 2013. In his little free time, he reads the Bible and composes music on his guitar. Manuel is known as dr_pompeii. He has tech reviewed numerous books for Apress, including Pro Spring, Fourth Edition (2014); Practical Spring LDAP (2013); Pro JPA 2, Second Edition (2013); and Pro Spring Security (2013).

Read his 13 detailed tutorials about many Spring technologies and contact him through his blog at www.manueljordanelera.blogspot.com. You can also follow him on his Twitter account, @dr_pompeii.