0% found this document useful (0 votes)
8 views

Practical Database Programming with Java 1st Edition Ying Bai download

The document provides information about the book 'Practical Database Programming with Java' by Ying Bai, including its details such as ISBN, file format, and publication year. It also lists various related programming books available for download on ebookultra.com. The content covers database programming concepts using Java, including JDBC API, database design, and application development considerations.

Uploaded by

zorbmdtwkh391
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views

Practical Database Programming with Java 1st Edition Ying Bai download

The document provides information about the book 'Practical Database Programming with Java' by Ying Bai, including its details such as ISBN, file format, and publication year. It also lists various related programming books available for download on ebookultra.com. The content covers database programming concepts using Java, including JDBC API, database design, and application development considerations.

Uploaded by

zorbmdtwkh391
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 53

Practical Database Programming with Java 1st Edition

Ying Bai download pdf

https://ebookultra.com/download/practical-database-programming-with-
java-1st-edition-ying-bai/

Visit ebookultra.com today to download the complete set of


ebook or textbook!
Here are some recommended products for you. Click the link to
download, or explore more at ebookultra.com

Practical Database Programming with Visual Basic NET


Second Edition Ying Bai(Auth.)

https://ebookultra.com/download/practical-database-programming-with-
visual-basic-net-second-edition-ying-baiauth/

Expert Oracle and Java Security Programming Secure Oracle


Database Applications with Java 1st Edition David Coffin

https://ebookultra.com/download/expert-oracle-and-java-security-
programming-secure-oracle-database-applications-with-java-1st-edition-
david-coffin/

Introduction to Programming with Java 3rd Edition John


Dean

https://ebookultra.com/download/introduction-to-programming-with-
java-3rd-edition-john-dean/

Introduction to Programming with Greenfoot Object Oriented


Programming in Java with Games and Simulations 1st Edition
Michael Kolling
https://ebookultra.com/download/introduction-to-programming-with-
greenfoot-object-oriented-programming-in-java-with-games-and-
simulations-1st-edition-michael-kolling/
Beginning Programming with Java For Dummies 4th Edition
Barry Burd

https://ebookultra.com/download/beginning-programming-with-java-for-
dummies-4th-edition-barry-burd/

Beginning Programming with Java for Dummies 5th Edition


Barry Burd

https://ebookultra.com/download/beginning-programming-with-java-for-
dummies-5th-edition-barry-burd/

Cocoon 2 Programming Web Publishing with XML and Java 1st


Edition Bill Brogden

https://ebookultra.com/download/cocoon-2-programming-web-publishing-
with-xml-and-java-1st-edition-bill-brogden/

Programming Wireless Devices with the Java 2 Platform 2nd


Edition Roger Riggs

https://ebookultra.com/download/programming-wireless-devices-with-the-
java-2-platform-2nd-edition-roger-riggs/

Programming Google App Engine with Java Build Run Scalable


Java Applications on Google s Infrastructure 1st Edition
Dan Sanderson
https://ebookultra.com/download/programming-google-app-engine-with-
java-build-run-scalable-java-applications-on-google-s-
infrastructure-1st-edition-dan-sanderson/
Practical Database Programming with Java 1st Edition
Ying Bai Digital Instant Download
Author(s): Ying Bai
ISBN(s): 9781118104699, 1118104692
Edition: 1
File Details: PDF, 103.86 MB
Year: 2011
Language: english
Practical Database
Programming with Java
IEEE Press
445 Hoes Lane
Piscataway, NJ 08854

IEEE Press Editorial Board


Lajos Hanzo, Editor in Chief

R. Abhari M. El-Hawary O. P. Malik


J. Anderson B-M. Haemmerli S. Nahavandi
G. W. Arnold M. Lanzerotti T. Samad
F. Canavero D. Jacobson G. Zobrist

Kenneth Moore, Director of IEEE Book and Information Services (BIS)


Practical Database
Programming with Java

Ying Bai
Department of Computer Science and Engineering
Johnson C. Smith University
Charlotte, North Carolina

IEEE PRESS

A John Wiley & Sons, Inc., Publication


Copyright © 2011 by the Institute of Electrical and Electronics Engineers, Inc.

Published by John Wiley & Sons, Inc., Hoboken, New Jersey


Published simultaneously in Canada

No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form or by
any means, electronic, mechanical, photocopying, recording, scanning, or otherwise, except as permitted under
Section 107 or 108 of the 1976 United States Copyright Act, without either the prior written permission of
the Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright Clearance
Center, Inc., 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 750-4470, or on the web at
www.copyright.com. Requests to the Publisher for permission should be addressed to the Permissions
Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011, fax (201)
748-6008, or online at http://www.wiley.com/go/permissions.

Limit of Liability/Disclaimer of Warranty: While the publisher and author have used their best efforts in
preparing this book, they make no representations or warranties with respect to the accuracy or
completeness of the contents of this book and specifically disclaim any implied warranties of merchantability
or fitness for a particular purpose. No warranty may be created or extended by sales representatives or
written sales materials. The advice and strategies contained herein may not be suitable for your situation. You
should consult with a professional where appropriate. Neither the publisher nor author shall be liable for any
loss of profit or any other commercial damages, including but not limited to special, incidental, consequential,
or other damages.

For general information on our other products and services or for technical support, please contact our
Customer Care Department within the United States at (800) 762-2974, outside the United States at (317)
572-3993 or fax (317) 572-4002.

Wiley also publishes its books in a variety of electronic formats. Some content that appears in print may not
be available in electronic formats. For more information about Wiley products, visit our web site at www.
wiley.com.

Library of Congress Cataloging-in-Publication Data:


Bai, Ying, 1956-
Practical database programming with Java / Ying Bai.
p. cm.
ISBN 978-0-470-88940-4 (pbk.)
1. Database management–Computer programs. 2. Database design. 3. Java (Computer program
language) 4. Computer software–Development. I. Title.
QA76.9.D3B314 2011
005.13'3–dc22
2011009323
obook ISBN 9781118104651
ePDF ISBN 9781118104668
ePub ISBN 9781118104699

Printed in the United States of America

10 9 8 7 6 5 4 3 2 1
This book is dedicated to my wife, Yan Wang,
and to my daughter, Xue Bai.
Contents

Preface xxiii

Acknowledgments xxv

Chapter 1 Introduction 1
What This Book Covers 2
How This Book Is Organized and How to Use This Book 3
How to Use the Source Code and Sample Databases 5
Instructor and Customer Support 6
Homework Solutions 7

Chapter 2 Introduction to Databases 9


2.1 What Are Databases and Database Programs? 10
2.1.1 File Processing System 10
2.1.2 Integrated Databases 11
2.2 Develop a Database 12
2.3 Sample Database 13
2.3.1 Relational Data Model 15
2.3.2 Entity–Relationship Model 16
2.4 Identifying Keys 17
2.4.1 Primary Key and Entity Integrity 17
2.4.2 Candidate Key 17
2.4.3 Foreign Keys and Referential Integrity 17
2.5 Define Relationships 18
2.5.1 Connectivity 18
2.6 ER Notation 21
2.7 Data Normalization 21
2.7.1 First Normal Form (1NF) 22
2.7.2 Second Normal Form (2NF) 23
2.7.3 Third Normal Form (3NF) 24
vii
viii Contents

2.8 Database Components in Some Popular Databases 26


2.8.1 Microsoft Access Databases 26
2.8.1.1 Database File 27
2.8.1.2 Tables 27
2.8.1.3 Queries 27
2.8.2 SQL Server Databases 27
2.8.2.1 Data Files 28
2.8.2.2 Tables 28
2.8.2.3 Views 29
2.8.2.4 Stored Procedures 29
2.8.2.5 Keys and Relationships 29
2.8.2.6 Indexes 30
2.8.2.7 Transaction Log Files 30
2.8.3 Oracle Databases 30
2.8.3.1 Data Files 31
2.8.3.2 Tables 31
2.8.3.3 Views 31
2.8.3.4 Stored Procedures 31
2.8.3.5 Indexes 32
2.8.3.6 Initialization Parameter Files 33
2.8.3.7 Control Files 33
2.8.3.8 Redo log Files 33
2.8.3.9 Password Files 34
2.9 Create Microsoft Access Sample Database 34
2.9.1 Create the LogIn Table 34
2.9.2 Create the Faculty Table 36
2.9.3 Create the Other Tables 37
2.9.4 Create Relationships among Tables 39
2.10 Create Microsoft SQL Server 2008
Sample Database 44
2.10.1 Create the LogIn Table 46
2.10.2 Create the Faculty Table 48
2.10.3 Create Other Tables 49
2.10.4 Create Relationships among Tables 54
2.10.4.1 Create Relationship between the LogIn and the Faculty Tables 54
2.10.4.2 Create Relationship between the LogIn and the Student Tables 57
2.10.4.3 Create Relationship between the Faculty and the Course Tables 58
2.10.4.4 Create Relationship between the Student and the
StudentCourse Tables 59
2.10.4.5 Create Relationship between the Course and the
StudentCourse Tables 60
2.11 Create Oracle 10g XE Sample Database 61
2.11.1 Create an Oracle User Database 63
2.11.2 Add New Data Tables into the Oracle User Database 64
2.11.2.1 Create the LogIn Table 65
2.11.2.2 Create the Faculty Table 69
2.11.2.3 Create Other Tables 74
Contents ix

2.11.3 Create the Constraints Between Tables 77


2.11.3.1 Create the Constraints between the LogIn and Faculty Tables 77
2.11.3.2 Create the Constraints between the LogIn and Student Tables 79
2.11.3.3 Create the Constraints between the Course and
Faculty Tables 80
2.11.3.4 Create the Constraints between the StudentCourse
and Student Tables 82
2.11.3.5 Create the Constraints between the StudentCourse
and Course Tables 82
2.12 Chapter Summary 85
Homework 85

Chapter 3 JDBC API and JDBC Drivers 89


3.1 What Are JDBC and JDBC API? 89
3.2 JDBC Components and Architecture 90
3.3 How Does JDBC Work? 92
3.3.1 Establish a Connection 92
3.3.1.1 Using DriverManager to Establish a Connection 92
3.3.1.2 Using DataSource Object to Establish a Connection 93
3.3.2 Build and Execute SQL Statements 94
3.3.3 Process Results 94
3.3.3.1 Using ResultSet Object 95
3.3.3.2 Using RowSet Object 95
3.4 JDBC Driver and Driver Types 95
3.4.1 Type I: JDBC-ODBC Bridge Driver 96
3.4.2 Type II: Native-API-Partly-Java Driver 97
3.4.3 Type III: JDBC-Net-All-Java Driver 97
3.4.4 Type IV: Native-Protocol-All-Java Driver 98
3.5 JDBC Standard Extension API 99
3.5.1 JDBC DataSource 99
3.5.1.1 Java Naming and Directory Interface 100
3.5.1.2 Deploy and Use a Basic Implementation of DataSource 100
3.5.2 JDBC Driver-Based Connection Pooling 102
3.5.3 Distributed Transactions 104
3.5.3.1 Distributed Transaction Components and Scenarios 104
3.5.3.2 The Distributed Transaction Process 105
3.5.4 JDBC RowSet 106
3.5.4.1 Introduction to Java RowSet Object 106
3.5.4.2 Implementation Process of a RowSet Object 107
3.6 Chapter Summary 108
Homework 109

Chapter 4 JDBC Application Design Considerations 113


4.1 JDBC Application Models 113
4.1.1 Two-Tier Client-Server Model 113
4.1.2 Three-Tier Client–Server Model 114
x Contents

4.2 JDBC Applications Fundamentals 115


