pivotal certified spring enterprise integration specialist...
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 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.