100% found this document useful (1 vote)
172 views

Full Download Building Modern Business Applications: Reactive Cloud Architecture for Java, Spring, and PostgreSQL 1st Edition Peter Royal PDF DOCX

Cloud

Uploaded by

woopylmj
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
172 views

Full Download Building Modern Business Applications: Reactive Cloud Architecture for Java, Spring, and PostgreSQL 1st Edition Peter Royal PDF DOCX

Cloud

Uploaded by

woopylmj
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 55

Download Full Version ebook - Visit ebookmeta.

com

Building Modern Business Applications: Reactive


Cloud Architecture for Java, Spring, and
PostgreSQL 1st Edition Peter Royal

https://ebookmeta.com/product/building-modern-business-
applications-reactive-cloud-architecture-for-java-spring-
and-postgresql-1st-edition-peter-royal-2/

OR CLICK HERE

DOWLOAD NOW

Discover More Ebook - Explore Now at ebookmeta.com


Instant digital products (PDF, ePub, MOBI) ready for you
Download now and discover formats that fit your needs...

Start reading on any device today!

Building Modern Business Applications: Reactive Cloud


Architecture for Java, Spring, and PostgreSQL 1st Edition
Peter Royal
https://ebookmeta.com/product/building-modern-business-applications-
reactive-cloud-architecture-for-java-spring-and-postgresql-1st-
edition-peter-royal/
ebookmeta.com

Building Modern Business Applications 1st Edition Peter


Royal

https://ebookmeta.com/product/building-modern-business-
applications-1st-edition-peter-royal/

ebookmeta.com

Spring REST: Building Java Microservices and Cloud


Applications Balaji Varanasi

https://ebookmeta.com/product/spring-rest-building-java-microservices-
and-cloud-applications-balaji-varanasi/

ebookmeta.com

Mass Communication: Living in a Media World 8th Edition


Ralph E. Hanson

https://ebookmeta.com/product/mass-communication-living-in-a-media-
world-8th-edition-ralph-e-hanson/

ebookmeta.com
A Writer s Reference Diana Hacker Nancy Sommers Kimberli
Huster

https://ebookmeta.com/product/a-writer-s-reference-diana-hacker-nancy-
sommers-kimberli-huster/

ebookmeta.com

Roberto Clemente The Pride of Puerto Rico 1st Edition


Gerry Boehme

https://ebookmeta.com/product/roberto-clemente-the-pride-of-puerto-
rico-1st-edition-gerry-boehme/

ebookmeta.com

Writing Successful Undergraduate Dissertations in Social


Sciences A Student s Handbook 2nd Edition Francis Jegede

https://ebookmeta.com/product/writing-successful-undergraduate-
dissertations-in-social-sciences-a-student-s-handbook-2nd-edition-
francis-jegede/
ebookmeta.com

Human/Animal Relationships in Transformation: Scientific,


Moral and Legal Perspectives 1st Edition Augusto Vitale

https://ebookmeta.com/product/human-animal-relationships-in-
transformation-scientific-moral-and-legal-perspectives-1st-edition-
augusto-vitale/
ebookmeta.com

Computer Numerical Controlled Machines Constructional


Features and Programming 1st Edition Nirmal Kumar Mandal

https://ebookmeta.com/product/computer-numerical-controlled-machines-
constructional-features-and-programming-1st-edition-nirmal-kumar-
mandal/
ebookmeta.com
Oswaal CBSE Sample Question Paper Class 12 Accountancy
Book (For Term I Nov-Dec 2021 Exam) 23 Sep 2021 Edition
Oswaal Editorial Board
https://ebookmeta.com/product/oswaal-cbse-sample-question-paper-
class-12-accountancy-book-for-term-i-nov-
dec-2021-exam-23-sep-2021-edition-oswaal-editorial-board/
ebookmeta.com
Peter Royal

Building Modern Business Applications


Reactive Cloud Architecture for Java, Spring, and
PostgreSQL
Peter Royal
Sherman Oaks, CA, USA

ISBN 978-1-4842-8991-4 e-ISBN 978-1-4842-8992-1


https://doi.org/10.1007/978-1-4842-8992-1

© Peter Royal 2023

This work is subject to copyright. All rights are solely and exclusively
licensed 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.

The use of general descriptive names, registered names, trademarks,


service marks, etc. in this publication does not imply, even in the
absence of a specific statement, that such names are exempt from the
relevant protective laws and regulations and therefore free for general
use.

The publisher, the authors, and the editors are safe to assume that the
advice and information in this book are believed to be true and accurate
at the date of publication. Neither the publisher nor the authors or the
editors give a warranty, expressed or implied, with respect to the
material contained herein or for any errors or omissions that may have
been made. The publisher remains neutral with regard to jurisdictional
claims in published maps and institutional affiliations.

This Apress imprint is published by the registered company APress