4.2.1 Loading and Registering Drivers 116
4.2.2 Getting Connected 117
4.2.2.1 The DriverManager and Driver Classes 117
4.2.2.2 Using the DriverManager.getConnection() Method 119
4.2.2.3 Using the Driver.connect() Method 119
4.2.2.4 The JDBC Connection URL 120
4.2.2.5 Establish a Database Connection 120
4.2.3 Executing Statements 122
4.2.3.1 Overview of Statement Objects and Their Execution Methods 123
4.2.3.2 Using the Statement Object 126
4.2.3.3 Using the PreparedStatement Object 127
4.2.3.4 Using the CallableStatement Object 131
4.2.3.5 More about the Execution Methods 135
4.2.3.6 Creating and Executing SQL Statements 137
4.2.4 Retrieving Results 140
4.2.4.1 The ResultSet Interface 141
4.2.4.2 Getting and Processing the ResultSet Object 142
4.2.5 Using JDBC MetaData Interfaces 145
4.2.5.1 Using the ResultSetMetaData Interface 145
4.2.5.2 Using the DatabaseMetaData Interface 147
4.2.5.3 Using the ParameterMetaData Interface 149
4.2.6 Closing the Connection and Statements 149
4.3 Chapter Summary 151
Homework 152

Chapter 5 Introduction to NetBeans IDE 155


5.1 Overview of the NetBeans IDE 6.8 156
5.1.1 The NetBeans Platform 158
5.1.2 The NetBeans Open Source IDE 159
5.2 Installing and Configuring the NetBeans IDE 6.8 161
5.3 Exploring NetBeans IDE 6.8 164
5.3.1 An Overview of NetBeans IDE 6.8 GUI 165
5.3.2 Build a New Java Project 167
5.3.2.1 Build a Java Application Project 168
5.3.2.2 Build a Java Desktop Application 178
5.3.2.3 Build a Java Class Library 183
5.3.2.4 Build a Java Project with Existing Sources 191
5.3.2.5 Build a Java Free-Form Project 192
5.3.3 Build a JavaFX Application Project 193
5.3.3.1 Overview of JavaFX 193
5.3.3.2 JavaFX SDK 194
5.3.3.3 JavaFX Script Language 195
5.3.3.4 Build a JavaFX Script Application 195
5.3.3.5 Build a JavaFX Desktop Business Application 201
5.3.3.6 Build JavaFX Mobile Business Application 214
Contents xi

5.3.4 Build
a Java Web Application Project 214
5.3.5 Build
a Java Enterprise Edition Project 214
5.3.5.1 Overview of Java Enterprise Edition 6 215
5.3.5.2 Install and Configure Java EE 6 Software and Tools 222
5.3.5.3 Create a Java EE 6 Web Application Project 224
5.3.5.4 Creating the Entity Classes from the Database 227
5.3.5.5 Creating Enterprise Java Beans 229
5.3.5.6 Using JavaServer Faces (JSF) 2.0 232
5.3.5.7 Creating the Manufacturer Managed Bean 234
5.3.5.8 Creating the Manufacturer Listing Web Page 235
5.3.5.9 Building and Running the First Java EE 6 Web Page 238
5.3.5.10Deploying the Project Using the Administration Console 239
5.3.5.11Creating the Manufacturer Details Web Page 241
5.3.5.12Creating and Editing the faces-config.xml Configuration File 242
5.3.5.13Editing the General Web Application Configuration
File web.xml 247
5.3.5.14 Modifying the JSF Pages to Perform Page Switching 248
5.3.5.15 Building and Running the Entire Java EE 6 Project 249
5.3.6 Build a Maven Project 251
5.3.6.1 Introduction to Maven 251
5.3.6.2 Introduction to Hibernate Framework 253
5.3.6.3 Installing and Configuring the Apache Maven 255
5.3.6.4 Configuring Maven Inside the NetBeans IDE 258
5.3.6.5 Creating a Maven Database Application Project 259
5.3.6.6 Adding Hibernate Files and Dependencies 261
5.3.6.7 Generating Hibernate Mapping Files and Java Classes 265
5.3.6.8 Creating the Application GUI 268
5.3.6.9 Creating the Query in the HQL Query Editor 270
5.3.6.10 Adding the Query to the GUI Form 272
5.3.7 Build a PHP Project 276
5.3.7.1 Introduction to PHP 276
5.3.7.2 Downloading and Installing Apache HTTP Web Server 277
5.3.7.3 Configuring and Testing the Installed Apache HTTP
Web Server 279
5.3.7.4 Downloading and Installing the PHP Engine 280
5.3.7.5 Testing the Installed PHP Engine 281
5.3.7.6 Creating a PHP Project 283
5.3.7.7 Downloading and Configuring MySQL Database Server 285
5.3.7.8 Configuring the MySQL Server in NetBeans IDE 288
5.3.7.9 Creating Our Sample Database MySQLSample 290
5.3.7.10 Building the Functions for the PHP Project 293
5.3.7.11 Running and Testing the PHP Project 297
5.3.8 Build a NetBeans Module 299
5.3.8.1 Create a New NetBeans Module Project 300
5.3.8.2 Create the Customer Entity Class and Wrap It into a Module 301
5.3.8.3 Create Other Related Modules 303
5.3.8.4 Create the User Interface Module 306
xii Contents

5.3.8.5 Set Dependencies between Modules 309


5.3.8.6 Build and Run the NetBeans Module Project 311
5.4 Chapter Summary 312
Homework 313

PART I Building Two-Tier Client–Server Applications 317


Chapter 6 Query Data from Databases 319
Section I Query Data Using Java Persistence API Wizards 319
6.1 Java Persistence APIs 319
6.1.1 Features of JPA 320
6.1.2 Advantages of JPA 320
6.1.3 Architecture and Function of JPA 320
6.2 Query Data Using Java Persistence API Wizards (JPA) 321
6.2.1 Connect to Different Databases and Drivers Using
JPA Wizards 322
6.2.1.1 Connect to the Microsoft Access Database
CSE_DEPT 322
6.2.1.2 Connect to the Microsoft SQL Server 2008 Express
Database CSE_DEPT 323
6.2.1.3 Connect to the Oracle Database 10g Express Edition
CSE_DEPT 333
6.2.2 Create a Java Application Project to Query SQL
Server Database 338
6.2.3 Use Java JPA Wizards to Query the LogIn Table 340
6.2.4 Use Java Persistence API to Build Entity Classes
from Databases 341
6.2.5 Add LogIn Entity Manager and JPA Components
into the Project 344
6.2.5.1 Entity Classes Mapping Files 345
6.2.5.2 Use Java Persistence Query Language Statement 346
6.2.5.3 Static and Dynamic JPA Query API 346
6.2.5.4 Positional Parameters and Named Parameters 348
6.2.5.5 Use Entity Classes to Build a Query to Perform the
Login Process 349
6.2.5.6 Use a JDialog as a MessageBox 351
6.2.6 Use Java JPA Wizards to Create Selection Window 354
6.2.6.1 Add a New JFrame as the SelectionFrame Form 354
6.2.6.2 Modify Codes to Coordinate Operations in SelectionFrame
and LogInFrame 358
6.2.7 Use Java JPA Wizards to Query the Faculty Table 360
6.2.7.1 Create a New FacultyFrame Class and Add It into Our Project 360
6.2.7.2 Add Faculty Entity Manager and JPA Components into
the Project 362
6.2.7.3 Use Entity Classes to Perform Data Query from the
Faculty Table 363
Contents xiii

6.2.8 Use Java JPA Wizards to Query the Course Table 372
6.2.8.1 Create a New CourseFrame Class and Add It into Our Project 372
6.2.8.2 Add Course Entity Manager and JPA Components into
the Project 373
6.2.8.3 Use Entity Classes to Perform Data Query from the
Course Table 374
6.2.9 Use Java JPA Wizards to Query Oracle Database 381

Section II Query Data Using Java Runtime Objects Method 383


6.3 Introduction to Runtime Object Method 383
6.4 Create a Java Application Project to Access the SQL Server Database 384
6.4.1 Create Graphic User Interfaces 384
6.4.2 Perform the Data Query for the LogIn Table 388
6.4.2.1 Load and Register Database Drivers 389
6.4.2.2 Connect to Databases and Drivers 393
6.4.2.3 Create and Manage Statement Object 394
6.4.2.4 Use PreparedStatement Object to Perform Dynamic Query 395
6.4.2.5 Use ResultSet Object 398
6.4.3 Develop the Codes for the SelectionFrame Form 399
6.4.3.1 Modify Codes to Coordinate between SelectionFrame
and LogInFrame 402
6.4.4 Perform the Data Query for the Faculty Table 403
6.4.4.1 Add Java Package and Coding for the Constructor 403
6.4.4.2 Query Data using JDBC MetaData Interface 404
6.4.4.3 Query Data Using the execute() Method to Perform a
Query-Related Action 410
6.4.4.4 Query Data Using the CallableStatement Method 412
6.4.5 Perform the Data Query for the Course Table 412
6.4.5.1 Import Java Packages and Coding for the
CourseFrame Constructor 413
6.4.5.2 Query Data from Course Table Using CallableStatements 414
6.4.5.3 Coding for the Select Button Click Event Handler to Perform
CallableStatement Query 420
6.4.5.4 Build the SQL Stored Procedure dbo.FacultyCourse 421
6.4.5.5 Coding for the CourseList Box to Display Detailed Information for the
Selected Course 427
6.4.5.6 Coding for the Back Button Click Event Handler 429
6.4.6 Query Data from the Student Table Using the Java RowSet Object 430
6.4.6.1 Introduction to Java RowSet Object 430
6.4.6.2 The Operational Procedure of Using the JDBC
RowSet Object 432
6.4.6.3 Build a Graphical User Interface StudentFrame Form 433
6.4.6.4 Coding for the Constructor of the StudentFrame Class 435
6.4.6.5 Coding for the Select Button Event Handler to Query Data Using the
CachedRowSet 436
6.4.6.6 Add and Display a Student Picture for the Selected Student 439
xiv Contents

6.5 Create a Java Application Project to Access the Oracle Database 441
6.5.1 Create Graphic User Interfaces 442
6.5.2 Perform the Data Query for the LogIn Table 442
6.5.2.1 Add Oracle JDBC Driver to the Project 442
6.5.2.2 Load and Register Oracle JDBC Driver 443
6.5.2.3 The JDBC Uniform Resource Locators (URLs) 443
6.5.3 Develop the Codes for the SelectionFrame Form 445
6.5.4 Perform the Data Query for the Faculty Table 445
6.5.4.1 Create an Oracle Package FacultyInfo 446
6.5.4.2 Develop the Codes to Perform the CallableStatement Query 447
6.5.5 Perform the Data Query for the Course Table 449
6.5.5.1 Create an Oracle Package FacultyCourse 449
6.5.5.2 Develop the Codes to Perform the CallableStatement Query 451
6.5.6 Query Data from the Student Table Using the Java RowSet Object 453
6.5.6.1 Modify the Codes in the Constructor of the
StudentFrame Class 453
6.5.6.2 Modify the Codes in the Select Button Click Event Handler 453
6.6 Chapter Summary 455
Homework 457

Chapter 7 Insert, Update, and Delete Data from Databases 463


Section I Insert, Update and Delete Data Using Java Persistence API Wizards 463
7.1 Perform Data Manipulations to SQL Server Database Using JPA
Wizards 464
7.1.1 Perform Data Insertion to SQL Server Database
Using JPA Wizards 464
7.1.1.1 Modify the FacultyFrame Window Form 465
7.1.1.2 The Persist Method in the EntityManager Class 466
7.1.1.3 Develop the Codes for the Insert Button Event Handler 468
7.1.1.4 Develop the Codes for the Validation of the Data Insertion 469
7.1.1.5 Build and Run the Project to Test the Data Insertion 471
7.1.2 Perform Data Updating to SQL Server Database Using JPA
Wizards 474
7.1.2.1 Develop the Codes for the Update Button Event Handler 474
7.1.2.2 Build and Run the Project to Test the Data Updating 476
7.1.3 Perform Data Deleting to SQL Server Database Using JPA Wizards 478
7.1.3.1 Develop the Codes for the Delete Button Event Handler 478
7.1.3.2 Build and Run the Project to Test the Data Deletion 480
7.2 Perform Data Manipulations to Oracle Database Using JPA Wizards 482
7.2.1 Perform Data Insertion to Oracle Database Using JPA Wizards 482
7.2.1.1 Modify the FacultyFrame Window Form 482
7.2.1.2 Develop the Codes for the Insert Button Event Handler 483
7.2.2 Perform Data Updating to Oracle Database Using
JPA Wizards 485
7.2.3 Perform Data Deleting to Oracle Database Using JPA Wizards 487
Contents xv

