Inspirel banner

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