The Keel Meta-Framework

Michael Nash

Shash Chatterjee

Keel 2.1-dev

April 1, 2004


Table of Contents

1. Quick Start
1.1. Introduction
1.2. Keel Installation
1.2.1. Pre-requisite Environment
1.2.1.1. Java Development Kit (JDK)
1.2.1.2. Jakarta Ant
1.2.1.3. Keel Distribution
1.2.2. Keel User Project
1.2.2.1. Creating a New Project
1.2.2.2. Initial Install and Build
1.2.2.3. Initial Build For Changed Deployments
1.2.2.4. Unit Tests
1.2.2.5. Running Keel
1.2.3. Creating User Modules
1.2.3.1. Creating the Directory Structure
1.2.3.2. Incorporating into Keel's Build System
1.2.3.3. Building with new application
1.2.4. Quick Summary for the Expert/Impatient
1.3. Using Eclipse 3.0 With Keel
1.3.1. Initial Setup
1.3.2. Creating a Eclipse Project For Your Keel Project
1.3.3. Adding Source for User Modules
1.3.4. Defining Source for Keel Internals
1.3.5. Debugging Keel with Eclipse
1.4. Alternate Method of Using Eclipse 3.0 With Keel
1.4.1. Altered Keel Project Setup
1.4.2. Importing Core Keel Modules
1.5. Hands On Java
1.5.1. Creating the application directory structure
1.5.1.1. The Hello World Application
1.5.1.2. Adding Roles
1.5.1.3. Adding Model Metadata
1.5.1.4. Adding ant.properties property
1.5.1.5. Building the application
1.5.1.6. Starting Tomcat
1.5.1.7. A Menu System
1.5.2. Configuration
1.5.2.1. Changing the Model
1.5.2.2. Altering Meta-data
1.5.2.3. Configuring the Second Shorthand
1.5.2.4. Adding New Components to the Menu
1.5.2.5. Building, Deployment and Testing
1.5.3. Adding Security
1.5.3.1. Create the Model
1.5.3.2. Setting Up Security
1.5.4. Adding Persistence
1.5.4.1. The Entity Bean
1.5.4.2. The Prompter Model
1.5.4.3. The Processing Model
1.5.4.4. Auto-Increment Configuration
1.5.4.5. Adding Default Data
1.5.4.6. Using the Persistent
1.5.4.7. Verifying the Data
1.5.5. Adding a Struts User-Interface
1.5.5.1. Where to go Next?
1.5.5.2. Mapping to JSPs - Struts Forwards
1.5.5.3. Adding the JSPs
2. Keel Architecture
2.1. Introduction
2.2. Web-Application Concepts
2.3. Java Servlet API Review
2.4. Java Server Pages Review
2.5. Framework Concepts and Terms: Components and Patterns
2.5.1. What's a Framework?
2.5.2. Why Frameworks?
2.5.3. Meta-Framework
2.5.4. Components
2.5.5. How to Choose the Best?
2.5.6. How to get them to work together?
2.6. Frameworks, Components and Open Source
2.6.1. Why Open Source?
2.6.2. Open Source: Risks and Rewards
2.6.3. Open Source Business Model
2.7. Frameworks integrated by Keel
2.7.1. Avalon
2.7.1.1. Separation of concerns
2.7.1.2. Inversion of control
2.7.1.3. Components and Services
2.7.1.4. Avalon Containers
2.7.1.5. Configuration and Lifecycles
2.7.2. Struts
2.7.3. Cocoon
2.7.3.1. Matchers
2.7.3.2. Generators
2.7.3.3. Actions
2.7.3.4. Transformers
2.7.3.5. Serializers
2.7.4. Velocity
2.7.5. Axis
2.7.5.1. Web Services
2.8. Keel - A Meta Framework
2.8.1. Keel Design Objectives
2.8.2. Overview of Keel
2.8.3. J2EE/EJB
2.8.4. Primary Keel Capabilities
2.8.5. Current Status of Keel
2.8.6. Current Service Interfaces and Implementations:
2.8.7. Keel Example Applications
2.8.8. Keel Deployment Options
2.8.8.1. Keel Single VM
2.8.8.2. Keel Multiple VM
2.8.8.3.
2.8.8.4. Keel and JBoss
2.8.8.5.
2.8.8.6.
2.9. Apache Avalon
2.9.1. Avalon Framework
2.9.2. Avalon Sub-Projects
2.9.3. Excalibur
2.9.4. Roles and Component Oriented Programming
2.9.5. Lifecycle Interfaces
2.9.6. Implementation of the Persistent Role
2.9.7. Avalon Disadvantages
2.10. Environment Setup and Requirements
2.11. Keel Architecture and Components
2.12. Cross-Framework Integration
2.12.1. Separation of Concerns
2.12.2. Classpath Separation
2.13. Keel Application Design
2.13.1. Design goals
2.13.1.1. Flexibility
2.13.1.2. Performance
2.13.1.3. Scalability
2.13.2. Component-Based Development
2.13.3. Framework independence
2.13.3.1. Evaluating and comparing frameworks
2.13.4. Multiple UIs
2.13.5. Examining the Navigation Application
2.13.6. Entity components vs. Service components
2.13.7. Design patterns
2.13.7.1. Interface
2.13.7.2. Composition and Extension
2.13.7.3. Delegates and Proxies
2.13.7.4. Factories
2.13.7.5. Pooling
2.13.7.6. Singleton
2.13.7.7. Utility
2.13.7.8. Separation of Concerns
2.13.7.9. Service Pattern
2.13.7.10. Command
2.13.8. Security Architecture
2.13.8.1. Authentication
2.13.8.2. Authorization
2.13.8.3. Roles
2.14. Writing Models
2.14.1. Why Models?
3. Programming With Keel
3.1. Projects
4. Writing Models
5. Developing Keel Services
6. Keel Services
6.1. Authentication Service
6.1.1. Configuration-based Authentication Service
6.1.2. NIS and/or LDAP Authentication Service
6.1.3. Kerberos-5 Authentication Service
6.1.4. NT Authentication Service
6.1.5. Configuration-based Authentication Service
6.2. Authorization Service
6.2.1. NIS and/or LDAP Authentication Service
6.2.2. Persistence-based Authentication Service
6.3. Chart Generation Service
6.3.1. JFreeChart Service
6.4. Encryption Service
6.4.1. Base64 Encryption Service
6.4.2. DES Encryption Service
6.5. Domain Service
6.5.1. Configuration-based Domain Service
6.6. Event Service
6.6.1. Default Event Service
6.6.2. OpenJMS Event Service
6.7. Text Filter Service
6.7.1. Default Filter Service
6.8. Finder Service
6.8.1. Lucene Finder Service
6.8.2. Persistent Finder Service
6.9. FTP Service
6.9.1. Apache FTP Service
6.10. JDO Service
6.10.1. TJDO JDO Service
6.10.2. XORM JDO Service
6.11. Email Service
6.11.1. JavaMail Email Reader/Sender Service
6.12. Model Service
6.12.1. Default Model Service
6.12.1.1. Default Validator
6.13. Password Service
6.13.1. JPassGen Password Service
6.13.2. non-LGPL Password Service
6.14. Persistence Service
6.14.1. Default Persistence Service
6.14.1.1. Configuration
6.14.2. Hibernate Persistence Service
6.15. Query Service
6.15.1. JDBC Query Service
6.16. Report Generation Service
6.16.1. JFreeReport Report Generation Service
6.17. Scheduler Service
6.17.1. Quartz Scheduler Service
6.18. Scripting Service
6.18.1. BSF Script Service
6.18.2. Jelly Script Service
6.19. User/Group Management Service
6.19.1. Persistence-based User/Group Manager Service
7. Keel Clients
7.1. Axis Client
7.2. CLI Client
7.3. CLI Client
7.4. Desktop Client
7.5. Eclipse/SWT Desktop Client
7.6. Swing Desktop Client
7.7. Thinlet Client
7.8. Java Server Faces (JSF) Client
7.9. Cocoon/JSF Client
7.10. Maverick Client
7.11. WebWork2 Client
7.12. Struts Client
7.13. Velocity Client
7.14. Wireless Client
8. Keel Applications
8.1. Utilities Application
8.1.1. Sequences
8.1.1.1. Re-Using Components with Different Configuration
8.1.1.2. Custom Component Configuration
8.1.2. Add Commands
8.1.3. Bean
8.1.4. Display Configuration
8.1.5. Fork
8.1.6. Log
8.1.7. Prompt
8.1.8. Validate
8.2. Persistent Create/Update/Delete (CRUD) Application
8.3. Eclipse/SWT Desktop Client
8.4. File Upload/Download Support
8.5. Navigation Menu
8.6. Sample Application - Polling
8.7. Sample Application - User Registration
8.8. Security Maintenance
8.9. Sample Application - SpellChecking
8.10. Sample Application - Wireless Client App
8.11. Workflow Service
8.12. Helm Application
9. Bringing It All Together: Keel Projects
9.1. Project Configuration
9.2. Using Configuration Properties Mapping
9.3. Changing Configuration of a Deployed Project
9.4.
9.4.1. Previous method of Specifying Database Properties
10. Distributed Services With Keel
10.1. Overview
10.2. Single-VM
10.3. Database Separation
10.4. Distributed Business Logic
10.5. Distributed Web-Application Tier
10.6. Distributed Databases
11. Enhancing Keel
12. Integration
13. Development Tools
13.1. Keel's Maven Build System
13.1.1. Installing Maven
13.1.2. Maven Keel Projects
13.1.2.1. Types of Projects
13.1.2.2. Managing Dependencies
13.1.3. Goals for Service Projects
13.1.4. Goals for Application Projects
13.1.5. Other Maven Goals
13.1.6. Using Maven with Eclipse
13.1.6.1. Eclipse Maven Plugin
13.1.6.2. Maven Eclipse Plugin
13.1.7. Mangaging Versions and Dependencies
13.1.7.1. Keel Dependencies
13.1.8. Using "SNAPSHOT" Versions
13.1.9. Setting up Maven Repositories: Team Development
14. Best Practices
14.1. Versioning
14.1.1. Version Number Formats
14.1.2. Changing Version Numbers
14.1.3. Procedure for Releasing a Version
Glossary
Index