Section II Insert, Update and Delete Data Using Java Runtime Objects Method 488

7.3 Perform Data Manipulations to SQL Server Database Using Java


Runtime Object 488
7.3.1 Perform Data Insertion to SQL Server Database Using Java
Runtime Object 488
7.3.1.1 Modify the FacultyFrame Window Form 489
7.3.1.2 Develop the Codes for the Insert Button Event Handler 490
7.3.1.3 Develop the Codes for the Validation of the Data Insertion 492
7.3.1.4 Build and Run the Project to Test the Data Insertion 493
7.3.2 Perform Data Updating to SQL Server Database Using Java
Runtime Object 496
7.3.2.1 Develop the Codes for the Update Button Event Handler 496
7.3.2.2 Build and Run the Project to Test the Data Updating 497
7.3.3 Perform Data Deleting to SQL Server Database Using Java
Runtime Object 499
7.3.3.1 Develop the Codes for the Delete Button Event Handler 499
7.3.3.2 Build and Run the Project to Test the Data Deleting 500
7.4 Perform Data Manipulations to Oracle Database Using Java Runtime Object 502
7.4.1 Perform Data Insertion to Oracle Database Using Java Runtime
Object 503
7.4.1.1 Modify the FacultyFrame Window Form 503
7.4.1.2 Develop the Codes for the Insert Button Event Handler 504
7.4.2 Perform Data Updating to Oracle Database Using Java Runtime
Object 507
7.4.3 Perform Data Deleting to Oracle Database Using Java Runtime
Object 509
7.5 Perform Data Manipulations Using Updatable ResultSet 510
7.5.1 Introduction to ResultSet Enhanced Functionalities and Categories 510
7.5.2 Perform Data Manipulations Using Updatable ResultSet Object 512
7.5.2.1 Insert a New Row Using the Updatable ResultSet 512
7.5.2.2 Update a Row Using the Updatable ResultSet 517
7.5.2.3 Delete a Row Using the Updatable ResultSet 520
7.6 Perform Data Manipulations Using Callable Statements 522
7.6.1 Perform Data Manipulations to SQL Server Database Using
Callable Statements 523
7.6.1.1 Insert Data to SQL Server Database Using Callable Statements 523
7.6.1.2 Update Data to SQL Server Database Using Callable
Statements 530
7.6.1.3 Delete Data from SQL Server Database Using Callable
Statements 536
7.6.2 Perform Data Manipulations to Oracle Database Using Callable
Statements 540
7.6.2.1 Modify the CourseFrame Form Window 541
7.6.2.2 Build Three Oracle Stored Procedures 542
7.6.2.3 Build and Run the Project to Test the Data Manipulations 547
xvi Contents

7.7 Chapter Summary 550


Homework 551

PART II Building Three-Tier Client–Server Applications 555


Chapter 8 Developing Java Web Applications to Access Databases 557
8.1 A Historical Review about Java Web Application Development 557
8.1.1 Using Servlet and HTML Web Pages for Java Web Applications 558
8.1.2 Using JavaServer Pages (JSP) Technology for Java
Web Applications 560
8.1.3 Using Java Help Class Files for Java Web Applications 564
8.1.4 Using Java Persistence APIs for Java Web Applications 569
8.1.5 Using the JSP Implicit Object Session for Java Web Applications 572
8.1.5.1 Modify the FacultyPage JSP File to Use the Session Object 572
8.1.5.2 Build the Transaction JSP File FacultyQuery.jsp 574
8.1.5.3 Build the Help Class FacultyBean 575
8.1.6 Using Java Beans Technology for Java Web Applications 578
8.1.6.1 Modify the Help Class FacultyBean to Make it a Java
Bean Class 580
8.1.6.2 Build a New Starting Web Page FacultyBeanPage 583
8.1.7 Using JavaServer Faces Technology for Java
Web Applications 585
8.1.7.1 The Application Configuration Resource File
faces-config.xml 586
8.1.7.2 Sample JavaServer Face Page Files 587
8.1.7.3 The Java Bean Class File 590
8.1.7.4 The Web Deployment Descriptor File web.xml 591
8.1.7.5 A Complete Running Procedure of JSF Web Applications 591
8.2 Java EE Web Application Model 597
8.2.1 Java EE Web Applications with and without EJB 598
8.3 The Architecture and Components of Java Web Applications 599
8.3.1 Java EE Containers 600
8.3.2 Java EE 6 APIs 601
8.3.2.1 EJBs API Technology 602
8.3.2.2 Java Servlet API Technology 602
8.3.2.3 JSP API Technology 603
8.3.2.4 JavaServer Faces API Technology 604
8.3.2.5 Java Persistence API 606
8.3.2.6 Java Transaction API 606
8.3.2.7 Java Message Service API 607
8.3.3 Java Web Application Life Cycle 607
8.3.4 Java Web Modules 607
8.3.5 Java Web Frameworks 609
8.4 Getting Started with Java Web Applications Using NetBeans IDE 611
8.4.1 Create a Java Web Project 611
8.4.2 Create the Entity Classes from the Database 613
Contents xvii

8.4.3 Create Five Web Pages Using Microsoft Office Publisher 2007 614
8.4.3.1 Create the LogIn Page 615
8.4.3.2 Create the Selection Page 617
8.4.3.3 Create the Faculty Page 619
8.4.3.4 Create the Course Page 622
8.4.3.5 Create the Student Page 625
8.5 Build Java Web Project to Access SQL Server Database 625
8.5.1 Access and Query the LogIn Table Using JSP and Help Class Files 626
8.5.1.1 Modify the LogIn.jsp Page and Create LogInQuery.jsp File 627
8.5.1.2 Create the Java Help Class File LogInQuery.java 629
8.5.1.3 Create a Dialog Box as the Message Box 630
8.5.1.4 Develop the Codes for the Help Class File 632
8.5.1.5 Add the JDBC Driver for the SQL Server Database into
the Project 635
8.5.2 Build the Selection Page 637
8.5.3 Query the Faculty Table Using JSP and JSP Implicit
Session Object 640
8.5.3.1 Modify the Faculty.jsp Page 641
8.5.3.2 Create the FacultyProcess.jsp Page 642
8.5.3.3 Create the Help Class File FacultyQuery.java 645
8.5.4 Insert New Records to the Faculty Table Using JSP and Java Beans 650
8.5.4.1 Modify the Java Help Class FacultyQuery to Make it Java
Bean Class 651
8.5.4.2 Modify the FacultyProcess.jsp Page to Handle Faculty Data
Collection and Insertion 652
8.5.5 Update and Delete Data from the Faculty Table Using JSP and Java
Beans Techniques 656
8.5.5.1 Create a New Java Session Bean Class 656
8.5.5.2 Modify the FacultyProcess Page to Handle Faculty
Data Updating 659
8.5.5.3 Add a Method to the Session Bean to Perform Faculty
Data Deleting 663
8.5.5.4 Modify the FacultyProcess Page to Handle Faculty
Data Deleting 664
8.5.6 Query Data from the Course Table Using JavaServer Faces and
Java Beans 668
8.5.6.1 Modify the Course Page to Make it JavaServer Face Page 668
8.5.6.2 Build the JavaServer Face Managed Bean CourseBean 672
8.5.6.3 Build the Session Bean for Entity Classes CourseFacade 676
8.5.6.4 Set Up Calling Relationship between the JSF Bean and
the Session Bean 680
8.5.6.5 Build and Run the Project to Test the Course Information
Query Functions 681
8.5.7 Update Records from the Course Table Using JavaServer Faces and Java
Beans 682
8.5.7.1 Create Codes for the Update() Method in the JSF
Managed Bean 683
xviii Contents

8.5.7.2 Create Codes for the UpdateCourse() Method in the Session


Bean 684
8.5.8 Delete Records from the Course Table Using JavaServer Faces and
Java Beans 687
8.5.8.1 Build Codes for the Delete() Method in the JSF
Managed Bean 687
8.5.8.2 Build Codes for the DeleteCourse() Method in the
Session Bean 688
8.6 Build Java Web Project to Access and Manipulate Oracle Database 690
8.6.1 Create a Java Web Application Project 691
8.6.2 Modify the Hibernate Configuration File 692
8.6.3 Create Hibernate Utility Files and Mapping Files 694
8.6.3.1 Create the HibernateUtil.java Helper File 694
8.6.3.2 Generate Hibernate Mapping Files and Java Classes 695
8.6.4 Query the LogIn Table Using JSF Pages and Java Beans 697
8.6.4.1 Modify the LogIn.jsp Page to Make it JSF Page 698
8.6.4.2 Create and Build the Java Managed Bean LogInBean Class 700
8.6.5 Build the SelectionPage and the SelectionBean Class 703
8.6.6 Build the ErrorPage to Display any Error Information 707
8.6.7 Set Up the Navigation Rules for Existing Web Pages 708
8.6.8 Query the Faculty Table Using JavaServer Faces and Java Beans 711
8.6.8.1 Modify the Faculty.jsp to Make it Our JSF Page FacultyPage.jsp 711
8.6.8.2 Build the Java Session Bean FacultySessionBean to Handle
Data Actions 715
8.6.8.3 Build the Java Managed Bean FacultyMBean to Manage
Data Actions 719
8.6.8.4 Run the Project to Test the Faculty Information Query 723
8.6.8.5 Modify the faces-config.xml File to Run Project in a Web
Pages Sequence 724
8.6.8.6 Add Codes to the Project to Display a Selected Faculty Image 725
8.6.8.7 Run the Entire Project to Test the Faculty Information Query 727
8.6.9 Insert New Records to the Faculty Table Using JavaServer Faces
and Java Beans 728
8.6.9.1 Add the Codes to the Java Managed Bean to Manage
Data Insertions 728
8.6.9.2 Build the InsertFaculty() Method for the Session Bean to Perform
Data Insertions 730
8.6.9.3 Run the Project to Test the New Faculty Record Insertion 730
8.6.10 Update and Delete Records from the Faculty Table Using JSF Page
and Java Bean 732
8.6.10.1 Add the Codes to the Java Managed Bean to Manage
Data Updating 732
8.6.10.2 Build the UpdateFaculty() Method in the Session Bean to Perform
Data Updating 734
8.6.10.3 Run the Project to Test the Faculty Record Updating Action 735
8.6.10.4 Add the Codes to the Java Managed Bean to Manage
Data Deleting 737
Contents xix

8.6.10.5 Build the DeleteFaculty() Method in the Session Bean to


Perform Data Deleting 738
8.6.10.6 Run the Project to Test the Faculty Record Deleting Action 739
8.6.10.7 Build the Codes for the Back Button Action Attribute in
JSF Page 741
8.6.11 Query Data from the Course Table Using JavaServer Faces
and Java Beans 741
8.6.11.1 Build the JavaServer Face Managed Bean CourseBean 742
8.6.11.2 Build the Java Session Bean CourseSessionBean 746
8.6.11.3 Set Up Calling Relationship between the Managed Bean and the
Session Bean 750
8.6.11.4 Run and Test the Single Page—CoursePage.jsp 750
8.6.11.5 Set Up the Navigation Rules for the CoursePage and the
SelectionPage 751
8.6.11.6 Run and Test the Project in a Sequence Way 754
8.6.12 Update and Delete Records for the Course Table Using JSF Pages
and Java Beans 754
8.6.12.1 Add the Codes to the Java Managed Bean to Manage
Data Updating 754
8.6.12.2 Build the UpdateCourse() Method in the Session Bean to Perform
Data Updating 755
8.6.12.3 Run the Project to Test the Course Record Updating Action 757
8.6.12.4 Add the Codes to the Java Managed Bean to Manage
Data Deleting 759
8.6.12.5 Build the DeleteCourse() Method in the Session Bean to
Perform Data Deleting 760
8.6.12.6 Run the Project to Test the Course Record Deleting Action 761
8.6.12.7 Build the Codes for the Back Button Action Attribute
in JSF Page 762
8.7 Chapter Summary 764
Homework 765

