Programming Distributed Systems with YAMI4
I Welcome To YAMI4
1 Introduction
1.1 A Bit Of History
1.2 YAMI4 Strong Points
1.2.1 Non-intrusiveness
1.2.2 Composability
1.2.3 Lightweight Scalability
1.2.4 Support For Real-Time Systems
1.2.5 Lack Of Dependencies
1.2.6 Small Size
1.2.7 Performance
1.2.8 Easy To Learn Interface
1.3 Licensing
1.4 Who Should Read This Book
1.5 Conventions Used In This Book
1.6 Thank You
2 Library Structure And Compilation
2.1 Core C++ Library
2.2 C++ General-Purpose Library
2.3 Ada Libraries
2.4 Java Library
2.5 .NET Library
2.6 Python Library
2.7 Central Services
2.8 YAMI4 Definition Language Compiler
II General-Purpose Programming
3 Data Model
3.1 Distributed Systems Are Dynamically Typed
3.2 Parameters
3.3 General Notes On Basic Types
3.3.1 Ada
3.3.2 C++
3.3.3 Java
3.3.4 .NET
3.3.5 Python
3.4 Creating Parameters
3.4.1 Ada
3.4.2 C++
3.4.3 Java
3.4.4 .NET
3.4.5 Python
3.5 Setting New Entries
3.5.1 Ada
3.5.2 C++
3.5.3 Java
3.5.4 .NET
3.5.5 Python
3.6 Reading Entries
3.6.1 Ada
3.6.2 C++
3.6.3 Java
3.6.4 .NET
3.6.5 Python
3.7 Removing Entries
3.7.1 Ada
3.7.2 C++
3.7.3 Java
3.7.4 .NET
3.7.5 Python
3.8 Finding And Exploring Entries
3.8.1 Ada
3.8.2 C++
3.8.3 Java
3.8.4 .NET
3.8.5 Python
3.9 Iteration
3.9.1 Ada
3.9.2 C++
3.9.3 Java
3.9.4 .NET
3.9.5 Python
3.10 Locking
3.11 Serialization
3.11.1 Ada
3.11.2 C++
3.11.3 Java
3.11.4 .NET
3.11.5 Python
3.12 Multithreading And Performance Notes
3.13 Raw Binary Data Transfer
3.13.1 Ada
3.13.2 C++
3.13.3 Java
3.13.4 .NET
3.13.5 Python
4 Messaging - Common Concepts
4.1 Direct vs. Decoupled
4.2 Agents
4.3 Configuration Options
4.3.1 TCP Listening Backlog
4.3.2 TCP Reuse Server Address
4.3.3 TCP Non-Blocking I/O
4.3.4 TCP Connect Timeout
4.3.5 TCP No-Delay
4.3.6 TCP Keepalive
4.3.7 TCP Frame Size
4.3.8 UDP Frame Size
4.3.9 Unix Listening Backlog
4.3.10 Unix Non-Blocking I/O
4.3.11 Unix Frame Size
4.3.12 File Non-Blocking I/O
4.3.13 File Frame Size
4.3.14 Dispatcher Threads
4.3.15 Connection Retries
4.3.16 Connection Retry Delay Spread
4.3.17 Outgoing Water Marks
4.3.18 Incoming Water Marks
4.3.19 Raw Binary Delivery
4.3.20 Default Failover Timeout
4.3.21 Incoming Queue Max Length
4.3.22 Ada
4.3.23 C++
4.3.24 Java
4.3.25 .NET
4.3.26 Python
5 Messaging - Client Side
5.1 Outgoing Messages
5.1.1 Ada
5.1.2 C++
5.1.3 Java
5.1.4 .NET
5.1.5 Python
5.2 One-Way Messages
5.3 Message Priorities
5.4 Load Balancing And Fail-Over
6 Messaging - Server Side
6.1 Listeners
6.1.1 TCP Listeners
6.1.2 SSL Listeners
6.1.3 UDP Listeners
6.1.4 Unix Listeners
6.1.5 Ada
6.1.6 C++
6.1.7 Java
6.1.8 .NET
6.1.9 Python
6.2 Objects And Message Handlers
6.2.1 Ada
6.2.2 C++
6.2.3 Java
6.2.4 .NET
6.2.5 Python
6.3 Incoming Messages
6.3.1 Ada
6.3.2 C++
6.3.3 Java
6.3.4 .NET
6.3.5 Python
6.4 Publish-Subscribe Messaging
6.4.1 Ada
6.4.2 C++
6.4.3 Java
6.4.4 .NET
6.4.5 Python
7 Central Services
7.1 Name Server
7.1.1 Bind
7.1.2 Resolve
7.1.3 List
7.1.4 Startup and Configuration
7.2 Message Broker
7.2.1 Message Routing Based On Tag Matching
7.2.2 Clustered Installations And Forwarding
7.2.3 Publish
7.2.4 Confirmed Publish
7.2.5 Subscribe
7.2.6 Get Statistics
7.2.7 Startup and Configuration
7.3 Queues
7.3.1 Put
7.3.2 Get
7.3.3 Try-Get
7.3.4 Get Statistics
7.3.5 Startup and Configuration
8 Loose Ends
8.1 Channel Management
8.1.1 Connection Event Notifications
8.2 Message Ordering
8.3 Error Reporting and Event Logging
8.3.1 Errors
8.3.2 Logging
8.4 Java Beans
9 Examples
9.1 Printer
9.1.1 Ada
9.1.2 C++
9.1.3 Java
9.1.4 .NET
9.1.5 Python
9.2 Calculator
9.2.1 Ada
9.2.2 C++
9.2.3 Java
9.2.4 .NET
9.2.5 Python
9.3 Publish-Subscribe
9.3.1 Ada
9.3.2 C++
9.3.3 Java
9.3.4 .NET
9.3.5 Python
10 YAMI4 Definition Language
10.1 The Benefits Of Code Generation
10.2 YDL Syntax
10.2.1 General Conventions
10.2.2 Packages
10.2.3 Record Types
10.2.4 Interfaces And Messages
10.3 YDL Compiler
10.4 YDL Language Mappings
10.4.1 Ada
10.4.2 C++
10.4.3 Java
III Critical Systems
11 Special Needs
11.1 Minimized Dependencies
11.2 Private Memory Partitions
11.2.1 Predictability
11.2.2 Isolation
11.2.3 Ada
11.2.4 C++
12 Messaging With The Core Library
12.1 Data Model
12.2 Messaging
12.3 Callbacks
12.3.1 Incoming Connection
12.3.2 Incoming Connection Closing
12.3.3 Message Progress
12.3.4 Incoming Message
12.4 Doing The I/O Work
12.5 Multithreading
A Wire Protocol
A.1 Serialization Format
A.2 Frame Format
B General-Purpose Message Routing
C Inter-Language Interface
D JSF Coding Standard Exceptions