Simplicity is the ultimate sophistication.

Leonardo DaVinci

Software development for the modern Web continues to evolve at a furious pace. In recent years we’ve seen the trend of client-side state move to the server, only to correct itself back again. Despite JavaScript’s obvious utility, two engineers are likely to yield three opinions regarding its worthiness. HTML5 ushers an armada of rich-media and concurrency support right into the browser. The proven, 40-year-old relational data model has fallen out of vogue to defiant NoSQL systems, and our version-control stores have undergone both implementation and paradigm overhauls.

Our tools constitute an ever-changing buffet of prescriptions, and sorting through the array of options presents a dizzying exercise.

In the meantime, engineers face the same central challenges raised by building any multiuser program; we like our code elegant and maintainable. We need it to run efficiently and securely. We must assert its correctness.

In the Java space, many answers have come from a set of specifications released under the heading of the Java Enterprise Edition. The overarching goal of this effort remains: hide away the syntactic complexity inherent in software development, and attempt to provide a clean standard model upon which to build. In other words, the Java EE Platform comprises an evolving toolkit, and a fallible one at that.

So a few years back we set out to fill some of the holes left unspecified by Java EE, and ended up holding the reins to a test framework that inspired our imaginations and proved more versatile than initially envisioned. In fleshing out ideas to best share the lessons we’d learned, it became clear that we didn’t need to document any particular technology. Developers have been missing a cohesive map to navigate the murky waters of Java EE, its adjacent frameworks, and its services.

This text does not detail a singular specification. Those volumes may be found elsewhere, because we’ve found it makes little sense to begin our learning with the Solutions.

Instead, let’s align our start with the Problems. We’ll take a use-case–centric approach to the testable development of enterprise Java, and after a bit of exploratory theory and requisite background, each chapter will tackle a single high-level issue. The solutions we propose may span from the user interface to persistent storage, touching upon a number of standards or third-party projects along the way. All examples are executable, and as proof run in production on the companion website.

The newbie should expect to meet the players in an enterprise Java system, and bring a blank repository from scratch to a fully deployed, live public application on the cloud. Coders of all stripes may find appealing approaches to testing against seed data, pushing events to the client, interacting with a distributed data grid, validating the user interface, and more.

Quite simply, we’ll aim to make the complicated much less so. With luck, this will empower greater productivity and enjoyment in your work.

At least, that’s been our experience while employing the techniques that inspired this book.

Conventions Used in This Book

The following typographical conventions are used in this book:

Indicates new terms, URLs, email addresses, filenames, and file extensions.
Constant width
Used for program listings, as well as within paragraphs to refer to program elements such as variable or function names, databases, data types, environment variables, statements, and keywords.
Constant width bold
Shows commands or other text that should be typed literally by the user.
Constant width italic
Shows text that should be replaced with user-supplied values or by values determined by context.


This element signifies a tip or suggestion.


This element signifies a general note.


This element indicates a warning or caution.

Using Code Examples

Supplemental material (code examples, exercises, etc.) is available for download at We offer a guide to get started in Chapter 4.

This book is here to help you get your job done. All contents here are licensed under Creative Commons Attribution-ShareAlike 2.0 Generic, and we invite the community at large to contribute work including feature requests, typographical error corrections, and enhancements via our GitHub Issue Tracker. You may reuse any of the text or examples in compliance with the license, which requires attribution. See full license for details.

An attribution usually includes the title, author, publisher, and ISBN. For example: “Continuous Enterprise Development in Java by Andrew Lee Rubinger and Aslak Knutsen (O’Reilly). Copyright 2014 Andrew Lee Rubinger and Aslak Knutsen, 978-1-449-32829-0.”

Safari® Books Online


Safari Books Online is an on-demand digital library that delivers expert content in both book and video form from the world’s leading authors in technology and business.

Technology professionals, software developers, web designers, and business and creative professionals use Safari Books Online as their primary resource for research, problem solving, learning, and certification training.

Safari Books Online offers a range of product mixes and pricing programs for organizations, government agencies, and individuals. Subscribers have access to thousands of books, training videos, and prepublication manuscripts in one fully searchable database from publishers like O’Reilly Media, Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, Course Technology, and dozens more. For more information about Safari Books Online, please visit us online.

How to Contact Us

Please address comments and questions concerning this book to the publisher:

O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-0515 (international or local)
707-829-0104 (fax)

We have a web page for this book, where we list errata, examples, and any additional information. You can access this page at

To comment or ask technical questions about this book, send email to .

For more information about our books, courses, conferences, and news, see our website at

Find us on Facebook:

Follow us on Twitter:

Watch us on YouTube:


First and foremost we would like to give a huge thanks to the Arquillian community: wonderful, talented folks from around the world who have contributed their time and knowledge to help improve the project, from coding to writing to speaking to screaming on the Internet (yes, we pay attention to you).

A special thank you to all the Arquillian module leads: Karel Piwko, Bartosz Majsak, Lukáš Fryč, Dan Allen, Stefan Miklosovic, Jakub Narloch, Gerhard Poul, John Ament, Jan Papousek, Bernard Labno, Ståle Pedersen, Ken Finnigan, Tolis Emmanouilidis, Ales Justin, Martin Gencur, Vineet Reynolds, Davide D’Alto, Jean Deruelle, David Blevins, Mark Struberg, Thomas Diesler, Romain Manni-Bucau, Logan McGrath, and Alexis Hassler.

A big shout out to Sarah White and Cheyenne Weaver for giving us the visual identity and the storyline to play with. You make us look good!

And thanks to all the people who helped us throughout this book, correcting and commenting on the content.

Thanks to Meghan Blanchette for being so persistent on pushing us back to work. This probably (definitely) would never have reached revision if you hadn’t!

And last but not least, a big thanks to our friend in code Adam Bien for the foreword.

This book is for the community from which our work was born, raised, and continues to evolve.

Get Continuous Enterprise Development in Java now with the O’Reilly learning platform.

O’Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.