Chapter 9 Developing Java Web Services to Access Databases 769


9.1 Introduction to Java Web Services 770
9.1.1 REST-Based Web Services 770
9.1.2 SOAP-Based Web Services 771
9.2 The Structure and Components of SOAP-Based Web Services 772
9.3 The Procedure of Building a Typical SOAP-Based Web Service
Project 774
9.3.1 Create a New Java Web Application Project WSTestApplication 775
9.3.2 Create A New Java SOAP-Based Web Service Project
WSTest 776
9.3.3 Add Desired Operations to the Web Service 777
9.3.4 Deploy and Test the Web Service on the Selected Container 780
9.3.5 Create Web Service Clients to Consume the Web Service 782
9.4 Getting Started with Java Web Services Using NetBeans IDE 786
xx Contents

9.5 Build Java Web Service Projects to Access SQL Server Database 787
9.5.1 Create a New Java Web Application Project WebServiceSQLApp 787
9.5.2 Create a New Java SOAP-Based Web Service Project WebServiceSQL 788
9.5.3 Add Desired Operations to the Web Service 789
9.5.4 Add New Operations to Our Web Services to Perform Data Query 790
9.5.5 Build the User-Defined Method DBConnection() 792
9.5.6 Deploy the Web Service Project and Test the Data Query Function 793
9.6 Build a Windows-Based Web Client Project to Consume the Web Service 795
9.6.1 Copy the FacultyFrame and MsgDislog Components as GUIs 795
9.6.2 Create a Web Service Reference for Our Windows-Based Client
Project 797
9.6.3 Develop the Codes to Call Our Web Service Project 799
9.6.4 Build and Run Our Client Project to Query Faculty Data via
Web Service 801
9.7 Build a Web-Based Client Project to Consume the Web Service 801
9.7.1 Create a Web-Based Client Project WebClientSQL 802
9.7.2 Create a Java Managed Bean FacultyMBean and Add the JDialog
Class MsgDialog 803
9.7.3 Create a Web Service Reference for Our Web-Based Client Project 804
9.7.4 Build the Codes to Call the Web Service to Perform Data Query 805
9.7.5 Build and Run Our Client Project to Query Faculty Data via
Web Service 808
9.8 Build Java Web Service to Insert Data into the SQL Server Database 808
9.8.1 Add a New Operation InsertFaculty() into Our Web Service Project 809
9.8.2 Deploy the Web Service Project 811
9.9 Build a Windows-Based Web Client Project to Consume the Web Service 811
9.9.1 Refresh the Web Service Reference for Our Windows-Based
Client Project 812
9.9.2 Develop the Codes to Call Our Web Service Project 812
9.9.3 Build and Run Our Client Project to Insert Faculty Data via
Web Service 814
9.10 Build a Web-Based Client Project to Consume the Web Service 815
9.10.1 Refresh the Web Service Reference for Our Web-Based
Client Project 816
9.10.2 Develop the Codes to Call Our Web Service Project 816
9.10.3 Build and Run Our Client Project to Insert Faculty Data via
Web Service 818
9.11 Build Java Web Service to Update and Delete Data from the SQL
Server Database 819
9.11.1 Add a New Operation UpdateFaculty() to Perform the Faculty
Data Updating 820
9.11.2 Add a New Operation DeleteFaculty() to Perform the Faculty
Data Deleting 822
9.11.3 Deploy and Test the Web Service Project 824
9.12 Build a Windows-Based Web Client Project to Consume the Web Service 827
9.12.1 Refresh the Web Service Reference for Our Windows-Based
Client Project 827
Contents xxi

9.12.2 Develop the Codes to Call Our Web Service Project 827
9.12.2.1 Build the Codes to Call the UpdateFaculty() Operation 827
9.12.2.2 Build the Codes to Call the DeleteFaculty() Operation 830
9.12.3 Build and Run Our Client Project to Update and Delete Faculty Record via
Web Service 831
9.13 Build a Web-Based Client Project to Consume the Web Service 834
9.13.1 Refresh the Web Service Reference for Our Web-Based Client Project 834
9.13.2 Develop the Codes to Call Our Web Service Operation
UpdateFaculty() 835
9.13.3 Develop the Codes to Call Our Web Service Operation
DeleteFaculty() 837
9.13.4 Build and Run Our Client Project to Update and Delete Faculty Record via
Web Service 838
9.14 Build Java Web Service Projects to Access Oracle Databases 840
9.14.1 Create a New Java Web Application Project WebServiceOracleApp 841
9.14.2 Create a New Java SOAP-Based Web Service Project
WebServiceOracle 842
9.14.3 Add a JDialog Class into the Web Services Project 843
9.14.4 Add Java Persistence API and Entity Classes from Database 843
9.14.5 Add Java Session Beans for Entity Classes 845
9.14.6 The Organization of Web Service Operations and Session Bean
Methods 848
9.14.7 Add the Session Bean Classes CourseFacade into Our Web Service 849
9.14.8 Create and Build the Session Bean Methods and Web Service
Operations 849
9.14.8.1 Create and Build Session Bean Method getCourseID() 850
9.14.8.2 Create and Build Web Service Operation QueryCourseID() 852
9.14.8.3 Build and Run the Web Service to Test the course_id Query
Function 854
9.14.8.4 Create and Build Session Bean Method getCourse() 855
9.14.8.5 Create and Build Web Service Operation QueryCourse() 857
9.14.8.6 Build and Run the Web Service to Test the Course Query
Function 858
9.14.8.7 Create and Build Session Bean Method newCourse() 860
9.14.8.8 Create and Build Web Service Operation InsertCourse() 862
9.14.8.9 Build and Deploy the Web Service Project 863
9.14.8.10 Create and Build Session Bean Method setCourse() 864
9.14.8.11 Create and Build Web Service Operation UpdateCourse() 867
9.14.8.12 Build and Deploy the Web Service Project 868
9.14.8.13 Create and Build Session Bean Method removeCourse() 868
9.14.8.14 Create and Build Web Service Operation DeleteCourse() 870
9.14.8.15 Build and Test the Web Service Project 871
9.15 Build a Windows-Based Web Client Project to Consume the Web Service 873
9.15.1 Create a New Windows-Based Web Client Project WinClientOracle 873
9.15.2 Copy the CourseFrame and MsgDislog Components as GUIs 874
9.15.3 Create a Web Service Reference for Our Windows-Based Client
Project 875
Random documents with unrelated
content Scribd suggests to you:
"Kirkko, josta puhutte", jatkoi Olavi, kääntyneenä arkkipiispaan ja
panematta mitään huomiota muiden katseihin ja sanoihin — "kirkko,
josta puhutte, on ihmiskäsien rakentama ylhäältä jalkoihinsa saakka,
se on irvikuva siitä kristinopista, jota meidän herramme ja apostolit
opettivat ja jota he vielä opettavat sanojensa kautta pyhässä
raamatussa. Kas, sen kirkon palvelija tahdon minä olla, sen kirkon
alttarilta ojennan käsivarteni teille, arkkipiispa Johan, ja teille kaikille
ja kysyn teiltä arkkipiispan sanoilla: annatteko kauvemmin sen
odottaa turhaan saadakseen syleillä kadotettua poikaansa?"

"Puhun nämä sanat", jatkoi hän hetkisen pysähdyksen jälkeen,


"koska te itse olette tahtoneet antaa tälle keskustelulle ystävien
keskeisen puheen muodon, armollinen herra; ja jollette mitään
muuta, niin ainakin sen voitte päästä tietämään, ettei teillä ole
mestari Olaville tarjottavana mitään, joka voisi hänet saada
luopumaan palvelemasta sitä herraa, jolle hän on vannonut
uskollisuutta."

Vesteråsin priori oli jälleen heittämäisillään pistosanan, mutta


arkkipiispa ennätti ennen.

"Jumala paratkoon", sanoi tämä, "minusta näyttää liian selvältä,


että teitä on mahdoton saada luopumaan siitä mitä pidätte oikeana,
vaikkapa sille ei voi antaakaan muuta nimeä kuin kerettiläisyys ja
lutherilaisuus. Muistakaa kuitenkin, mestari Olavi, että pyhä kirkko
vielä seisoo ja sillä on voimaa ja keinoja käytettäväksi pyhään
tarkotukseensa, josta teillä nyt ei ole mitään käsitystä. Viekää se
muisto mukananne tästä kohtauksesta, mestari Olavi. Viime kerralla
Upsalassa tahdoin puhua teille kuten kirkon ylipaimen, nyt kuten
ystävä ystävälleen; … kun kolmannen kerran tapaamme taitaa käydä
toisin."
Arkkipiispa viittasi kädellään merkiksi, ettei hänellä ollut enempää
sanottavaa, ja Olavi kääntyi mennäkseen. Mutta silloin astui
dominikaanipriori esiin ja lausui kääntyen arkkipiispaan:

"Kunnianarvoisa isä, arkkipiispa Johan! Käännyn teidän armonne


puoleen pyhän kirkon nimessä ja syytän tätä teiniä, mestari Olavia,
raskaasta synnistä pyhää kirkkoa vastaan. Hän aikoo vietellä
neitsyen, joka sitäpaitsi on luvattu Kristuksen morsiameksi; hän
aikoo vietellä tämän avioliittoon ja siten äärimmäisellä julkeudella
toteuttaa ne herjaavat ja röyhkeät lupaukset, jotka hän lausui isänsä
hautajaisissa Örebrossa, että nimittäin pian tulisi aika, jolloin sekä
paavi että munkit kukistettaisiin ja hävitettäisiin."

Olavi kääntyi takaisin nämä sanat kuullessaan ja kuluttava liekki


leimahti hänen suurista silmistään.

"Voitteko todistaa tämän syytöksen?" kysyi arkkipiispa, ilmeisesti


närkästyneenä priorin äkillisestä esiintymisessä tässä asiassa, joka
hänen ajatuksensa mukaan ainoastaan jatkaisi kiusallista kohtausta,
mutta ei hyödyttäisi mitään. Se julkisuus, jolla priori esiintyi, pakotti
hänet kuitenkin käymään käsiksi kysymykseen.

"Voin kyllä!" vastasi syyttäjä.

"Ja mitä te sanotte siihen, mestari Olavi?" kysyi arkkipiispa tältä.

"Sanon sen, armollinen herra", vastasi Olavi, "että tässä kuten


kaikessa muussakin en ole halukas noudattamaan mitään muuta
lakia kuin minkä Jumala on antanut sanassaan!"

"Voitteko hyvällä omallatunnolla, arvoisa isä arkkipiispa", kysyi


piispa Pietari kiihkeästi, "voitteko sallia tämän kirkon pyhimpäin
sääntöjen ilmeisen kumoajan, tämän kirkon isien julkean häväisijän,
vapaasti jättää Harmaaveljesluostarin? Eikö hän ole itse langettanut
tuomiotansa? Voitteko vastata Jumalan ja kaikkien pyhimysten
edessä, jos jätätte hänet vapauteensa levittämään turmiollisia ja
yhteiskuntaa hajottavia oppejaan?"

Vahingonilo loisti niin ilmiselvään piispan ja munkkien silmistä


nämä sanat kuullessaan. Olavi astui askeleen takaperin, mutta
pysähtyi äkkiä hieman takanojoon asentoon, ja jokainen lihas
jännittyi, jokainen hermo värisi, ja veri virtaili kuohuen hänen
suonissaan. Huoneeseen saapui haudan hiljaisuus, ja tornista
kuuluivat viimeiset kumahdukset Pietari Hannunpojan sielukellojen
soitosta.

Arkkipiispan silmät suuntautuivat tutkivina piispa Pietariin. Vaikka