Media, LLC, part of Springer Nature.
The registered company address is: 1 New York Plaza, New York, NY
10004, U.S.A.
To Tricia, without whose support over the years I wouldn’t have arrived
at a place where this book could happen.
Introduction
One of the first jobs I had was at a consulting firm where we were
assisting a client in how to modernize their software. The client had a
successful business selling and supporting a domain-specific ERP
(Enterprise Resource Planning) system. It dated back to the 1970s with
code written in BASIC-2C targeting the Wang minicomputer. When I
entered the picture in the late 1990s the software was running on
Windows via an emulator, its text-based interface trapped in a window.
The owner of the firm did not want to get locked into a proprietary
platform again. In a very forward-thinking move, we were explicitly
asked to create a web-based user interface and a Java-based backend.
As we incrementally migrated modules from the old system to the
new one, we received user feedback around the usability of the new
interface. The text-based interface of the old system allowed power
users to quickly navigate around. The new graphical interface did not
initially have the same capabilities. We added extensive keyboard
shortcuts to make navigation easier, but the nature of the interface
prevented us from matching the experience of the old system. Existing
users valued the system as it was, while new customers were enticed by
the new web-based interface.
This was an enlightening experience for me, how deeply the nature
of my work affected the work of others, and how attached people can
be to the familiar. I was attached to the familiar. While the new system
we created used technologies and techniques that were more modern
than what the old system used, the paradigms were fundamentally the
same. In the two decades since I worked on that system, again the
technologies and techniques have changed, but the same paradigms live
on. As I made this observation and introspected the work I had done, I
came to realize that there are other ways to build systems. That’s what
this book is about.
I start this book by defining and scoping business applications, and
then my perspectives on the status quo. The next part discusses
architectural precepts that I believe are appropriate for forward-
looking systems and why business applications should be built with
them in mind. Business applications encode business rules, and
business rules can change over time. Understanding each of these is
important, and I dedicate a chapter to each. The third part of this book
is my proposal for a modern business application architecture. I
describe my self-imposed constraints and the principles that the
architecture aims to uphold. The architecture is described in detail, but
from a conceptual and data flow perspective. The architecture may be
implemented in your desired language. It has technological
requirements, but you can choose implementations you are the most
comfortable working with. There are production systems using this
architecture, and the final part is about the implementation choices I
made. The final chapter is about additions that can be made to the
architecture as well as alternate means of implementation. My goal is to
show that the architecture is really a starting point for systems, not the
end state. Your systems will have their own lives and need to grow in
ways that are unique to their environments.
You don’t need to know any specific computer languages to
understand this book. A familiarity with building systems is valuable,
but also not required. I describe the what, not the how, as I believe the
former will be more durable over time. As I learned early in my career,
implementation decisions change, but paradigms endure.
Thank you for taking the time to read this book. I hope that my
reasoning resonates with you. I would love to hear your stories of how
you have taken the ideas from this book and applied them to your work.
—Pete
Any source code or other supplementary material referenced by the
author in this book is available to readers on GitHub
(https://github.com/Apress). For more detailed information, please
visit http://www.apress.com/source-code.
Acknowledgments
The ideas in this book are an amalgamation of concepts I have
encountered over my career, many of whose attribution is lost to time. I
value everyone that takes the time to write and share knowledge with
others, knowing that they will never fully understand the reach that
they have.
To John Caruso and Gary Foster, for without your support and trust
early on in my career trajectory I would not have been here. To Paul
Hammant, for being a source of ideas, inspiration, and encouragement.
To all my friends from the Apache Software Foundation, especially the
early Avalon and Cocoon communities, for being unknowing mentors
and shaping how to think about problems. To Snehal Chenneru and
Michael Li, for without your help and support we never would have
built the system this book is about.
Practicing the art of Brazilian jiu-jitsu has shaped my perspectives
on continuous learning, humility, and problem solving. To my teachers,
Andre, Sandro, and Chris, your methods for sharing knowledge have
shaped mine.
This book would not exist if it were not for Jonathan Gennick
reaching out to me and asking me if I had ever thought about writing a
book. You had the vision that there was something worth sharing in a
more durable form than a conference talk. You and your team at Apress
helped bring this book to fruition.
Trish, Poppy, and Pickles, thank you for your support while I spent
nights and weekends writing. You are the best.
Table of Contents
Part I: Business Applications
Chapter 1:​What Is a Business Application?​
Business Software
Domain Specific
How It Is Used
Measuring Importance
“Modern”
Summary
Chapter 2:​The Status Quo (and How It Came to Be)
Business Application Architectures
The Status Quo
Green Screen
Rich Client
Web Applications
The Rise of Consumer Applications
Concurrent Practices
Agile
Test-Driven Development
Continuous Integration and Delivery
Observability
Summary
Part II: Design Prerequisites
Chapter 3:​What Is a Reactive System?​
What Is Reactive?​
Reactive Manifesto
Responsive
Resilient
Elastic
Message Driven
Composing a Reactive System
Summary
Chapter 4:​Why Build Business Applications As Reactive Systems?​
Business Expectations
Developer Expectations
Property Alignment
Responsive
Resilient
Elastic
Message Driven
Summary
Chapter 5:​What Is a Business Rule?​
Thinking About Business Rules
Categorizations
Data at Rest
Side Effects
Derivable Data
Summary
Chapter 6:​Managing Time
Answering “What Happened?​”
Tracking Changes
Why Did That Happen?​
Events
Commands
Understanding Time
Serialization of Time
Eventual Consistency
Bitemporality
Business Rule Changes
Summary
Part III: Design
Chapter 7:​Constraints and Principles
Constraints
From REST to a Graph
Falcor
GraphQL
Why GraphQL
Being Real-Time
Principles
Never Forget
Message Driven
Read/​Write Separation
Partial Availability
Design Flexibility
Modularity
Testability
Amenability to Change
Summary
Chapter 8:​High-Level Data Flow
Event Sourcing and CQRS
Thinking in GraphQL Schemas
Scalars and Enums
Objects
Lists
Input Objects
Interfaces and Unions
Queries and Subscriptions
Mutations
Combining GraphQL + ES + CQRS
Summary
Chapter 9:​Command Processor
What It Is, and Is Not
Requirements
Composing the Core Loop
Handling Failures
Infrastructure
Application
Enforcing Business Rules
How to Test
Testing the Command Processor
Testing Your Code
Summary
Chapter 10:​Command Generator
Interaction with GraphQL
From Input Arguments into a Command
Appending to the Command Log
Returning the Mutation Result
Commands and Other Required Data
Handling Failures
Optimistic Locking
Timeouts
Testing the Command Generator
Command Submission
Command Creation
Summary
Chapter 11:​Event Materializer
Defining the View Model
Event Materializer Behavior
Transactions
Consistency
Multiple Sources
Evolving the View Model
Communicating Changes to Others
GraphQL Subscriptions
Other Side Effects
Managing Failure
Testing
Summary
Chapter 12:​Testing, Monitoring, and Observability
Key Components
Command Processor
Command Generator
Event Materializer
Composed Data Flow
Testing the Composed System
Introducing Property-Based Testing
Using Property-Based Testing
Using Example Tests
Observability
Monitoring Production Systems
Practice Using Tools
Summary
Chapter 13:​Required Technologies
Design Review
Constraints and Principles Recap
GraphQL
Real-Time Updates
Never Forget
Message Driven
Read/​Write Separation
Partial Availability
Design Flexibility
Modularity
Testability
Amenability to Change
Required Technologies
Append-Only Log
Pub/​Sub Messaging
Distributed Locking
Database
Summary
Part IV: Implementation
Chapter 14:​Building with Modern Spring, Java, and PostgreSQL
Required Technologies via PostgreSQL
Advisory Locks
LISTEN and NOTIFY
Schemas
Append-Only Log
Java and the JVM
GraphQL-Java
Spring Boot
Project Reactor
R2DBC
jqwik
Putting It All Together
Summary
Chapter 15:​Expansion Points and Beyond
Design Flexibility and Amenability to Change
Multiple Command Processors
Command Processor State Caching
Parallel Event Materialization
Command and Event Logs As GraphQL Subscriptions
Using GraphQL for Inter-Process Communication
Federated GraphQL
Outsourcing Distributed System Problems
Bitemporal Materialized Views
Conclusion
Index
About the Author
Peter Royal
is a practicing software developer with
over 20 years of experience. A common
thread has been working on business
applications, whether they are tracking
legal casework, domain-specific ERP
suites, or financial trading and risk
management. He enjoys building tools
for his colleagues, working with them to
meet their needs, and providing
solutions that bring joy rather than
frustration. He has come to appreciate
pragmatic architectures and
development practices that enable
systems to thrive for the long term. He
currently resides in Los Angeles, CA, with his wife, daughter, and cat.
About the Technical Reviewer
Alexandru Jecan
is a software engineer and author. He is working at Deutsche Bank as
Assistant Vice President in the area of investment banking. Alexandru
also speaks at programming conferences across Europe and the United
States.
Alexandru is the author of the book Java 9 Modularity Revealed
(Apress) and the technical reviewer of the books Java Program Design
(Apress) and Jakarta EE Recipes (Apress).
His book Java 9 Modularity Revealed was featured during the
keynote speech by Mark Reinhold at the JavaOne Conference 2018 in
San Francisco.
Alexandru lives with his wife Diana and his daughters Melissa and
Mia in Berlin and is currently studying for the Project Management
Certification.
You can reach Alexandru at alexandrujecan@gmail.com.
Part I
Business Applications
© The Author(s), under exclusive license to APress Media, LLC, part of Springer
Nature 2023
P. Royal, Building Modern Business Applications
https://doi.org/10.1007/978-1-4842-8992-1_1

1. What Is a Business Application?


Peter Royal1
(1) Sherman Oaks, CA, USA

“Modern Business Application” is a vague and imprecise term,


conjuring up differing mental images for each individual. Before we
embark upon our journey of building one, I need to ensure that you
have an understanding of what I mean.
In this chapter I will introduce what a “Modern Business
Application” is, for the purposes of this book. The progression of the
book follows with the desired properties for business applications, how
those properties can be manifested into the design of a system, and
finishing with a discussion on implementation.
I feel a critical aspect in developing successful business software is
understanding the business. The corollary for this book is
understanding what a business application is, in order to understand
what we will be building.

Business Software
In 2001, Watts S. Humphrey started off his book entitled Winning with
Software: An Executive Strategy1 with a chapter on “Why Every
Business Is a Software Business.” Ten years later, in 2011, Marc
Andreessen wrote a piece2 for The Wall Street Journal entitled “Why
Software Is Eating the World.” Fast-forward to 2019, and Microsoft’s
CEO Satya Nadella reaffirmed3 Watts’ declaration with “Every Company
Is Now a Software Company” during a discussion at the Mobile World
Congress.
The increasing reliance that businesses place on software had been
anticipated and has come to pass. Nearly all businesses rely on some
form of “Commercial Off The Shelf ” (COTS) software, even as the
“shelf” is now commonly an “… as a service” offering.
Each business is unique, and their software needs reflect that.
However, “software” is a broad term. This book is about a specific type
of software, “applications.” An “application” (or “app”) is software for
end users, whether they are a business’s employees or customers.
While all businesses benefit from software that is customized for how
they operate, the incremental value to the business relative to what’s
available as COTS generally results in developers such as you and I
working for larger organizations.
Let’s break down the attributes that will comprise our definition of
“Business Application.”

Domain Specific
A business can be said to operate within a given industry. Industries are
very broad domains , such as finance, manufacturing, entertainment,
etc. At a certain size, they generally partition themselves into internal
functional areas, or departments, such as sales, marketing, accounting,
etc. While there are commonalities in a given department across all
industries, the combination of industry and department yields many
unique values, as no two businesses conduct themselves in an identical
fashion. In fact, the way a business internally organizes itself can be an
important differentiator. Having an internal organization that’s
different from its peers can be a competitive advantage.
This is our area of focus, applications that are tailored toward
specific departments. Some departments, such as accounting, have
enough similarity across domains to support third-party vendors.
Often, such software will have the ability to be customized to adapt it to
the unique specifics of a business. However, this comes with risks, as a
critical component of a department’s operation is now in the hands of a
third party. This relationship has been recognized by financiers, some
of whom acquire these vendors and slow improvements in the software
in order to collect lucrative support fees, as without the software the
business would falter.
A mitigation to that risk is for a business to hire or contract
software developers such as yourself to create these applications.
Having full control of the application allows the business to control its
future . This is the basis for “every company being a software company.”
What once may have been a competitive advantage has now morphed
into table stakes.

How It Is Used
Within this departmental domain , our business applications are ones
that act as a source of truth for the department. The application is both
the “system of record,” in addition to the “system of engagement.” It is
the system that users interact with for data entry, as well as being the
authoritative store for that data. In very large corporations, there may
be a single corporate-wide system (an Enterprise Resource Planning
system,4 or ERP) that is the system of record, delegating the system of
engagement to other systems. Those systems are far larger than the
ones we are focusing on.
The most straightforward way to capture data into a system of
record is to make it a job requirement for employees to use the system.
Or, in the case of a customer-facing system , being the only way to
interact with the business. It is important to have empathy for the users
of these systems. As software developers, if there are annoyances with
the tools we use daily, in many cases we can modify our tools to remove
what’s frustrating. For users of business applications where usage of it
is a condition of performing their job, they do not have that luxury. The
responsibility to ensure that using an application is, as a minimum,
pleasant, falls to us. With information captured into an application, the
business is then able to use the data in pursuit of its goals.
Data is not captured in a vacuum. Without structure, data can be
worse than meaningless, creating additional confusion. Based on the
business's current objectives, a structure for data can be devised, a
model. The rigidity of this model can have a direct impact on the
business’s ability to adapt to changes in the future. If a change in the
business requires a change in this model, the application that houses
this model must then be updated for the business itself to change.
Writing software in a manner that is amenable to change is valuable
and can be under-appreciated. There is a balancing act between doing
exactly what is required vs. generalizing based on what could change in
the future. However, there are techniques that, to a degree, can side-
step this balancing act by taking a different path entirely. We will
discuss this more in Chapter 4.
Business applications enforce processes and workflows. These
workflows describe the activities that must be taken based on data in
the system, without prescribing who performs them. By formalizing
them into an application, adherence to them is increased or guaranteed.
We are focusing on applications that allow users to collaborate on
workflows. Our business applications are multiuser systems.
Collectively, requirements on the structure of data and the
processes by which the data is modified are known as business rules.
We will explore business rules in depth in Chapter 5.

Measuring Importance
As engineers, our view of an application’s importance is often based on
how it is used. An application that is frequently used and/or manages
large amounts of data is important. These two dimensions are conflated
when referring to the “scale” of an application. The larger the scale, the
larger the importance. That may not be the business’s perspective,
however. Instead, it is the criticality of the application to the continued
operation and success of the business’s operations.
For purposes of this book, our data volume sweet spot is what I like
to refer to as “medium-sized data” (as a play on the “big data”
nomenclature that swept over tech in the early part of this century).
Medium-sized data fits in the storage capacity of a single server,
although multiple servers may be used for resiliency. The data may also
fit entirely in memory, something that is increasingly true as system
capacities increase, and the changing nature of storage systems. Think
gigabytes, not terabytes.
As our business applications are targeted at end users, its access
frequency will be at human-scale speeds. The number of users will be
the driving factor in the overall number of requests, which will likely be
measured in requests per minute rather than second. This has
implications on how we observe the behavior of our systems; the
sparser the requests, the trickier it becomes to use metrics to monitor
its behavior. Is the system unavailable, or is it a quiet period for users?
This is explored in Chapter 12.
An application that is important to the business must be available
for use when the business requires it. There will likely be periods of
time for the business in which the unavailability of the application
would be disastrous. An application’s sole purpose could be to assist
users during these critical periods, as the formalization of the business
processes performed with the application helps ensure they are
performed as intended.

“Modern”
Modern is an adjective that will ultimately date whatever uses it. In
using this label, we are certainly declaring that our techniques are more
up to date than others. Computing capabilities have grown by leaps and
bounds in the past two decades. It isn’t that older techniques become
invalid. Rather, increased compute and storage capacity have made new
techniques viable. Techniques that may have only lived on a whiteboard
are now able to be put into production use.
This is our modern, more akin to modern tools than modern art. In
time, with your help, they will become the new status quo. There will
certainly be techniques in the future that beget reuse of the modern
label again, but such is the cycle of progress.
The techniques I describe and advocate for in this book are not
novel. I am making the case that not only is it entirely feasible to use
them but doing will lead to software applications that are better suited
for the current moment and into the future.
“Cloud Computing ” is an intriguing trend that both abstracts
developers from the physical machine and can demand increased
mechanical sympathy with the machine as a mechanism for controlling
costs. It is easier than ever to provision compute resources, and
inattention to the resources in use can invert the value proposition for a
business.
I discuss this in concrete terms in Chapter 4. The techniques I will
describe open up the possibility of managing consumed resources in
closer concert with what is required at the time, even if it isn’t acted
upon. Similar to how I explain how to make an application’s logic
amenable to change, the same principle is extended to the resources
required for operation.

Summary
The business applications this book referred to can be described thusly:
Tailored to a specific domain
Bespoke work, either performed by employee-developers or
consultants
Usage by employees is mandatory
Multiuser
Data entry and decision support are core functions
A source of truth for the business
Value is derived from workflow and decision analysis automation
Medium-sized data
Criticality is due to importance to the business
Modern is in relation to current development practices, which I
discuss in the next chapter.

Footnotes
1 https://www.informit.com/store/winning-with-software-an-
executive-strategy-9780201776393

2 https://a16z.com/2011/08/20/why-software-is-eating-the-
world/

3 https://www.satellitetoday.com/innovation/2019/02/26/micros
oft-ceo-every-company-is-now-a-software-company/
4 An ERP is a system that facilitates organizational-wide management of processes
and data. They are frequently composed of modules that relate to facets of the
business such as inventory management, purchase orders, and accounting. They are
highly customizable to the needs of the business.
© The Author(s), under exclusive license to APress Media, LLC, part of Springer
Nature 2023
P. Royal, Building Modern Business Applications
https://doi.org/10.1007/978-1-4842-8992-1_2

2. The Status Quo (and How It Came to


Be)
Peter Royal1
(1) Sherman Oaks, CA, USA

Now that we have established a definition of a business application, I’m


going to discuss my perspective on the status quo and how it has come
to be. It is based off of my observations of the industry over the past
two decades, from the mid-1990s to the present day in 2021.
In this chapter I will describe the practices that I’ve observed in my
career, and how I feel they may be improved. This will be a Java Virtual
Machine (JVM) centric view, as that’s where I’ve spent the majority of
my career. That may be true for you, or could be, depending on where
you are in your career arc. Let’s dive in!

Business Application Architectures


While business application architectures have changed in the past 20
years, they have also largely remained the same. As developers, our
systems repeat the same fundamental interaction patterns, albeit
implemented with the technologies of the day. It is important to
understand the past in order to understand the opportunities ahead.

The Status Quo


A “modern” business application likely presents itself as a web-based
user interface. If it is recent enough it may be a single-page application,
one where data is loaded in the background, and the page itself is
dynamically rewritten. This is usually only window dressing. If you look
closer, the page is probably firing off HTTP requests to a backend,
passing JSON payloads back and forth. HTTP verbs will be used to
coarsely describe the intended action, GET for retrieval, DELETE for
removal, PUT to create, and POST to update. Perhaps there is some
thought to the URL schema, such as a version number, but probably not.
It’ll be a flat namespace of endpoints, like a bunch of functions in an
unorganized namespace.
If you ask the developers what type of API they’ve created, they’ll
call it a “REST API,” even though it’s far from it. Slinging underspecified
JSON back and forth with HTTP verbs isn’t exactly what Roy Fielding
described when he coined the term. I like to describe these APIs as
“colloquial REST.”
There are many frameworks, such as Rails, Django, and Spring, that
assist with the mechanics of exposing the HTTP request to developers,
such that a developer only needs to specify the URL, HTTP method, and
the shape of the payload.
Once received, the request will undergo the appropriate validations
and then an object-relational mapping (ORM) framework will be used
to ultimately store or retrieve data from a relational database. The ORM
framework is probably Hibernate, as it has garnered the lion’s share of
attention since its debut in 2001.
Relational databases are the workhorses of business applications,
and for good reasons. The quality of software layers that exist between
the database and the user means nothing if the database isn’t capable of
reliably storing and retrieving data. Relational databases have a well-
specified and standardized mechanism for interacting with them, the
Structured Query Language, SQL . As difficult as it may be to introduce
any new technology into a business, it is even more difficult to
introduce a new primary data storage system. As our business
applications are important to the business, this leads to risk aversion
around the choice of data store. This is why the choice of data store is
not something I’m proposing innovating upon. I’ve been using
PostgreSQL for a large part of my career, and it has always worked, and
continues to be improved. It is why I’m advocating for using PostgreSQL
as part of this book. If you have a different preferred database, continue
to use that. You have hard-won operational knowledge that is worth
retaining.
The schema used in the database is probably mostly reasonable,
depending on the nature of the changes the business has asked upon
the software over its lifetime, as well as the number of developers that
have worked on it. One thing that is very likely to be true is that the
application mutates data in place. As data changes, what it used to be is
gone. Sometimes, there’s an explicit business requirement for an
“undelete” operation or tracking changes to specific fields. As this
requires extra development work, it is usually omitted unless explicitly
called out.
As a pithy summary, a “modern” business backend in Java is
underspecified JSON exchanged via a colloquial REST API that mutates
data in place in a relational database via Hibernate.

Green Screen
The first business applications I was exposed to were “green screen”
applications. The term was a throwback to terminals that were
connected to a central computer with multiple displays and keyboards
(terminals), rather than networking computers. The terminals were
often green CRT screens (thus the name) and had limited functionality.
They could display text from the central computer, relay input back, and
perhaps printing functionality. If you’ve configured a terminal in Linux,
you may have seen references to these devices in potential values for
the TERM environment variable such as vt100.
As personal computers became common, hardware terminal
emulators were replaced by software terminal emulators running
under Windows, the common desktop operating system at the time.
This is where I was exposed to them, applications that the business
depended upon that were more important than the lifecycle of the
hardware that they were originally developed for. Hardware terminals
had been replaced with desktop software, and central computers with a
local area network.
Some of these systems are still in active use. They are written in
languages that are now considered legacy, such as COBOL or RPG .
Rewriting these systems in another language is a large effort and
introduces risk to the business. Being an economic decision, the
Discovering Diverse Content Through
Random Scribd Documents
oli mennyt naimisiin oman renkinsä kanssa. Välillä nauroi hän
käheästi. — Erkki kuunteli vain puolella korvalla, mutta hän kuuli
kuitenkin. Ja jälleen tunsi hän mielensä painostuvan, turhaksi kaiken
työnsä ja taistelonsa.

Siinä se oli, se suuri, se väkevä, se harmaa, jota hän oli ikänsä


päältään torjunut, jonka peitseen hän oli punaisimman sydänverensä
vuodattanut ja jonka hän jo oli luullut kauas karkoittaneensa. Se istui
nyt tuossa hänen ääressään, irvisti häntä vastaan oman äidin
ikenistä, levitti kolkot siipensä hänen ylleen ja tahtoi estää hänet
hengittämästä. Eikö hän itsekin kuulunut tähän maaperään, eivätkö
hänenkin syvimmät juurensa olleet täällä? Turhaa oli enää
pyrkiäkään täältä pois, tuhannet säikeet kiinnittivät häntä tänne,
veren ja vanhojen muistojen kahleet, kovat kuin rauta. Ei, ei koskaan
onnistuisi hänen niitä enää rikkoa! Eikö ollutkin parasta panna
silmänsä kiini ja vaipua, vajota maan matalan poveen, kotoisen
maailman tasalle? Mikä oli hän, että hän päänsä pystympänä pitäisi
ja heimoansa halveksuisi, — säälisi kaikessa tapauksessa?

— Jumalan kiitos! Summa oli täysi. Hän oli jo laskiessaan


peljännyt sitäkin, vaikka hän kyllä ennenkin oli laskenut rahat. Olisi
sittenkin voinut puuttua jotakin, olisi jälleen alkanut sama juoksu ja
rehkiminen. Ei puuttunut mitään. Nyt ei muuta kuin setelit kiireesti
kirjekuoreen ja sitten postiin. Postimies voisi kaupungissa vaihtaa ne
suuremmiksi rahoiksi.

Samassa tuli Anni käskemään häntä keittiöön. Siellä oli joku, joka
etsi Erkkiä. Erkki jätti setelitukun pöydän nurkalle ja meni. — Se oli
kutsu kirkonkylän kauppiaan luo yksinkertaisille illallisille.

Erkki palasi takaisin ja huomasi heti, että rahat pöydällä eivät


olleet samassa järjestyksessä, mihin hän ne oli jättänyt. Hän laski ne
uudelleen. Aivan oikein, kaksi punalaitaa oli kadonnut. Oliko tuuli ne
vienyt? Tuuli kaksois-ikkunain läpi! Kissa? Heillä ei ollut kissaa.
Huoneessa ei ollut käynyt kukaan. Siis ei niitä ollut voinut ottaa
kukaan muu kuin äiti.

Hän katsahti äidin vuoteelle päin. Äiti oli nukkuvinaan. Vaikka hän
oli viipynyt poissa tuskin viittä minuuttia, oli äiti muka ehtinyt sillä
aikaa vaipua syvään uneen. Hän makasi kasvot seinään päin ja
kuorsasi kovasti.

Erkki tunsi tuskan hien kohoavan otsalleen. Oliko äiti todellakin


ottanut rahat? Hän katsoi pöydälle, katsoi pöydän alle, tutki
lompakkonsa ja luki jälleen rahat. Koi ei niitä ollut voinut syödä, ei
ruoste raiskata. Siis oli äiti ottanut ne.

— Äiti!

Äiti ei liikahtanutkaan.

— Äiti!

Ei vastausta.

— Äiti! Äiti! Otitko jotakin tuosta pöydältä?

Erkki meni hädissään hakemaan Annia. Hän oli niin kiihoittunut,


että koko hänen ruumiinsa vapisi.

— Tiedätkö? Äiti on varastanut minulta?

— Oletko varma siitä?

— Olen. Minä jätin rahat pöydälle ja nyt ei niitä enää ole siinä.
Anni pyyhki kätensä ja tuli päättäväisenä Erkin perästä kamariin.
Hän astui kursailematta äidin vuoteen luo ja pudisti häntä hartioista.

— Täti! Oletko sinä ottanut Erkin rahat? Anna ne heti paikalla


hänelle!

Äiti kuorsasi yhä edelleen.

— Sitten otan minä ne sinulta väkisin.

— Älä, älä!

Erkki riensi häntä estämään. Kohtaus alkoi käydä hänestä jo liian


inhoittavaksi. Mutta Anni oli jo ehtinyt vetää äidin käden peiton alta.
Siinä olivat rutistuneet setelit.

Erkki rukoili:

— Äiti! Anna ne minulle hyvällä! Tiedäthän, että tarvitsen ne


välttämättömästi.

Äiti ei vieläkään sanonut mitään. Hänen silmänsä olivat kiini ja


hänen huulensa lujasti yhteen puristetut.

Anni sanoi:

— Hän ei anna niitä. Pidä hänen toista kättään, että hän ei pääse
repimään niitä! Minä otan ne häneltä.

Silloin vasta heräsi äiti. Hän itki ja rukoili, pyysi ja vaikeroi. Erkillä
oli niin paljon rahoja, hänellä ei mitään, Erkki oli niin paljon nauttinut
maailmasta, hän ei ollenkaan. Hän oli Erkin edestä raatanut ja
taistellut, antanut viimeisen penninsäkin Erkin koulunkäyntiin; nyt ei
Erkki tahtonut antaa hänelle edes osaa paljostaan. Kohta hän
kuolisi, ei Erkillä enää hänestä kauan vaivaa olisi.

— Mutta, äiti kulta, minä tarvitsen nuo rahat, kuuletko, minä


tarvitsen! Minä olen mennyt mies ilman niitä.

Mutta äiti ei kuullut häntä. Hänkin tarvitsi rahoja.

— Mihin?

Äidin syntymäpäivä oli lähestymässä. Se oli luultavasti oleva


hänen viimeisensä. Hän tahtoi sen niin mielellään viettää entiseen
tapaan, vieraiden ja kaupunkivehnästen, viinin ja hyytelön kanssa.
Sitä ei oltu vietetty niin isän kuolemasta saakka. Köyhyys oli estänyt
häntä. Pitäjän herrasväki ei koskaan ollut sen jälkeen kokoutunut
tähän matalaan kotiin. Hän itse ei ollut koskaan saanut enää liikkua
pitojen emäntänä, vanhassa silkkileningissään, kultakello
kaulassaan. Hennoisiko Erkki nyt kieltää häneltä tuon ilon?

Erkki oli tullut äkkiä aivan kylmäksi. Hänelle oli kaikki lopussa. Hän
meni pöydän luo, otti setelipakan, antoi sen äidin käteen ja sanoi
lujasti ja armottomasti:

— Ota! Ota kaikki!

Sitten syöksyi hän ulos huoneesta. — Äiti kiirehti kätkemään


setelit peiton alle. Vain pari sai Anni pelastaneeksi.

*****

Erkki kulki pitkin lumista maantietä. Koko hänen sisällinen


ihmisensä oli järkytetty. Syvyyden lähteet olivat auenneet hänen
sydämessään ja tuliset kerät hyppelivät hänen silmäinsä edessä. Nyt
hän oli todellakin mennyttä miestä! Siinä se oli hänen ainainen
heikkoutensa! Mitä lempoa hän oli tänne maaseudulle tullutkaan?
Mitä häntä tarvitsi liikuttaa äidin sairauden, mitä kodin ja veren
siteiden? Miksi hän ei ollut kerrassaan jo aikoja sitten voinut rikkoa
niitä velvollisuuksia, joita hän ei kuitenkaan kyennyt täyttämään?

Päivä paistoi pitkin kimmeltäviä hankia, puut loivat sinertäviä


varjoja lumelle. Oli ilmassa kevään tuntua, taivas oli kirkas ja korkea,
pajupensas tien ohessa näki valkoisia unia. — Mutta hänen
mielensä oli katkera ja kova.

Kevät koittaisi kyllä, puut lehtisi, järvet jäättöminä kimaltelisi…


Hänelle yksin ei kevät enää koskaan koittaisi. Ei ollut hänessä ollut
miestä elämän taisteluun, ei pontta kyllin luonteeksi muodostumaan.
Ei hän ollut koskaan voinut ottaa mitään varmaa, poissulkevaa
kantaa, ei tehdä mitään ratkaisevaa päätöstä, ei polttaa mitään
laivoja takanaan. Siltä väliltä hän oli aina ollut ja siksi hän tulisi myös
ikänsä jäämään — sille välille. Horjunut hän oli kahden eri maailman
välillä ja siksi olivat nämä maailmat hänet vihdoin väliinsä
musertaneet.

Hänkö Annia kohottamaan? — Erkin täytyi sitä muistaessaan


nauraa katkerasti. Ei hän ollut kyennyt edes itseään kohottamaan, ei
luomaan itselleen mitään varmaa yksilöllisyyttä, ei mitään elämän-
ihannetta, jota hän voisi omakseen nimittää. Lainattua se oli kaikki
niinkuin hänen rahansakin, yksi ajatus sieltä, toinen täältä, kirjoista
opittua, sanomalehdistä luettua, kapakan pöytyeissä pureksittua!
Tuulen tuomaa, viiman viemää …

— Ota! Ota kaikki!


Hänkö maailmaa parantamaan? — Jospa hän olisi voinut edes
itsensä parantaa, vapautua vanhoista muistoista, takoa itselleen
rinnan raudasta ja paidan teräksestä, sellaisen, jota taistelossa
tarvittiin. Untuvia hän oli ympärilleen koonnut, unelmista hän oli
sotisopansa luonut, haaveista, joilla ei mitään tosi pohjaa ollut.
Elämän kauneutta hän oli etsinyt ja tavoitellut. Nyt oli elämän rumuus
hänet ympäri piirittänyt.

— Ota! Ota kaikki!

Hänkö myrskyssä seisomaan? — Jospa hän olisi voinut edes


tyynessä seista, jospa edes satamassa säilyä haaksirikosta! Ei olisi
toinen hänen, sijassaan vavissut, ei silmää räpähyttänyt, ottanut
elämältä omansa, vaikka se sitten olisi ollut oman kuolevan äidin
käteen puristettu. Hän vapisi. Pienen vedenalaisen karin hän antoi
kaataa veneensä, särkeä kaikki suunnitelmansa. Raukka hän oli ja
raukka hän oli aina ollut, raukaksi hän oli syntynyt ja raukkana hän
pysyi! Oli ollut hänellä tähän asti vielä pisara ylpeyttä, vaaksa
itseluottamusta, kipinä omanarvon tuntoa. Nyt oli sekin mennyt.

— Ota! Ota kaikki!

Hän käveli kauas, kauas pitkin lumista maantietä, ohi kirkon, ohi
hautausmaan, kohti korpea lähestyvää. Lankesi hämärä hänen
ympärilleen, syttyivät tähdet hänen päänsä päälle. Syttyivät myös
lamput lakeudella, syttyivät taloissa ja etäisissä metsätorpissa. —
Mutta Erkin mieleen hiipi ääretön surumielisyys.

Mitä hän oli ollut ja miksi hän oli elänyt? Mihin pyrkinyt ja mitä
elämässä toimittanut? Kuluttanut hän oli aikansa arkipäiväin
pienessä rähinässä, tuhlannut itsensä, tuhlannut toiveensa ja
työkykynsä. Tyhjä, puusta pudonnut lehti hän oli, valmis hankeen
haudattavaksi …

Jospa hän olisi edes joskus vihannut vakavasti taikka rakastanut


vakavasti, tehnyt oikein hyvää jollekulle taikka tehnyt oikein pahaa!
Jäisi edes joku muisto hänen elämästään, jalanjälki lumelle,
kirjokaan taivaalle… Mutta ei! Tyhjää oli hänen elämänsä ollut ja
sisällötöntä, tuomittu hän oli jäljettömiin häviämään …

Harmaata oli ollut elämä hänen ympärillään ja rumaa, ei ollut


monesti päivä sumun läpi pilkistänyt. Märkä metsä oli hänen
ympärillään itkenyt, huoannut maa liejuinen hänen jalkojensa alla.
Oli sattunut joskus eteen sininen silta, punainen pursi; ollut oli kaikki
jälleen harmaata …

Ei ollut elämä hänelle antanut paljon iloja eikä paljon suruja. Oli
antanut päiviä pääksytellen, iloa vain iltojen siteiksi, surua vain
huomenen huoliksi. Ei ollut elämällä siis häneltä paljoa otettavaa …

Ikävä oli maailma, ikävät ihmiset, ikävät hänen omat ajatuksensa.


Kultaan ja purppuraan hän oli kerran onnensa pukenut; nyt pyöri se
harmaana lankakeränä hänen edessään. Viitsisikö hän sen enää
ottaa ylös, sen kerimisellä kättänsä vaivata?…

Nyt oli hän yhdenvärinen muun maailman kanssa.


III

LEHTIPURJEESSA

Erkki palasi myöhään illalla kotiinsa kauppiaan kutsuista.

Maalaiskirkon tapuli kohosi juhlallisena kohti tummansinertävää


kevättalven taivasta. Kirkon juurella, kinoksien keskellä, nukkuivat
talot, nukkuivat myös hiljaiset metsät niiden ympärillä, kauempana
korpien takana kohosi jälleen taloja ja kirkkoja, nousi lumisia vaaroja,
avautui aavoja järvenselkiä, joita viittatiet risteilivät. — Tähti putosi
siellä, tähti täällä. Yksinäisen kulkijan askeleet narskuivat sileäksi
tallatulla tiellä.

Oli ollut paljon vieraita tuolla kauppiaassa. Piha täynnä ajopelejä,


huoneet tupakansavua ja äänten sorinaa… Hänelle oli pidetty
puhekin, lakkautetun sanomalehden toimittajalle… Kauppias oli tullut
häntä kädestä puristamaan ja kuiskaten tuttavallisesti selittänyt,
mitenkä tässä, juuri tässä hänen samaisessa puotikamarissaan oli
alkanut se uuden ajan edistystyö tällä paikkakunnalla, jonka
hedelmiä hän nyt kaikkialla ympärillään näki. Tässä oli nuorisoseura
perustettu, tässä sen ensimäiset kokoukset pidetty, tässä valittu uusi
kunnallislautakunta ja tässä uusi valtiopäivämies. …
Maanviljelysneuvos oli istuttanut hänet viereensä ja kiihkeällä
kaunopuheisuudella tehnyt tiettäväksi, miten maailmassa ja varsinkin
valtiollisessa maailmassa ei mikään ollut ihmiselle niin tarpeellinen
kuin maltti, ei mikään niinkuin maltti… "piru vieköön, ei mikään
niinkuin maltti", oli hän sanonut ja lyönyt nyrkkiään pöytään, kun
Erkki oli osoittanut heikkoja vastaansanomisen oireita… Vanha
ruotsikkojen vihaaja kirkonisäntä oli jälleen molempia käsiään
levitellen koettanut vakuuttaa Erkkiä siitä, että paras keino osata
oikeaan oli tehdä juuri päinvastoin kuin ruotsinmieliset … jos ne
oikeaan, niin me vasempaan, jos ne vasempaan, niin me oikeaan!
Sillä tavalla ei koskaan erehtyisi. — Kansakoulun opettaja oli
mielipiteiltään anarkisti, "taikka tarvinisti", kuten hän itse sanoi.
Hänen murheensa oli vaan se, etteivät ukot tahtoneet oikein uskoa
kehitysoppiin.

Uudet ajat, uudet tavat! Uudet ihmiset, uudet pyyteet!… Istuivat


ennen sedät keinutuoleissa ja nahkasohviensa kulmissa, polttelivat
pitkiä piippujaan, maistelivat höyryäviä totilasejaan, tarinoivat
terveydestään ja vuodentulon toiveista, ulkomaiden tapahtumista ja
keisarien kruunauksista. Oli mukana pappi, pyylevä mies, oli lukkari,
hänen hyväntahtoinen isänsä, oli viinaan menevä maanmittari ja
nimismies, joka taisi lukemattomia kaskuja. Keskustelukielenä oli
rinnakkain suomi ja ruotsi; sen jälkeen kuin kansakoulunopettaja oli
tullut joukkoon, etupäässä suomi… Mutta hän kuuluikin jo
nuorempaan polveen.

Epäilemättä oli siitä lähtien suuri edistys tapahtunut. Virkamiehet


olivat nykyään vahvoja kansallismielisiä, kansa oli herännyt ja pappi
oli ankara raittiusmies … Kuitenkin tunsi Erkki tällä hetkellä
sanomattomasti kaipaavansa noita vanhoja aikoja. Oli ollut niin
rauhallista ja tukevaa silloin istua äänetönnä syrjässä ja kuunnella…
mieliala oli ollut eheämpi, seura kokonaisempi. Nyt sitä vastoin…
kirjavaa seuraa… kirjavia ihmisiä. Kaikki ne olivat sitäpaitsi tulleet
heti esittämään veljen maljaa.

Tämähän on suoraa taantumusta! ajatteli Erkki hymyillen


itsekseen. Varsin sopimattomia mielikuvia vapaamielisen lehden
toimittajalle… Mitähän veikot siellä Helsingissä sanoisivatkaan?…
Mutta sitten muisti hän, että hänen lehtensä olikin lakkautettu ja että
hän itse ei luultavasti enää ollenkaan pääkaupunkiin palajaisi…
Nämä olivat päinvastoin hyvin soveliaita ajatuksia sille, joka
luultavasti tulisi ikänsä maaseudun hiljaisuudessa viettämään.

Lapsuuden muistot, kerran herättyään, eivät enää jättäneet Erkkiä.


Ne seurasivat hänen askeleitaan talvi-öisellä tiellä, seurasivat ohi
kirkon, ohi hautausmaan, kohti kotia lähestyvää. Hän muisti isänsä,
muisti kultaisen emonsa, muisti huolettomat kouluajat ja ensimäiset
askeleensa elämässä … Hänestä tuntui kuin olisivat päivät silloin
olleet pitemmät ja ihmiset iloisemmat, päivänlaskut laupiaammat,
koriammat huomenkoitot.

"Toisin silloin touko kasvoi, toisin maa orahan otti."

Hän mahtoi itsekin olla silloin toinen, — minkälainen, sitä ei Erkki


enää oikein tarkoin muistanut, ainoastaan, että hän oli ollut
reippaampi ja iloisempi… ei juuri iloisempikaan, mutta itseensä
tyytyväisempi. Oli ollut keveämpi elää. — Mielikuvat tulivat ja
menivät.

Yksi kohosi muita korkeammalle … Sata oli lintua metsässä; yksi


lauloi muita kauniimmasti… Tuhat oli tähteä taivaalla; yksi kimmelsi
muita kirkkaammasti … Monta oli luotoa merellä; yksi oli paasi kullan
paistavainen.
Siitä oli monta, monta vuotta. Tuskin hän enää itsekään aivan
tarkkaan muisti, milloin se oli, mutta se mahtoi olla jossakin koulun
yläluokilla. Hän oli lähtenyt yksin selän siintävän ylitse tuijottamaan,
pystyttänyt lehtipurjeen veneensä kokkaan ja jättäytynyt aaltojen
ajeltavaksi. Tuuli oli tuonut purtta, viima vienyt, ulappa oli paistanut,
vaarat taivaan rannalla sinertäneet. Hän oli makaillut päiväkaudet
alastonna asumattomien saarten somerossa ja jälleen antanut
veneen vieriä kohti kauaksi väistyviä lahdenpoukamia, joissa hän ei
ollut koskaan käynyt. Yönsä, kesäiset, valkeat yöt, hän oli levännyt
heinäladoissa, vetänyt veneensä karskuvalle hiekalle, kulkenut yli
kasteisen niityn, nukkunut nuorten heinien ritinään ja herännyt
katsomaan seinänraosta kuppelehtavia jäniksiä, jotka ladon ovella
aamun kultaisen ruskossa iloaan pitivät. Hän oli ottanut osaa
nuottamiesten kalakesteihin lehtoisten nienten nenissä ja tehnyt
talkoolla heinää suurissa talonpoikaistaloissa. Hän oli ollut onnen
matkamies.

Lehtipurjeessa, lehtipurjeessa!

Oli tullut ehtoosta ja aamusta jälleen uusi päivä. Kuinka mones se


hänen matkallaan oli ollut, sitä hän ei itsekään enää muistanut, sillä
vaikka hänen matkansa oli kestänyt tuskin viikkoa enempää, tuntui
se hänestä kuukausilta ja vuosilta… Hän oli Väinämöinen, joka
merta melasteli etsien vain nientä nimetöntä sitä asuakseen, hän oli
merirosvo-laivuri, joka ajeli rauhallisia kuorma-aluksia, orava, joka
purjehti kaarnapurrella, vieraiden maiden kuningas, joka kuljetti
kullalleen purren täyden kultia ja hopeita. Hän oli milloin mitäkin… ja
kaikkialla, kussa hän kulki, tehtiin heinää ja kohosivat tyynet
tervahaudan-savut, kaikkialla paistoi päivä ja kuulti kultaiset
rantahiekat.
Haihtuneet olivat hänen mielestään koti ja äiti, koulukaupunki, sen
ilot ja surut. Hän tuskin muisti enää, kuka hän oli ja minne hän meni.
Hän oli kokonaan sulanut yhteen ympäröivän luonnon kanssa. Hän
oli näiden nienten, saarien ja selkäin alkuasukas, koko tämän
päivänpaistaman järvimaailman haltia itse, kesän henki, joka kulki
vetten päällä… Kun hän joskus niittylähteen yli päänsä kallisti taikka
näki kuvansa tyynessä rantavedessä, tuijottivat hänen silmänsä niin
suurina ja itsetiedottomina, että hänestä tuntui turhalta enää
ajatellakaan palata tuonne järven toiselle puolen… Hänen oli jäätävä
tänne, hänen oli elettävä täällä ikänsä, opeteltava ravitsemaan
ruumistaan veden riistalla ja totuttava käymään puolialastonna
salojen hämärässä, vain joku jousella ammutun peuran taikka
keihäällä kaadetun karhun talja verhonaan … Kaikki villi-ihmisen
vaistot olivat hänessä heränneet. Aamuin ja illoin hän teki uhrinsa
auringolle, hän kuuli ruohon kasvavan ja ymmärsi, mitä västäräkki
hänen veneensä kokassa visersi, sillä aikaa kuin hän itse sen
pohjassa lepäsi ja katseli sinistä ja valkoista taivasta …

Hän oli metsien erakko, joka tajusi elämän salaisuuden, salojärven


tietäjä, joka odotti vain totuudenjanoisia, kirkassilmäisiä opetuslapsia
tullakseen uusien uskontojen perustajaksi. Maailmankatsomuksensa
hän muodosti lyhyiksi, ytimekkäiksi viisauden sanoiksi, joita hän
piirteli käyristyneille tuohipalasille — hiilellä, jonka hän oli ottanut
tervamiesten yötulilta — ja aavistuksensa salatuista asioista hän
kätki kivien ja kantojen alle, josta syntymättömät sukupolvet tulisivat
ne nimettömänä, suuren tuntemattoman lahjana löytämään!

Lehtipurjeessa, lehtipurjeessa!

Anni tuli hänelle ovea aukaisemaan. Hän oli heittänyt ympärilleen


saalin ja Erkki näki, että hän jo oli ollut nukkumassa.
— Oliko hauskaa kauppiaassa?

— Niinkuin tuossa.

He astuivat äänettöminä saliin. Anni nukkui keittiössä taikka,


milloin äiti oli huonompi, hänen kanssaan kamarissa. Hän asetti
kynttilän kädestään pöydälle, katsoi vielä kerran, että kaikki oli
paikoillaan yöpöydällä Erkin vuoteen vieressä, ja kääntyi sitten
keittiöön mennäkseen.

— Hyvää yötä sitten.

— Nukuttaako sinua?

— Eipä erityisesti.

— Tahdotko lasin viiniä?

Anni näki, että Erkki kaipasi puhekumppania. Se oli tapahtunut


varsin usein viime aikoina. He olivat istuneet monesti myöhään
yöhön salissa ja jutelleet, tavallisesti aivan läheisimmän
ympäristönsä asioista, äidin sairaudesta ja muusta. Mutta he olivat
täten kuitenkin jossakin määrin lähestyneet toisiaan. Anni näki, että
Erkki ikäänkuin pelkäsi olla yksin, ja piti sentähden mielelläänkin
seuraa hänelle. Erkki olikin viime aikoina käynyt niin
synkkämieliseksi.

Mitä oli Erkki Annille? Ei paljoa. Myöskin vaan hämärä lapsuuden


muisto, hiukan haikea sydämen sylkähdys, jolle hän oli liian viisas
mitään perustaakseen. Oppinut, onnellisempi serkku, päivän lapsi
järven toiselta puolen, puolelta kirkonkylän ja kullankimmeltäväin
ikkunani, sillä aikaa kuin aurinko hänen oman kotinsa takana
synkkään korpeen painui. Oli hänkin kerran kätensä ojentanut… oli
kuroittanut kohden ihalampia ilmanrantoja. Se oli silloin kuin itara isä
oli päästänyt hänet pariksi vuodeksi seminaariin… Nyt oli kaikki
lopussa. Koti oli todellakin sietämätön, isä raaka, äitipuoli röyhkeä…
Hetkeksi edes irtautuakseen ilottomasta elämästään oli hän
saapunut sairasta tätiään hoitamaan. — Täällä hän oli tavannut
Erkin. Se ei ollut häneen mitään suurempaa vaikutusta tehnyt. Häntä
harmittivat vain ne muutamat kulkupuheet pitäjällä, jotka olivat
viittailleet mahdolliseen rakkauteen serkusten välillä … Täällä
ahtaassa maaseudussa ei paljon mokomain juorujen syntymiseen
tarvittu.

Se oli siis kaikin puolin tyyni, viileä ja tervejärkinen nainen, joka


tällä hetkellä Erkkiä vastapäätä soututuolissa istui, samalla kuin
Erkki itse sohvan kulmassa paperossiaan poltteli. Yhtä tyyntä ja
intohimotonta oli heidän keskustelunsakin; sanoivat sanan silloin,
toisen tällöin, ja vaikenivat jälleen… Lääkäri oli käynyt viime viikolla
ja ilmoittanut, ettei äiti voinut elää kesää kauemmaksi. Siitä heillä
puhetta piisasi.

Mutta Erkki katseli Annia kuitenkin tänä iltana eri silmillä kuin
ennen, näki vanhojen muistojensa prisman läpi, jotka tuolla ulkona
tähti-vipajavassa talvi-yössä olivat hänen sielussaan heränneet. Eikä
hän enää millään muotoa tahtonut päästää niitä jälleen katoamaan,
hän koetti väkisin loihtia esiin äskeistä mielialaansa ja väkisin
kehitellä sitä… Anni esiintyi hänelle nyt arvoituksena, joka kerran oli
hänen elämäänsä astunut, mutta jäänyt selittämättä. Eikö voisi sitä
nyt selittää, eikö jälleen mennyttä manata?

Lehtipurjeessa, lehtipurjeessa!

Mutta se ei enää tahtonut mitenkään onnistua. Toiset muistot


tunkivat hänen mieleensä… synkemmät, pimeämmät muistot… Oli
hän kerran teistikin tavannut Annin, markkinoilla, läheisessä
kauppalassa. Mutta silloin ei ollut päivä paistanut eikä kesä
kukoistanut, oli ollut synkkä, sateinen syksypäivä, maa liejuinen, ilma
harmaa… Tuo pieni, vähäpätöinen kauppapaikka oli nyt kuhissut
täynnä kansaa, jota oli saapunut kymmenien peninkulmain takaa,
kadut olivat olleet yhtenä rapakkona… olivat lemunneet miesten
harmajat sarkakauhtanat ja naisten värjätyt juhlavaatteet…
Illemmällä olivat lamput syttyneet kauppapuodeissa ja kojuissa torin
varrella, kadut olivat yhä edelleen olleet täynnä väkeä, humalaiset
olivat reuhanneet, tytöt ja pojat kävelleet hoilaten ja käsi kaulalla…
Oli alkanut ilon roihu niin hurja ja villi, ettei Erkki semmoista
muistanut milloinkaan nähneensä, nälkäkansan juhannuskokko,
korven karnevaali, kaikkien pidätettyjen intohimojen ja arkipäivien
pitkässä, yksitoikkoisessa hämärässä sokaistuneiden viettien
kaamea karuselli… räikeä kuin syksy, ruma kuin loka, saastainen
kuin tämä sateinen, ränsistynyt taloryhmä …

Lehtipurjeessa, lehtipurjeessa!

He olivat tavanneet toisensa erään lautakojun edessä… He olivat


ostaneet namusia ja Erkki oli kihlannut Annin vesirinkilällä… Hekin
olivat tahtoneet leikkiä karnevaalia ja käyneet katsomassa
komeljanttien voimistelunäytteitä, silmänkääntämistä ja
miekannielemistä… He olivat kävelleet keilaradalle kauppalan
läheiseen puistikkoon… Pareja oli pyrähdellyt lentoon märästä,
pimeästä maasta kuin pyitä metsämiehen lähestyessä… Yönsä he
olivat nukkuneet porvarin pienessä, tungokseen ahdetussa pirtissä,
tukahduttavassa ilmassa, juopuneiden rähinässä…

— Erkki! Mitä sinä ajattelet?

— Enpähän erinomaista.
Mutta Anni katseli edelleenkin tutkivasti Erkkiä. Erkin kasvoille oli
noussut niin tuskallinen ilme ja hän hengitti aivan kuuluvasti…
Lieneekö hän ollut sairas? Hän oli joskus ennenkin maininnut
turmiolle menneestä hermostostaan. — Anni tunsi itsensä oikein
levottomaksi.

Mutta Erkki oli jälleen saanut kiini kesäisistä mielikuvistaan. —


Kuinka se oli taas ollutkaan?… Hän oli edellisenä iltana joutunut
myrskyyn, yöpynyt sanattomaan saareen lähellä mannermaata.
Ohimenevä ukkossade oli hänet kastellut… hän oli seisonut tippuvan
kuusen alla… hän oli vihdoin riisunut vaatteensa, kätkenyt ne
veneen teljon alle ja juoksennellut alastomana vesisateessa
kahakäteen pitkin karheata jäkäläkangasta… Hänen oli tullut kylmä,
hän oli heittänyt kieppiä pihkaisten puiden oksissa ja kalkutellut
suuria kiviä päänsä päällä yhteen. Lopuksi oli hän jälleen pukenut
vaatteet päälleen, istunut läpi märkänä, lokattavin leuoin ranta-
äyrään suojassa, luistavalla kalliolla, johon sadevesi pitkin puiden
juuria valui, mutta jossa hän kuitenkin oli turvattu taivaasta tulvivalta
saavinkaadolta… Siinä oli hän istunut vaipuneena hiljaiseen
mietiskelyyn, edessänsä tuhansia pikku kirppuja ponnahutteleva
vedenpinta ja takanaan sankea, ropiseva metsä, jota humahtelevat
tuulenpuuskat avasivat ja sulkivat kuin lukkoa…

Lehtipurjeessa, lehtipurjeessa!

Vasta seuraavan päivän ikäpuolella oli hän päässyt sieltä


mannermaalle luovimaan. Hän oli ollut silloin niin väsynyt, että hän
oli heti vaipunut sikeään uneen päivän lämmittämille rantakiville;
vene oli jäänyt kauaksi matalikolle… Kun hän heräsi, oli yö. Tuuli oli
hiljennyt melkein tuntumattomaksi… vain laineiden läikkä ja silloin
tällöin lehahtavat koivut muistuttivat menneestä myrskystä.
Hän nousi, oikoi jäykistyneet jäsenensä, pistäysi rantaveräjästä ja
taittoi aitovierellä kasvavasta metsäruusupensaasta kukan
napinläpeensä… Häämöitti talo törmältä, sinne kapea polku poikki
viettävän pellon … Hän kulki, kohosi jälleen veräjästä, sivuutti
saunan, kiersi pirtin nurkan, tuli pihalle… Ei kuulunut hallia
haukahtavaksi, ei karjankelloa kalahtavaksi…

Pirtin ovi oli lukossa. Hän kolisteli, ei kukaan tullut avaamaan. Hän
löi aitan ovelle, sama tulos… Vihdoin ilmestyi saunasta piika
pikkarainen, joka kertoi kaiken talonväen menneen ulkoniitylle. Hän
yksin jäänyt kotimieheksi… Ruislintu narisi, punertava täysikuu
paistoi vinoon yli viljapellon.

— Erkki! Mitä sinä ajattelet?

Erkki tuijotti eteensä niin synkästi ja kamalasti, että Anni tunsi


sydämensä kouristuvan. Mutta ennen kuin hän ehti enempää
ajatella, näki hän Erkin nousevan, tulevan häntä kohti ojennetuin
käsivarsin.

— Erkki, Erkki! Sinä kaadat kynttilän!

Anni vapisi kiireestä kantapäähän. — Erkki oli sulkenut hänet


syliinsä. Hänen toinen kätensä kiersi Annin vartta, toinen koetti
tunkeutua saalin alle ja tapailla hänen rintojaan, jotka nousivat ja
laskivat kuin aallot. Samassa tunsi Anni huulensa musertuvan
väkivaltaisesta suudelmasta.

— Erkki!

— Minä rakastan sinua.


Kynttilä sytytti kaatuessaan harvat ikkunaverhot. Ne roihahtivat
tuleen ja sammuivat samassa. Hetkellinen tulenloisto heijastui
huoneesen, siitä ulos talviseen pimeyteen, valaisi silmänräpäykseksi
lumisen pihamaan ja ulkohuoneiden seinän. Sitten ei enää näkynyt
mitään.

— Erkki!

Viereisestä huoneesta kuului raskas kolahdus. He raapaisivat tulta


ja huomasivat oven olevan raollaan äidin kamariin. He kiirehtivät
sinne ja tapasivat äidin taintuneena oven edessä. He nostivat hänet
sänkyyn ja saivat kauan turhaan häntä henkiin virotella.
IV

DE PROFUNDIS

Äidin syntymäpäivä lähestyi. Äiti oli ihmeellisesti voimistunut. Hän


oli kaiket päivät jalkeilla, hän tunsi itsensä jälleen pitojen emännäksi,
hän oli tyytyväinen ja laski leikkiä, pesi ja puuhasi, leipoi ja kirkasti
astioita aivan kuin entisinä suuruutensa aikoina. Ylenluonnollinen
toimeliaisuuden henki oli ottanut häneen asuntonsa.

Mutta Erkistä tuntui aivan kuin olisi äiti puuhannut omia peijaitaan.

Hän itse, Erkki, sai muuttaa milloin salista kamariin, milloin


kamarista saliin. Siellä lakaistiin, pestiin, pölyytettiin ja tuuletettiin,
vanhat valokuva-albumit haettiin esille, vanhat nimipäiväkortit
järjestettiin vadeilleen. Kun odotettu päivä vihdoin koitti, kiilti ja kuutti
lukkarinmuorin pieni, punaiseksi maalattu tupa maantien varrella
niinkuin nukkekaappi kuninkaan linnassa. Kynttilät sytytettiin, lamput
pantiin eteiseen palamaan, itse istui lukkarinmuori sohvaan
vanhassa silkkileningissään, joka nyt oli käynyt hänelle niin väljäksi,
niin väljäksi. Erkki istui keinutuolissa hänen vierellään, Anni kilisteli
keittiössä astioita. — Kaikki Erkin kirjat olivat korjatut piiloon, samoin
äidin rohtopullot; sänky, joka oli ollut vuosikaudet levällään
kamarissa, oli nyt vedetty yhteen. Mikään ei muistuttanut, että tämä
pieni talo oli sairashuone ja että täällä asui kaksi sairasta sielua.

Saliin piti naisten kokoontua, kamari oli määrätty herrojen toti- ja


tupakkahuoneeksi. Oven piti olla auki molempain välillä niinkuin aina
ennenkin isän eläessä. Marmelaatia oli pienillä aseteilla pöytien ja
piironkien päällä, lukkarin vanha piippuhylly oli jälleen päässyt
arvoonsa; paperosseja ja sikaareja oli hankittu monta eri lajia
läheisestä kauppalasta. Näin varustettuna, oppinut poikansa
sivullaan, odotti vanha lukkarinmuori vieraitaan, haalistunut
silkkileninki yllään, kultasormus sormessa, josta se aina tahtoi
tipahtaa, ja kultakäädyt kaulassa. Se oli todellakin mitä juhlallisin ja
liikuttavin näky.

Erkki ei tiennyt, pitikö hänen itkeä vai nauraa. Hän oli viime aikoina
todellakin ruvennut pelkäämään järkeään; alituinen ilkeä
päänkivistys vaivasi häntä. Kaamea tyhjyyden tunne oli täyttänyt
hänet ja kaikki ulkopuoliset vaikutukset kurkistivat sisälle hänen
sielunsa ikkunoista kuin kummitukset autioon huoneesen.

Vierasjoukko oli hiukan eri kuin kauppiaan luona. Oli kömpinyt


esiin joukko vanhoja tätejä, joita Erkki ei ollut kymmeneen vuoteen
nähnyt. Kaikki ne olivat melkein yhtä laihoja kuin äiti ja kaikki
tirkistelivät ne nyt ympärilleen kuin myyrät päivänpaisteessa. —
Aluksi meni kaikki hyvin. Vieraat, jotka olivat tulleet hiipien ja vilkuen
kummallekin kupeelleen, koteutuivat vähitellen. Tarjottiin viiniä,
tarjottiin makeisia. Naiset olivat pian saaneet sananvaihdon aikaan ja
herrat istuivat jo tyytyväisinä totilasiensa ääressä. — Erkki oli mitä
kohteliain isäntä, tarjosi tupakkaa, käski panemaan "toiselle jalalle",
kävi kilistämässä naisten kanssa ja istui heille hetkiseksi seuraa
pitämään. Mutta hän liikkui niinkuin automaatti ja hän näki kaikki kuin

You might also like