hän oli nuorin läsnäolijoista, osasi hän kuitenkin parhaiten hillitä
intohimojaan, ja piispan sanat eivät näyttäneet häntä suuremmassa
määrin sytyttäneen. Hänen katseensa oli vain terävämpi kuin
tavallisesti. Kentiesi oli hänellä selvempi yleiskäsitys olosuhteista kuin
muilla; kentiesi käsitti hän paremmin ei ainoastaan voimatoimien
hyödyttömyyden, vaan niiden vaarallisuudenkin mieheen nähden,
joka oli kuninkaan suojeluksessa. Kentiesi hänen tyyneytensä johtui
hänen synnynnäisestä heikkoudestaankin ja kyvyttömyydestään
tehdä äkkiä rohkeaa päätöstä, jota heikkoutta ja kyvyttömyyttä tällä
hetkellä turhaan kannusti hänelle niin harvinainen toimintahalu.

Kuinka tämän laita oli, on vaikea sanoa, mutta hän lausui


jommoisellakin painolla:

"Mene rauhaan, mestari Olavi, ja valaiskoon Jumalan äiti ja kaikki


pyhimykset sieluasi siihen, mikä on oikein ja hyvin!"
Nämä sanat tekivät Olaviin merkillisen vaikutuksen. Hänkin seisoi
valmiina lausuakseen teräviä sanoja priorille ja piispalle, mutta
arkkipiispa riisui hänen aseensa. Tuli hänen silmissään sammui,
voisipa sanoa, kiitollisuuden tunteeseen. Hän ei tosin käsittänyt tällä
hetkellä, mikä määräsi arkkipiispan ajatus- ja toimintatavan, mutta
hänen esiintymisensä oli kuitenkin siksi ylevämpi toisten rinnalla,
että Olavi tahtomattaan tunsi kiintymystä häneen.

Tämä vaikutelma mielessään jätti hän harmaaveljesten


luostarisalin. Tultuaan alas luostarin pihalle, kohtasi hän
mustaveljesmunkin, jota priorin kuulimme nimittävän Martti
Skytteksi.

"Olipa hyvä, että kohtasin teidät, mestari Olavi", sanoi tämä.


"Ikävöin juuri tavata teitä ja kiittää teitä."

"Kiittää minua?" kysäsi Olavi sellaisella äänellä kuin oli vainunnut


ainoastaan vihamielisiä sanoja näiden synkkien luostarimuurien
sisällä.

"Kuulin saarnanne tänään", jatkoi munkki lempeällä äänellään. "Ja


siitä saarnasta tahdon teitä kiittää. Tosiaan, sellaisen kylvön täytyy
aikanaan kasvaa hyviä hedelmiä."

"Jos puhutte tosissanne, niin silloinhan jo oras puhkeaa ilmoille."

"Niin puhun, mestari Olavi… Martti Skytte on valmis asettumaan


rinnallenne."

Molemmat miehet kietoutuivat pian vilkkaaseen ajatusten ja


mielipiteiden vaihtoon, eikä Olavi voinut katkaista keskustelua,
vaikka hän kiihkeästi ikävöi äitinsä luo, missä Kristina odotti häntä.
Martti saattoi häntä luostaripihan poikki. Porttiholvissa pysähtyivät
he, sitte kulkivat he verkalleen sillan ylitse, mutta Munkkisillalla
seisoivat he jälleen kauvan, niin että oli kulunut hyvinkin tunti,
ennenkuin Olavi Harmaamunkkikujan kautta meni ylöspäin Suurtoria
kohden.

Kello oli silloin yli viiden.

Olavi oli tuskin ehtinyt Läntiselle pitkälle kadulle, ennenkuin


suuremman ihmisjoukon hälinä saapui hänen korviinsa. Ääni tuli
Mustaveljesluostarista ja sen voima kasvoi alituiseen. Olavi kiirehti
askeleitaan, ja mitä lähemmäksi toria hän tuli, sitä äänekkäämmäksi
kävi rääkynä.

Erään kadun suusta, joka toi mainitusta luostarista, virtaili Olavin


juuri saapuessa torille, ihmislauma, joka kirkuen ja meluten pian
täytti koko torin. He olivat uudestakastajat. Sen saattoi nähdä heidän
hurjista, uskonkiihkoisista katseistaan, jollei olisikaan pannut merkille
rikkirevittyä alttariliinaa, jota heilutettiin keskellä joukkoa ikäänkuin
taistelun merkkiä, jonka ympärillä heidän oli kokoonnuttava. Mutta
tämä alttariliina ei yksin riittänyt; kaikkialta, mihin katseensa
joukkoon suuntasikaan, huomasi pyhimyskuvien ja muiden
kirkkokoristusten kappeleita, joita huiskuteltiin päiden yläpuolella
hirveimmästi ulvoen.

Kaksi miestä, joiden puvut ilmaisivat, että he kuuluivat Uplannin


rahvaaseen, työnsi joukko syrjään ja he joutuivat Olavin
läheisyyteen. Heidän ulkonäkönsä osotti suurinta kauhua ja inhoa.
Toinen heistä juuri heidän pysähtyessään, sai Olavin näkyviinsä.

"Tuolla seisoo hän, kerettiläinen!" sanoi hän. "Tule, rientäkäämme


pois tästä kirouksen kaupungista…!"
Toinen talonpoika kohotti katseensa Olaviin. Tämä oli tuskin
päässyt selville, mitä oli tekeillä, ennenkuin hän aikoi rientää
kiihottunutta joukkoa vastaan. Silloin lyötiin hänen olalleen.

Sen teki talonpoika, jolle häntä oli osotettu väkivallantekojen


alkuunpanijaksi, näiden tekojen, joita uudestakastajat tänään
iltapäivällä olivat alkaneet harjottaa. Mies oli puolta päätä korkeampi
kuin Olavi, suuri ja väkevä, ja hänen ulkonäöstään saattoi aavistaa
suurta rohkeutta ja mielenmalttia.

"Olette mestari Olavi saarnapytystä", sanoi hän katsoen lujasti


Olavin silmiin, "ja nyt seisotte iloiten siitä munasta, jonka olette
munineet. Mutta sen sanon teille, ja sanani eivät ole leikkisanoja,
ennenkuin muna on haudottu poikaseksi, voitte te pelata kruunun
Kustaa kuninkaan päästä."

Kookas talonpoika oli kiihkeästi liikutettu, eikä puuttunut paljoa,


ettei hän tarttunut Olavin kaulukseen, oikein tuntuvasti painaakseen
hänen mieleensä, että suuttumus niiden kauhistusten johdosta, joita
talonpoika oli tänään omin silmin nähnyt, saattoi kantaa hedelmiä,
joita niiden alkuunpanija ei ollut koskaan aavistanut.

"Jollei kuningas Kustaa tahdo pitää niitä valoja, jotka on vannonut


ja ylläpitää järjestystä valtakunnassaan, nousemme me vielä
taalalaisten kanssa ja ajamme hänet tiehensä, ja sinut ajamme ensi
aluksi."

Se oli melkein enemmän kuin Olavi saattoi sietää, ja tarvittiin koko


hänen sieluntarmonsa ja miehuudenvoimansa, jottei hän menehtynyt
niiden vihamielisten voimien edessä, jotka tänä päivänä näyttivät
liittoutuneen häntä vastaan, ja näistä voimista pureutui kiihkeimmin
sydämeen ja repi verisin hampain aivokammioissa se, joka ilmeni
hirveässä syytöksessä, että hän oli saanut aikaan liikkeen, jonka
lopullista päätöstä ei saattanut nähdä hetken painon alla. Talonpojan
sanat paljastivat hänelle yhtäkkiä kuvan, jossa hän näki menneiden
aikojen levottomuuden ja kauhujen nousevan kuin tummat haamut
syvyydestä ja syöksevän Ruotsin kuningaskruunua vastaan, samalla
kuin toisella taholla toiset villit olennot repivät rikki sen työn, joka
kantoi Kustaa Vaasan nimeä. Kuningas Kristian, verikuningas,
Severin Norby ja Kustaa Trolle yhdellä puolen ynnä
talonpoikaiskapinat sokaistujen pappisvaltiasten ja munkkien johdolla
toisella puolen, — kas, siinä taulu, joka ikäänkuin taikaiskulla levisi
Olavin sielun silmien eteen. Ja tämä saattoi tulla seuraukseksi
hänen…

Tässä pysähtyi hänen ajatusjuoksunsa, mutta tuskissaan siitä mitä


näki, hän enemmän tunsi kuin selvästi ajatteli, että hän itse — hän,
joka ei oikeissa ajoin voimallisesti noussut näitä kiihkoilevia
rauhanhäiritsijöitä, näitä niin sanottuja uudestakastajia vastaan — oli
alkusyy kaikkeen, ja pian ei hän nähnyt muuta kuin itsensä,
ikäänkuin hän yksin olisi ollut syypää isänmaan vaaraan, ja tämä,
samalla kuin hänen omatuntonsa todisti hänen tahtonsa ja
tarkotustensa puhtauden, saattoi hänet hetkellisessä
kuohahduksessaan miltei epätoivoon.

Sanat eivät täällä voineet puhua, ainoastaan teot. Jos hän


syöksyisi eksytettyyn joukkoon, jos hän menisi ja seisoisi
kasvotusten Melchior Rinkin edessä, joka näkyi olevan
äänekkäimpäin kirkujain keskellä, ja käsivarsiensa voimalla näyttäisi,
että hän oli järjestyksen ystävä ja puoltaja, — silloin voisi hän kyllä
kaatua ja kuolla, mutta kuolemallaankin hän vahvistaisi oppinsa
totuuden ja osottaisi kuninkaalle ja kansalle, ettei hänellä ollut
uudestakastajain väkivallan tekojen kanssa mitään yhteyttä. Kaikki
tämä välähti meteorin tavoin Olavin sielussa, ja hän tempautui irti
kookkaan talonpojan käsistä, ja tämä näki kummissaan hänen
syöksyvän joukkoon.

Silmänräpäystä myöhemmin vilahti nuori tyttö talonpojan ohitse.


Hänen kasvoillaan kuvastui mitä suurin pelästys, ja katsomatta
ympärilleen, sokeana vaaralle, jota kohden kulki, riensi hän katoavan
Olavin jälkeen. Aivan hänen jälestään riensi vanha mies esiin. Hänen
jaloissaan oli pitkävartiset ratsastussaappaat, hän oli kääriytynyt
tummaväriseen, laajaliepeiseen viittaan ja kantoi miekkaa
kupeellaan. Mutta jollei tässä olisi syntynyt satunnainen tungos
väkijoukossa, ilmeisesti aiheutunut Olavin tunkeutumisesta
eteenpäin, ei ukko nähtävästi olisi voinut pitää tyttöä kiinni. Nytkään
ei hän voinut vetää tätä mukanaan takaisin, ja sydäntä vihlovalla
äänellä huusi tyttö:

"Olavi! Olavi!"

Lähinnä seisovat kääntyivät ympäri huudon kuullessaan, ja


joukossa syntyi liike vastakkaiseen suuntaan, niin että tämä harveni,
ja muutamain askelten päässä saattoi nähdä Olavin.

Nuori tyttö, joka näytti olevan äärimmäisen epätoivon vallassa,


uudisti huutonsa, ja Olavi kääntyi katsomaan taakseen. Pitkä
talonpoika oli aivan takana. Hänen osanottoaan oli herättänyt ei
ainoastaan se tapa, jolla Olavi oli vastannut hänen nuhteihinsa, vaan
vielä enemmän se, mitä sitte oli tapahtunut.

Mutta juuri kun Olavi kääntyi kuullessaan nimeään huudettavan,


säpsähtäen ääntä, jonka hän tunsi aivan liian hyvin, ja juuri hänen
katseensa kohdattua Kristinan katseen — sillä tyttö oli hän —
sulkeutui aaltoileva väkijoukko jälleen kehäksi hänen ympärilleen, ja
hän oli silmä silmää vasten Melchior Rinkin edessä. Tätä miestä
nähdessään vaipui Kristinan kuva varjoon, ja hän oli jälleen oma
itsensä, ja eheän voiman tuli paloi hänen silmissään.

Salamoivalla kaunopuheisuudella nousi Olavi uudestakastajaa


vastaan, nuhteli häntä niistä erehdyksistä, joita hän oli levittänyt
tietämättömän ja sentähden helposti johdettavan kansan
keskuuteen, ja kehotti häntä luopumaan voimassa olevan
järjestyksen väkivaltaisesta kumoamisesta. Mutta se oli samaa kuin
saarnata myrskyn myllertämälle merelle. Hälinä taukosi hetkiseksi,
joukko kuunteli, mitä rohkealla saarnaajalla mahtoi olla sanottavaa,
ja useimmat eivät voineet kuvitella, että hän kääntyisi heitä vastaan,
vaan odottivat pikemmin kuulevansa hänen liittyvän heidän
mestareihinsa Rinkiin ja Knipperdollinkiin, koska he olivat vaan
kehittäneet äärimmäisiin johtopäätöksiinsä saman opin, jota Luther
ja hänen oppilaansa saarnasivat. Mutta tuskin olivat he kuulleet,
mitä Olavilla todella oli sanottavaa, tuskin olivat he nähneet sen
musertavan katseen, jonka hän oli singottanut Melchior Rinkiä
vastaan ja heidän kaikkien ylitsensä, ennenkuin nousi monta sataa
kättä ja pääsi hirmuinen kirkuna, joka kasvoi moninkertaiseksi
kajahtaessaan takaisin ympäröivien talojen seinistä.

Melchior itse hypähti esiin, hillittömästä harmista aivan


vimmoissaan, ja kohotti nyrkkiin puristetun kätensä, väkivallalla
vaientaakseen hänen puoluelaistensa voitonriemun rohkean
häiritsijän. Olavi oli kuitenkin uudestakastajaa paljo väkevämpi ja
hänen ei sentähden ollut vaikea torjua uhkaavaa iskua, mutta
samassa sattui häneen loitompaa heitetty kivi ja hän kaatui maahan.

Uudestakastajat aikoivat syöstä häneen kimppuunsa ja eräs


heistä, sama, joka aamupäivällä oli johtanut joukkoa Suurkirkossa,
kohotti mahtavan ryhmysauvansa, antaakseen mestari Olaville
muistomarjan, jota hän ei niin helposti unhottaisi, kun mahtava
olento asettui kaatuneen eteen ja torjui niin hyvin ryhmysauvalla
aiotun surmaniskun kuin muutkin käymästä käsiksi.

Todennäköisesti olisi noussut verinen taistelu, jollei Melchior olisi


sitä ehkäissyt kehottamalla joukkoa rientämään pyhän Yrjänän
kappeliin ja kiittämään ja ylistämään Jumalaa saavutetusta voitosta.

"Pian, pian", sanoi hän, "palaamme jälleen tähän syntiseen


kaupunkiin ja päätämme puhdistustyömme, sen sanoo minulle
Jumalan henki!"

Ja koko joukko vetäytyi pois torilta Suurkirkon ohitse ja alaspäin


avointa kenttää linnan edustalle. Mikä Melchiorin sai kehottamaan
joukkoaan taipaleelle, on vaikea sanoa, mutta aivan varmaan tahtoi
hän välttää keskinäistä taistelua porvarien välillä, joko siksi, ettei
katsonut olevansa valmis sellaiseen taisteluun, tai siksi, että pelkäsi,
niin hyvin lutherilaisten kuin katoolistenkin silloin yhdestä tuumin
nousevan häntä vastaan, ja siten häneltä riistettäisiin kaikki ne
hänen kannattajansa, jotka itse asiassa luulivat hänen saarnaavan
Lutherin oppia, vaikkakin voimakkaammin ja ikäänkuin paremmin
satuttaen kirveen puun juureen.

Mutta Olavin vieressä seisoi vielä kookas talonpoika. Tori oli


tyhjentynyt väestä, ja poistuvan joukon huudot kuuluivat loitompaa
pohjoiselta kaupunginportilta.

4
KRISTINA GYLLENSTJERNA.

Stegeborgin linnan suuressa salissa oli eräänä päivänä syyskuun


lopulla 1524 kolme henkilöä. Päivä oli jo illoillaan ja aurinko oli
vaipumaisillaan länteen, mutta kultasi ikäänkuin jäähyväisiksi
veistokuvien esiinpistävät osat katon tammilaudoissa. Linna oli
muuten, kuten yleensä keskiajan linnat, jotka olivat rakennetut
sotaisia tarpeita eivätkä elämän mukavuutta varten, pimeä, ja valo
pääsi sisään verrattain pienistä ikkunoista. Ympäri salia olivat seiniin
kiinnitetyt penkit ja keskellä lattiaa seisoi suuri tammipöytä.

Mainitut kolme henkilöä istuivat erään ikkunan ääressä, johon


paksut muurit muodostivat ikäänkuin erityisen pienen huoneensa. He
olivat Stegeborgin linnanherra, Hoyan ja Brockenhusenin kreivi
Johan, hänen kihlattunsa rouva Margareta Eerikintytär Vasa, Joakim
Brahen leski, ja rouva Kristina Gyllenstjerna, Ruotsin viimeisen
valtionhoitajan, herra Sten Svantenpoika Sturen leski. Kreivi Johan
oli mies parhaissa vuosissaan, muhkea ulkonäöltään ja liikkeissään
pehmeyttä ja miellyttäväisyyttä, joka teki hänet suuressa määrin
rakastettavaksi. Kentiesi olisi kuitenkin saanut olla hieman enemmän
lujuutta hänen katseessaan ja hieman enemmän miehuutta yleensä
hänen olennossaan.

Siinä istuessaan rouva Margaretan käsi kädessään ja tarkastellen


silmäillessään kallisarvoista sormusta, jota Margareta kantoi
sormessaan, muodosti hän katsojalle rakastettavan kuvan
elähtäneestä ritarismiehestä.

Leikkisä hymy väreili hänen huulillaan ja lempeä liekki paloi hänen


tummissa silmissään. Myöskin Margareta hymyili lyöden
hansikkaallaan leikkisästi kreiviä kädelle. Rouva Kristina istui nojaten
päätään käteensä ja leikki muutamalla niistä kolmesta nyöristä,
joiden varassa pieni laukku sen ajan tavan mukaan riippui
uumavyöstä vasemmalla kupeella.

Molemmat nämä naiset olivat kauniit. Rouva Margaretan kasvot


olivat pitkulaisemmat ja hänen tukkansa oli vaaleampi kuin rouva
Kristinan, mutta molempain kasvonpiirteet olivat hienot ja jalot.
Margareta oli vielä aivan nuori, ja iloisuus, joka tällä hetkellä oli
hänet vallannut, puki häntä mainiosti. Rouva Kristina oli vanhempi,
kuitenkin oli hänellä vielä jälellä koko nuorekas soreutensa. Hän oli
syntynyt 1494 ja oli siis nyt kolmenkymmenen vuoden vanha. Voima
ja nero pilkisteli hänen suurista tummansinisistä silmistään, mutta
hänen poskensa olivat kalpeat ja syvä surumielisyyden piirre
näyttäytyi ilmiselvänä hänen huultensa ympärillä.

Tuskin kuuli hän kihlattujen pilapuheita rinnallaan. Hänen silmänsä


kiintyivät vähän väliä kirjeeseen, joka pisti esiin pienestä kullalla ja
helmillä koristellusta laukusta, ja tuskin kuultava huokaus pääsi
hänen huuliltaan. Äkkiä hypähti hän pystyyn ja ohimenevä puna
levisi hänen poskilleen. Margareta mainitsi sanan, joka yhdellä iskulla
siirsi hänet nykyisyydestä tahi tulevaisuudesta, jos hänen
ajatuksensa nimittäin siellä liitelivät, niihin aikoihin, jotka jo olivat
menneet.

Margareta oli maininnut hänen ja veljensä lapsuudesta, kuinka veli


leikki kuningasta Tukholman linnan suuressa ruokasalissa, Hannu
kuninkaan ollessa herra Stenin luona vierailemassa, ja sitte oli hän
puhunut niistä ajoista, jotka sen jälkeen seurasivat, ja niistä
taisteluista, joita nuori herra Sten ja Margaretan veli tämän rinnalla
olivat taistelleet Vädlan ja Bränkyrkan luona. Nämä muistot ne
tuokioksi levittivät Kristinan poskille heleän punan ja panivat hänen
silmänsä säteilemään samaa tulta, joka kerran oli luonut luottamusta
ja rohkeutta Tukholman porvarien sydämiin, kun paitsi häntä ja
rouva Anna Thurentytär Bjelkeä Kalmarin linnassa joka mies epäili
mahdollisuutta pitää yllä Ruotsin valtakuntaa. Mutta palo silmissä ja
poskilla vaimentui salaman nopeudella, ja alakuloisuus hymyili
syvempisävyisenä hänen suunsa ympärillä, auringonsäteen
taittuessa hänen silmänsä kosteaan loisteeseen ja langeten
sormukselle hänen kädessään. Se oli hänen herravainajansa, herra
Stenin vihkisormus.

Hänen äkillinen liikutuksensa ei kuitenkaan ollut jäänyt


huomaamatta kreivi Johanilta eikä Margaretalta, ja viimeksi mainittu
tarttui lempeän, melkein kunnioittavan ystävällisesti Kristinan käteen.
Kului kotvan aikaa äänetönnä. Mutta hiljaisuuden katkaisi torven
toitotus linnantornista, ja hetkistä myöhemmin astui poikanen sisään
ja ilmotti junkkari Moritz Oldenburgilaisen, joka halusi puhutella
kreivi Johania.

Tämä viittasi myöntävästi kädellään, ja poika katosi.

"Junkkari Moritz", sanoi kreivi ikäänkuin itsekseen, "tuskin


ajattelin, että herra Severinillä olisi tähän aikaan minulle jotakin
sanottavaa."

"Herra Severin?" kysäsi Margareta. "Olkaa varuillanne; tarkotan,


että sen miehen kanssa voi olla vaarallista olla tekemisissä!"

"Älä pelkää, ystäväni", vastasi kreivi, "luulen tuntevani miehen."

Samassa aukeni ovi ja junkkari Moritz astui sisään. Hän oli aivan
nuori mies, mutta niin hyvin hänen pukunsa kuin hänen päivettyneet
kasvonsa ja vapaat, pontevat liikkeensä ilmaisivat soturia, joka oli jo
kokenut monta ottelua elämästä ja kuolemasta. Hänen katseensa
hipaisi tutkivasti sekä kreiviä että molempia naisia, ja se pysähtyi
rouva Kristinaan.

"Kunniallisen partani kautta, rouva Kristina", sanoi hän,


välittämättä kreivistä, joka odotti hänen esittävän asiansa. "Partani
kautta, olette merkillisesti muuttunut sitte kun viimeksi näimme
toisemme!"

Kristina kohotti katseensa ja näytti etsiskelevän muistostaan


kasvoja, jotka näki edessään. Mutta junkkari Moritz ei päästänyt
häntä puhumaan, vaan jatkoi:

"Siitä ette tiedä mitään, jalo rouva! Alussa vuotta olin sattumalta
Kööpenhaminassa ja näin teidät muiden ruotsalaisten naishenkilöjen
keralla, jotka herrani, kuningas Kristian … ai, miekkani kautta, hänen
nimeään ei minun pitänyt täällä mainita, mutta saman tekevä, —
silloin näin teidät eikä paljoa puuttunut etten ollut valmis teidän
tähtenne paljastamaan miekkaani omaa herraani vastaan."

"Asianne, junkkari Moritz", keskeytti kreivi, ilmeisesti


vapauttaakseen Kristinan tarvitsemasta vastata aineessa, jonka hän
tiesi tätä pahottavan, "asianne ei liene sitä laatua, että vaatisi
kiireellistä ratkaisua."

"Asiani", vastasi junkkari, "se on pian suoritettu! Kas tässä", hän


otti kaksi kirjettä, jotka hän jätti kreiville, "kas tässä kirje Severin
Norbyltä ja tässä Bernt von Meleniltä! Minulla on sitä paitsi teille yhtä
ja toista puhuttavaa, mutta kaikella on aikansa. Kuitenkin luulen,
että pian käännän selkäni jälleen maalle päin. Jos tämä tuuli pysyy,
tahdon olla rupisammakko, jollen pian ole taasen herra Severinin
luona Visborgissa!"
"Visborgissa?" kysäsi kreivi Johan koko lailla kummissaan.

"Niin, Visborgissa", matki junkkari. "Luulen, että se on kyllin


selvästi sanottu!"

"Mutta Visborginhan pitäisi…"

"Pitäisi niin, sen asian laita on niin, nähkääs kreivi hyvä, että
Visborgin kylläkin pitäisi tällä haavaa olla kuningas Kustaan käsissä,
mutta kaikki ei täällä maailmassa ole kuten sen pitäisi olla."

"Ja sen sanotte sellaisella varmuudella, junkkari Moritz!" sanoi


jälleen kreivi. "Viimeiset tiedot lupasivat kuitenkin hyvää kuninkaan,
herrani väelle!"

"Kirjeet, kirjeet, herra kreivi … lukekaa ne ja kyselkää sitte. Kelpo


miekkani kautta, maaihmiset eivät tosiaan tiedä, mitä aika
merkitsee!"

Kreivi Johan avasi ja luki saamansa kirjeet. Sillaikaa poistui rouva


Margareta, mutta junkkari otti vielä yhden kirjeen, jonka kera hän
läheni rouva Kristinaa.

"Se on herraltani, herra Severin Norbyltä, teille, rouva Kristina!"


sanoi hän jättäen kirjeen.

Kristiina vastaanotti kirjeen ilmeisellä vastenmielisyydellä ja pani


sen syrjään avaamatonna. Junkkari Moritz ei sitä huomannut, sillä
hänen tarkkaavaisuutensa oli kokonaan kiintynyt kreiviin, ja hänen
vilkkaat, mutta terävät silmänsä seurasivat tarkasti jokaista
vivahdusta kreivin kasvoilla tämän lukiessa kirjettä. Niiden sisällyksen
täytyikin olla sangen merkillinen, sillä kreivi kalpeni ja hänen kätensä
vapisi.
Itsetyytyväisen näköisenä sipaisi junkkari silloin partaansa ja
kääntyi rouva Kristinaan.

"Mitä, rouva Kristina", huudahti hän nähdessään avaamattoman


kirjeen ja ylpeän, miltei tyytymättömän ilmeen rouvan kasvoilla.
"Mitä, rouva Kristina, jätättekö herrani kirjeen avaamatta? onko tämä
uskollisen rakkauden palkka?"

"Sanokaas minulle, junkkari Moritz", kysyi Kristina syvän vakavalla


äänellä, "onko herranne Ruotsin ystävä vai vihollinen?"

"Ystävä tai vihollinen", vastasi junkkari leveästi hymyillen, "arvelin,


että se ajaa saman asian. Kuitenkin luulen voivani tyynnyttää teitä
sillä, että nykyisin puhaltaa tuuli sellainen, että jos kuningas Kustaa
muuten tahtoo käyttää sitä hyväkseen, tekee hän niin hyvän
purjehdusretken kuin kuka ikinä; sillä hän liittää silloin Gotlannin
takaisin Ruotsin valtakuntaan."

Kreivi Johan oli lopettanut kirjeidensä lukemisen ja taittoi ne


kokoon, silmäillen eteensä kuten tekee se, jonka sielu on niin
kiintynyt johonkin asiaan, ettei ulkonaisella silmällä ole mitään
esinettä sinne vietäväksi.

"Tahdotteko tulla mukanani, junkkari Moritz?" sanoi hän sitte.


"Minulla on jotakin kysyttävää teiltä."

Junkkari kumarsi ja molemmat herrat poistuivat huoneesta. Kun


kreivi, heidän saavuttuaan linnan salahuoneeseen, oli huolellisesti
sulkenut oven, kiinnitti hän läpitunkevan katseen junkkariin.

"Tunnetteko näiden kirjeiden sisällön?"

"Luulenpa tuntevani!" vastasi junkkari hymyillen.


"Voitteko silloin sanoa, millä oikeudella herra Bernt kirjottaa
minulle siten? Onko hän niin herkkäuskoinen, että jättää käsiini
sellaisia todistuksia itseään vastaan! Minun tarvitsisi vain näyttää ne
herralleni kuninkaalle…"

"Mutta sitä ette tule koskaan tekemään", keskeytti junkkari Moritz


kiihkeästi.

"Mitä sanotte, junkkari Moritz, kenenä minua pidätte?" kysyi kreivi


jalolla suuttumuksella.

"Puhun viisauden kieltä, herra kreivi", vastasi junkkari aivan


tyynesti. "Jättämällä nämä kirjeet kuninkaalle, ette järkytä
hiuskarvan vertaa niitä suunnitelmia, jotka herrallani ovat
toteutettavana; riistäisitte siten vain itseltänne kaiken
mahdollisuuden ottaa eduksenne osaa tulevaan suurtyöhön…
Muistakaa sen ohella, että herra Bernt on kirjoittanut teille kuten
täysin luotettavalle ystävälle, kuten maanmies maanmiehelle, jotka
molemmat oleskelevat vieraassa maassa, ilman muuta turvaa kuin
hyvä miekkansa, mutta molemmilla on luvallinen tarkotus tehdä
onnensa niin suureksi ja täydelliseksi kuin mahdollista. Uskokaa
minua, herra kreivi, jos tuntisitte tämän maan ja sen helppouden,
millä täällä voi löytää onnensa nyt, kun kuningas Kristian on
puhdistanut kaiken rikkaruohon, puhuisitte varmaan tykkänään toista
kieltä ja ajattelisitte ja toimisitte, kuten herra Bernt."

"Herra Bernt kirjoittaa minulle", lausui kreivi Johan, "että te


tekisitte minulle suullisesti selkoa koko hommasta!"

"Mutta yhdellä ehdolla!"

"Ja se on?"
"Teidän on vannottava pyhä vala, ettette kellekään ilmaise, mitä
tulen teille ilmottamaan."

Kreivi Johan mietti hetkisen, kävellen parisen kertaa huoneessa


edestakaisin, ja yhä lepäsi junkkarin terävä silmä hänessä; ikäänkuin
hänet jo olisi pyydystetty karvoineen päivineen.

"Tahdotteko vai ettekö tahdo?" kiiruhti junkkari. "Nähkääs minun


täytyy käyttää aikaani tarkoin, minulla on mukanani kirje myös
kuningas Kustaalle, ja minä aioin tänä iltana lähteä taipaleelle
Vadstenaan, josta toivon hänet löytäväni. Hän on jo aikoja sitte —
lisäsi hän ikäänkuin vastaukseksi kreivin lausumattomaan
kysymykseen — lähtenyt Malmöstä. Hahaha! Kuningas Kustaa-parka,
häneltä katosi sillä matkalla halu enää käydä vieraisilla Tanskan
vanhan Fredrikin luona."

"Tunnette, kuten näyttää, tarkoin, mitä on tapahtunut


kuningaskohtauksessa Malmössä?"

"Pikemmin olisi kummastuttavaa, jollen sitä tuntisi. Huomaan, että


tunnette vähän Severin Norbytä ja hänen miehiään, kun ette tiedä,
ettei tapahdu mitään tärkeää, ei kuningas Kustaan eikä vanhan
Fredrikin luona, ettemme me saisi siitä tietoa."

"Teidän sanoistanne päättäen päättyi kohtaus Malmössä aivan


toisin kuin herrani, kuningas, toivoi, kun erosin hänestä
Jönköpingissä ja hän läksi matkalle sinne alamaahan."

"Päätös oli sellainen, ettei Gotlanti koskaan tule Ruotsin kruunun


alle eikä muuten Fredrikinkään, mikäli onni on herra Severinille
suotuisa."
"Puhutte vapaata kieltä kuningas Kustaan miehen edessä, junkkari
Moritz!"

"Kuitenkaan en puhu sen vapaammin kuin että pääni istuu


paikoillaan yhtä varmasti, jollei varmemmastikin kuin teidän, kreivi
Johan. Mutta miksi riidellä pikkuasioista? Kuningas Kustaa vihastui
niin kohtauksessa, että oli hakkaamaisillaan lübeckiläisen Herman
Israelin maahan maan hyviksi, mutta onneksi kansleri Lauri
Antinpoika sai hänet tyyntymään. Mutta myönnettäköön, että
kauppasaksa oli tehnyt hänelle ilkeän kepposen. Sillä kaikki ne
suuret lupaukset, jotka annettiin Lübeckin nimessä, jotta kuningas
Kustaa lähtisi sotaretkelle herra Severiniä vastaan, olivat rauenneet
tyhjiin, ja niin totta kuin olen kunniallinen merimies, on kuningas
Kustaalle siitä ainoastaan vahinkoa ja häpeää."

Suurimmalla kummastuksella kuunteli kreivi kertomuksia siitä,


mitä oli tapahtunut Malmössä, kuinka hajanaisina ne esiintyivätkin
junkkarin huulilla. Kreivi oli uusi tulokas Ruotsissa. Hän oli tullut
maahan vasta pari kuukautta sitte ja silloin saapunut kuninkaan luo
Jönköpingiin, jossa herrat pitivät kokousta niin Tanskan kuin
Lübeckinkin lähettilästen ollessa saapuvilla, ja missä päätettiin, että
kuningas Kustaan olisi noudatettava kuningas Fredrikin toivomusta ja
mentävä Malmöhön, vihdoinkin saadakseen Gotlanninkysymyksen
päätökseen, — riitakysymyksen, joka valtakunnilla oli ollut
keskenään siitä päivin kuin kuningatar Margareta lunasti saaren
ruotsalaisilla rahoilla, mutta jätti sen kuulumaan unioonille eikä
Ruotsin valtakunnalle. Kuningas oli ottanut kreivi Johanin vastaan
hyväntahtoisesti, sillä hän tunsi syystäkin itsensä yksinäiseksi
yhteiskunnan kukkuloilla, jossa ennen oli ollut niin viljalta
tarmokkaita miehiä, mutta jossa nyttemmin verikuninkaan
mellastuksien jälkeen oli todellinen erämaa, ja sentähden hän
mielellään otti palvelukseensa eteviä ja mainioita ulkomaalaisia.

Valitettavasti eivät nämä olleet rahtuakaan parempia kuin joukko


miehiä, jotka edellisinä aikoina olivat tulleet maahan. He olivat,
kuten junkkari Moritz niin ujostelematta sanoi kreivi Johanille,
onnenonkijoita kaikkityyni. Sellainen oli Bernt v. Melen, ruotsalaisen
sotavoiman komentaja Gotlannissa, sellainen osottautui sittemmin
kreivi Johankin olevansa. Ja kuitenkin oli Kustaa koettanut heidät
kiinnittää itseensä ja Ruotsiin loistavilla ja rikkailla naimisilla oman
sukunsa kanssa. Bernt v. Melen oli nainut erään kuninkaan
naissukulaisen, samannimisen kuin kuninkaan sisar, jonka hän oli
kihlauttanut kreivi Johanille.

"Ja mitä sitte oikeastaan päätettiin Gotlantiin nähden?" kysyi kreivi


jälleen.

"Että saaren ja linnan saisi pitää se, jolla saari ja linna olivat
käsissään sinä päivänä, jona päätös tehtiin!"

"Ja se oli…?"

"Se ei ollut kuningas Kustaa! Mutta pian asiaan, herra kreivi,


kuinka tahdotte vastata?"

Kreivi aprikoi vielä, mutta sitte katsoi hän mukavimmaksi tehdä


vaaditun valan, jonka hän teki laskien kätensä junkkarin ojennetulle
miekalle; siten hän ei kuitenkaan sitoutunut muuhun kuin pitämään
yksistään omana salaisuutenaan, mitä hänelle uskottiin niistä
suunnitelmista, jotka oli sepitetty Visborgin linnassa. Sentähden oli
hänellä täysin vapaa valta sittemmin tehdä päätöksensä aivan sen
mukaan kuin katsoi itselleen edullisimmaksi.
"Tahdon siis sanoa teille, mitä herrani ja herra Bernt ovat
keskenään sopineet", puhkesi junkkari Moritz puhumaan. "Ei ole
kysymys enemmästä eikä vähemmästä kuin ottaa Ruotsin
valtakunta, tehdä nuori herra Nils Steninpoika Sture valtionhoitajaksi
ja nimeksi tunnustaa kuningas Kristianin yliherruus."

Kreivi pysähtyi käynnissään ja katsoi puhujaan silmät selällään,


ikäänkuin ei olisi käsittänyt sanaakaan.

"Ottaa Ruotsin valtakunta", jupisi hän, "tehdä Nils Sture


valtionhoitajaksi…"

"Niin, niin, sanon minä", jatkoi junkkari. "Kaikki käy kuten tanssi,
rouva Kristina, Nils Steninpojan äiti on ojentanut kätensä herra
Severin Norbylle…"

"Rouva Kristina", keskeytti kreivi jälleen, "rouva Kristina


Gyllenstjerna, kuninkaan täti, on antanut kätensä Severin Norbylle…
Alan uskoa, että tahdotte laskea leikkiä, junkkari Moritz."

"Voitte uskoa kuten haluatte", vastasi tämä, "se ei muuta lainkaan


asiaa. Severin Norby, naimisissa Kristina Gyllenstjernan kanssa,
vetää Ruotsin rahvaan mukaansa, ensiksikin taalalaiset, jotka jo ovat
valmiit kaikkeen mitä tulleekin jo varustautuvat marssimaan
Tukholmaa vastaan. Sillä välin herra Bernt, jolla on herra Nils Sture
luonaan Kalmarin linnassa, nostattaa idästä kansan liikkeeseen, ja
me herra Severin Norbyn johdolla hyökkäämme meren puolelta.
Voitteko nyt käsittää, miksi tämä linna, joka teillä on huostassanne,
on niin tärkeä?"

"Puhutte pelkkiä arvotuksia, junkkari Moritz", alkoi kreivi hetkisen


vaiettuaan. "Tiedän kyllä, ettei mieliala monin seuduin maata ole
suinkaan paras, olen Linköpingin vanhalta piispalta saanut mitä
luotettavimpia tietoja, mutta koskaan en ole voinut otaksua, että niin
laajalle ulottuvia verkkoja kudottaisiin herrani ja kuninkaani
ympärille."

"Mitä tähän asti olette ajatellut, kreivi Johan, on


kokonaisuudessaan saman tekevä", keskeytti junkkari vilkkaasti.
"Kysymys on siitä, mitä nyt ajattelette ja mitä tästä lähtien tulette
tekemään…"

"Teillä on lupaukseni siitä, että vaikenen", kuului kreivin vastaus.


"Tyytykää siihen toistaiseksi!"

"Ahaa, ymmärrän … luulette, että teillä on enemmän odotettavissa


kuningas Kustaalta kuin liittymisestä Severiniin ja kuningas
Kristianiin. No hyvä, teillä on oikeus olla sokaistu, älkööt vaan
silmänne avautuko liian myöhään … minulla ei ole teille enempää
sanottavaa, tahdon vain tavata rouva Kristinaa ja kuulla hänen
vastauksensa herralleni, ja sitte menen suoraa päätä kuninkaan luo."

"Kuninkaan luo…"

"Aivan niin, kuninkaan luo … miksikä se teitä kummastuttaa?"

"Aivan yksinkertaisesti siksi", vastasi kreivi, jonka ilmeisesti saattoi


hämilleen se vakavuus ja varmuus, jolla junkkari Moritz esiintyi,
"aivan yksinkertaisesti siksi, että me tarvitsemme aikaa, jotta kaikki
ennättää kypsyä ennenkuin puhkeaa ilmilekkiin."

"Ja te voitte kyllä saada kuningas Kustaan antamaan teille sen


ajan.
Tunnen joko häntä tai teitä liian vähän, voidakseni uskoa
sanojanne."

"Se ei vaikutakaan mitään asiaan, herra kreivi. Ainoastaan yksi


seikka on minulla vielä lisättävää. Kun herra Severin tulee
laivastoineen, on teidän nostettava valkoinen liina torniin, jos silloin
päätätte pitää hänen puoliaan. Ja sitte lopuksi, kreivi Johan …
ehdoton vaikeneminen! Ei etäisinkään erämaa, ei sankin metsä, ei
korkein torni eikä lujin linna voi suojella teitä kostolta, jos rikotte
valanne. Oletteko ymmärtänyt minut?"

Kreivi kohotti huomaamatta päätänsä, ja junkkari Moritz, joka


äkkiä oli alkanut puhua vakavalla ja synkällä äänellä, muuttui jälleen
pinnaltaan viattomaksi ja sävyisäksi, vaikkakin hieman raa'aksi
merimieheksi.

"Hyvästi sitte, herra kreivi", sanoi hän, "menen tapaamaan rouva


Kristinaa… Toivon että sitte annatte hyvän hevosen käytettäväkseni."

Muutaman hetken jälkeen seisoi junkkari Moritz jälleen suuressa


salissa.

Rouva Kristina oli vielä siellä. Hän istui nojaten päällänsä ristityihin
käsiinsä, kun junkkari Moritz astui sisään, ja tällä hetkellä lepäsi niin
ylevän kaunis värisävy hänen jaloilla, mutta surullisilla kasvoillaan,
että itse karkea merirosvokin pysähtyi ja vaipui häntä katselemaan.
Sana, jonka hän oli lausumaisillaan, kuoli hänen huulilleen, ja näytti
siltä kuin hän hetkiseksi olisi unhottanut koko maailman.

Silloin kuului jälleen torventoitotus vartiotornista. Tämä tuttu ääni


ei tehnyt mitään vaikutusta junkkari Moritziin, mutta rouva Kristina
kohotti katseensa ja käänsi kasvonsa huoneen keskustaan päin. Hän
katseli hetken äänetönnä miestä, joka seisoi hänen edessään, ja
hänen katseensa oli niin syvä ja kirkas kuin se olisi lainannut loistoa
ja väriä nornien viisaudenlähteestä.

"Tuletteko kuulemaan vastaustani?" kysyi hän.

"Niin, rouva Kristina!" vastasi junkkari Moritz niin kunnioittavalla


äänellä ja ilmeellä, ettei se ollut lainkaan hänen tapaistaan.

"No, hyvä", jatkoi Kristina. "Tervehtikää sitte herraanne ja


sanokaa, että Kristina Gyllenstjerna pysyy lujana sanassaan. Herra
Severinin urotöitä, hänen kunniaansa, hänen suoraa, ritarillista
mieltänsä, hänen uskollisuuttaan herraansa kohtaan — kaikkea tätä
pidän korkeassa arvossa, niin korkeassa, etten tiedä ketään niiden
joukossa, jotka tunnen ystäviä tai vihollisia, kenen asettaisin hänen
yläpuolelleen, paitsi sisareni poikaa, herra Kustaa Eerikinpoikaa,
herraani ja kuningastani."

"Ah, rouva Kristina", huudahti junkkari Moritz, "sellaisesta


tunnustuksesta teidän huuliltanne olisin valmis uhraamaan tuhat
elämää, jos minulla olisi niin monta."

"Sormuksen, jonka olen antanut herra Severinille", jatkoi rouva


Kristina, "pitäköön hän muistona Kristina Gyllenstjernan
tunnustuksesta ja kunnioituksesta, mutta ennenkuin hän on
toteuttanut sen, mitä hän kirjottaa teidän tänään minulle
jättämässänne kirjeessä, ennenkuin näen hänet kuningas Kustaan
rinnalla hänen ja Ruotsin miehenä, en edelleen tahdo ottaa vastaan
mitään viestiä enkä kirjettä häneltä."

"Ymmärrän teidät, jalo rouva", sanoi Moritz, "ja vien


tervehdyksenne perille, vaikkakin se kuulostaa minun korvissani
herrani pyynnön hylkäämiseltä."

"Jättäkää se asia herra Severinin itsensä ratkaistavaksi!"

"Mutta jos", jatkoi Moritz, "jos tapahtuisi, mitä nyt ei kukaan voi
aavistaa, että herrani pelastaisi Ruotsin valtakunnan…"

"Pelastaisi Ruotsin valtakunnan … uneksitteko, junkkari Moritz?"

"Ei, ei, rouva Kristina, en uneksi … mutta jos pahat ja kovat ajat
jälleen tulisivat, jollei kuningas Kustaa voisi pitää yllä sen kruunun
valtaa, minkä hän on saanut, mutta jos Ruotsin valtakunta kuitenkin
seisoisi vapaana ja voimakkaana ja mahtavana, ja jos tämä uusi
pelastaja olisi Severin Norby, mitä silloin tekisitte?"

"Puheenne on arvotuksellista… Voin siihen vastata ainoastaan, että


vastaukseni tahdon antaa ritari Severin Norbylle enkä juonittelijoille."

"No, hyvä, olen ymmärtänyt tarkotuksenne, ja tahdon viedä perille


vastauksenne!"

Aurinko oli nyt laskenut eikä mitään valoa ollut sytytetty saliin,
jossa sentähden hämärä kävi yhä pimeämmäksi. Niin Moritz kuin
rouva Kristinakin olivat siksi kiintyneet aineeseen, jota keskenään
pohtivat, etteivät ajatelleet tätä seikkaa, ja todennäkösesti oli
tapahtunut jotakin aivan satunnaista, joka esti palvelijat tavan
mukaan sytyttämästä valoa.

Sellainen sattumus, joka saattoi kaikki kummiinsa, olikin


tapahtunut. Kuningas Kustaa oli saapunut suuren seurueen keralla.
Hänen saapumistaan torvet olivat toitottaneet vartiotornissa kohta
junkkarin astuttua suureen linnansaliin. Kuningas oli heti etsinyt
kreivi Johania ja tavannut hänet salakamarista. Hän oli viivähtänyt
siellä hetkisen keskustellen kreivin kera, joka oli maininnut hänelle
junkkari Moritzin saapumisesta Severin Norbyn lähettiläänä, ja lisäksi
maininnut hänen viestistään ja kirjeestään rouva Kristinalle.
Kuningas sai edelleen tietää, että junkkari Moritz nyt parhaallaan
neuvotteli rouva Kristinan kanssa, ja hän päätti itse olla kuulijana
tässä neuvottelussa. Kreivi tahtoi seurata, mutta kuningas epäsi sen,
ja ennenkuin hän ehti ryhtyä mihinkään hommiin ilmottaakseen
rouva Kristinalle, oli kuningas jättänyt huoneen ja rientänyt suureen
linnansaliin.

Kuningas oli kiihtyneessä mielentilassa jo saapuessaan


Stegeborgiin, eivätkä ne tiedot, joita kreivi Johan oli hänelle antanut,
häntä tyynnyttäneet. Hänen askeleensa olivat kiihkeät ja lujat, ja
hänen kätensä löi muutamia kertoja miekankahvaan, hänen
kulkiessaan linnankäytävän lävitse suuren salin ovea kohden. Täällä
tuli Johan Thurenpoika häntä vastaan, mutta pysähtyi
kunnioittavasti, kun hän muurille pystytetyn soihdun valossa näki
kuninkaan synkän muodon. Kuningas viittasi hänelle kädellään
kehottaen seuraamaan ja avasi samassa salin oven. Silloin juuri
junkkari Moritz lausui viimeksi mainitut sanat.

Saavuttuaan saliin, pysähtyi kuningas, ja herra Johan Thurenpoika


veti hiljaa oven kiinni. Rouva Kristina, joka ei aavistanut, kenen
kuulijan hän oli odottamatta saanut eikä voinut luulla muuta kuin
että tulija oli joku linnan palvelijoista, vastasi kursailematta junkkarin
puheeseen.

"Tehkää se, junkkari Moritz, ja voitte lisätä, että Kristina


Gyllenstjerna rukoilee Jumalan äitiä vahvistamaan herra Severiniä
hänen päätöksessään!"
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebookultra.com

You might also like