User Guide Rational Rose RealTime Connexis

User Manual:

Open the PDF directly: View PDF PDF.
Page Count: 384 [warning: Documents this large are best viewed by clicking the View PDF Link!]

Rational Software Corporation
support@rational.com
http://www.rational.com
User Guide
RATIONAL ROSE® REALTIME CONNEXIS
VERSION: 2002.05.00
PART NUMBER: 800-025101-000
WINDOWS/UNIX
IMPORTANT NOTICE
COPYRIGHT
Copyright ©1993-2001, Rational Software Corporation. All rights reserved.
Part Number: 800-025101-000
Version Number: 2002.05.00
PERMITTED USAGE
THIS DOCUMENT CONTAINS PROPRIETARY INFORMATION WHICH IS THE
PROPERTY OF RATIONAL SOFTWARE CORPORATION (“RATIONAL”) AND IS
FURNISHED FOR THE SOLE PURPOSE OF THE OPERATION AND THE
MAINTENANCE OF PRODUCTS OF RATIONAL. NO PART OF THIS
PUBLICATION IS TO BE USED FOR ANY OTHER PURPOSE, AND IS NOT TO BE
REPRODUCED, COPIED, ADAPTED, DISCLOSED, DISTRIBUTED,
TRANSMITTED, STORED IN A RETRIEVAL SYSTEM OR TRANSLATED INTO
ANY HUMAN OR COMPUTER LANGUAGE, IN ANY FORM, BY ANY MEANS, IN
WHOLE OR IN PART, WITHOUT THE PRIOR EXPRESS WRITTEN CONSENT OF
RATIONAL.
TRADEMARKS
Rational, Rational Software Corporation, Rational the e-development company,
ClearCase, ClearCase Attache, ClearCase MultiSite, ClearDDTS, ClearQuest,
ClearQuest MultiSite, DDTS, Object Testing, Object-Oriented Recording, ObjecTime
& Design, Objectory, PerformanceStudio, ProjectConsole, PureCoverage,
PureDDTS, PureLink, Purify, Purify'd, Quantify, Rational, Rational Apex, Rational
CRC, Rational Rose, Rational Suite, Rational Summit, Rational Visual Test, Requisite,
RequisitePro, RUP, SiteCheck, SoDA, TestFactory, TestFoundation, TestMate, The
Rational Watch, AnalystStudio, ClearGuide, ClearTrack, Connexis, e-Development
Accelerators, ObjecTime, Rational Dashboard, Rational PerformanceArchitect,
Rational Process Workbench, Rational Suite AnalystStudio, Rational Suite
ContentStudio, Rational Suite Enterprise, Rational Suite ManagerStudio, Rational
Unified Process, SiteLoad, TestStudio, VADS, among others, are either trademarks or
registered trademarks of Rational Software Corporation in the United States and/or
in othercountries.All other names are used for identification purposes only, and are
trademarks or registered trademarks of their respective companies.
Microsoft, the Microsoft logo, Active Accessibility, Active Channel, Active Client,
Active Desktop, Active Directory, ActiveMovie, Active Platform, ActiveStore,
ActiveSync, ActiveX, Ask Maxwell, Authenticode, AutoSum, BackOffice, the
BackOffice logo, BizTalk, Bookshelf, Chromeffects, Clearlead, ClearType, CodeView,
Computing Central, DataTips, Developer Studio, Direct3D, DirectAnimation,
DirectDraw, DirectInput, DirectMusic, DirectPlay, DirectShow, DirectSound, DirectX,
DirectXJ, DoubleSpace, DriveSpace, FoxPro, FrontPage, Funstone, IntelliEye, the
IntelliEye logo, IntelliMirror, IntelliSense, J/Direct, JScript, LineShare, Liquid Motion,
the Microsoft eMbedded Visual Tools logo, the Microsoft Internet Explorer logo, the
Microsoft Office Compatible logo, Microsoft Press, the Microsoft Press logo, Microsoft
QuickBasic, MS-DOS, MSDN, Natural, NetMeeting, NetShow, the Office logo, One
Thumb, OpenType, Outlook, PhotoDraw, PivotChart, PivotTable, PowerPoint,
QuickAssembler, QuickShelf, Realmation, RelayOne, Rushmore, SourceSafe,
TipWizard, TrueImage, TutorAssist, V-Chat, VideoFlash, Virtual Basic, the Virtual
Basic logo, Visual C++, Visual FoxPro, Visual InterDev, Visual J++, Visual SourceSafe,
Visual Studio, the Visual Studio logo, Vizact, WebBot, WebPIP, Win32, Win32s, Win64,
Windows, the Windows CE logo, the Windows logo, Windows NT, the Windows Start
logo, and XENIX are trademarks or registered trademarks of Microsoft Corporation in
the United States and other countries.
FLEXlm and GLOBEtrotter are trademarks or registered trademarks of GLOBEtrotter
Software, Inc. Licensee shall not incorporate any GLOBEtrotter software (FLEXlm
libraries and utilities) into any product or application the primary purpose of which is
software license management.
Portions Copyright ©1992-20xx, Summit Software Company. All rights reserved.
PAT E N T
U.S. Patent Nos.5,193,180 and 5,335,344 and 5,535,329 and 5,835,701. Additional
patents pending.
Purify is licensed under Sun Microsystems, Inc., U.S. Patent No. 5,404,499.
GOVERNMENT RIGHTS LEGEND
Use, duplication, or disclosure by the U.S. Government is subject to restrictions set
forth in the applicable Rational Software Corporation license agreement and as
provided in DFARS 277.7202-1(a) and 277.7202-3(a) (1995), DFARS
252.227-7013(c)(1)(ii) (Oct. 1988), FAR 12.212(a) (1995), FAR 52.227-19, or FAR 227-14,
as applicable.
WARRANTY DISCLAIMER
This document and its associated software may be used as stated in the underlying
license agreement. Rational Software Corporation expressly disclaims all other
warranties, express or implied, with respect to the media and software product and its
documentation, including without limitation, the warranties of merchantability or
fitness for a particular purpose or arising from a course of dealing, usage, or trade
practice.
User Guide - Rational Rose RealTime Connexis v
Contents
Preface i
Road Map ii
Related Documentation ii
How to Get Help iii
When contacting Rational technical support iii
Rational web site iii
Other Resources iii
Contacting Rational Technical Publications iv
Contacting Rational Technical Support iv
Chapter 1 Rational Connexis Overview 5
Key Benefits of Connexis 5
Connexis Leverages Proven Standards 6
Connexis is Tightly Integrated with Rose RealTime 6
Connexis Provides Access Transparency 7
Connexis Provides Location Transparency 7
Connexis is Very Flexible and Easily Configurable 8
Connexis Provides Support for Testing Distributed Applications 9
Connexis is Designed to be Fault-tolerant and Reliable 9
Connexis Terminology and Definitions 11
vi User Guide - Rational Rose RealTime Connexis
Connexis Application Layers 13
UML Application 14
Ports in Rose RealTime 14
Distributed Connection Service 16
Transport 16
Locator Service 17
Using the locator 17
The HelloWorld Model 18
Running the HelloWorld Model 18
Additional HelloWorld Models 19
HelloWorldHotStandby 19
HelloWorldLoadSharing 19
HelloWorldOverflowToBackupService 19
HelloWorldRedundantLocator 20
Using Connexis 20
Chapter 2 Using Connexis Model Examples 21
The BasicTest Model 21
The Quick Start Model 22
Quick Start Iteration 1 Model 22
Quick Start Iteration 2 Model 22
The HelloWorld Model 23
Running the HelloWorld Model 23
Additional HelloWorld Models 24
HelloWorldHotStandby 24
HelloWorldLoadSharing 24
HelloWorldOverflowToBackupService 24
HelloWorldRedundantLocator 25
The DCS Performance Model 25
Running the Performance Model 25
Performance model server output 27
Performance model client output 28
User Guide - Rational Rose RealTime Connexis vii
Chapter 3 Quick Start 31
Quick Start Overview 31
Iteration 1: Creating the Rose RealTime Model 35
Step 1: Create a New Model 35
Step 2: Create Packages for the Model 35
Step 3: Create the Ping, Pong, and ContainerCapsules 38
Step 4: Create the PingPong Protocol Class 40
Step 5: Build the Structure of the Model 43
Step 6: Implement the State Machines for Ping and Pong 48
Step 7: Build and Test the Model 53
Iteration 2: Connexis Enabling our Application 59
Step 1: Remove the Connector Between the pingPong Ports 59
Step 2: Make Changes to Pong’s pingPong Port 60
Step 3: Make Changes to Ping’s pingPong Port 61
Step 4: Adding DCS Layer Notification to the Ping and Pong
Capsules 63
Step 5: Modify Ping’s State Machine to Wait for Connexis 64
Step 6: Modify Pong’s State Machine to Wait for Connexis 65
Step 7: Modify Ping’s State Machine to Wait for Notify 66
Step 8: Add Registration Code to the Ping and Pong Capsules 67
Step 9: Add the Connexis Configuration Capsules to Your Model 69
Step 10: Create and Configure the Ping Component 74
Step 11: Create and Configure the Pong Component 75
Step 12: Add Component Dependencies 77
Step 13: Build and Execute the Models 79
Basic Connexis Development Approach Summary 82
Chapter 4 Adding Connexis Support to Your Model 83
Sharing DCS Interfaces 84
Sharing DCS Interfaces into your Model 84
Removing Shared Packages 85
viii User Guide - Rational Rose RealTime Connexis
Configuring Connexis Capsules 85
Manually Integrating Transports Into a Model 88
Configuring a Component for Connexis 90
Verifying Connexis Enabled Components 91
Initializing Your Connexis Capsule 92
Using the RTDInitStatus Protocol 93
Using Fixed Initialization Order 98
Converting Connexis Version 2000.02.10 Models to Connexis
2001A.04.00 Models 99
Verifying Component Compatibility with Connexis Version
2001A.04.00. 103
RTDErrorType Error Reporting 104
Chapter 5 Establishing Connections 107
General Connection Patterns 108
Client/Server 108
Peer to Peer 109
Unwired Port Registration 110
What is Registration? 111
Port API 112
Automatic vs. Application Registration 113
Registration Parameters 115
Name Resolution 118
Connexis Connection Options 118
Local Connections 119
External Explicit Connections 124
External explicit examples 124
Locator Connections 125
Registration Summary 127
Scenario 1: Publisher Registered with the ILS 127
Scenario 2: Publisher Registered with the DCS 128
Scenario 3: Publisher Registered with the Locator 130
Multiple Publishers 131
User Guide - Rational Rose RealTime Connexis ix
Connection Design Heuristics 131
When to Use Replicated Publisher Ports 131
Use of Invokes 132
Use of Broadcast Sends 132
Use of Notification 133
Use of Defers 133
Sending Data 134
Sending Data Classes by Value 134
Chapter 6 Using the Connexis Locator Service 135
Adding Locator Support to a Model 136
Publication and Subscription 136
Publication 136
Subscription 137
Ranking Published Ports 137
Load-sharing of Publishers 138
Examples 138
Locator Dynamics 140
Fully Subscribed Publishers 141
Subscriber Losing Connection to a Publisher 142
Locator Failure 142
Locator Race Condition 144
Unconnected Subscribers 145
Locator Configuration 145
Locator Parameters 145
Locator Parameter Examples 149
Creating your Own Name Service 150
Chapter 7 Using the Connexis Viewer 151
Viewer Architecture 153
Adding Viewer Support to a Model 153
Adding Metrics Support to a Model 154
x User Guide - Rational Rose RealTime Connexis
Starting the Connexis Viewer 155
Duplicate CNX Unique Identifiers 156
Viewer Main Window 156
Viewer Menus 158
File Menu 158
View Menu 158
Tools Menu 159
Windows Menu 161
Help Menu 161
Explorer Tree View 162
Processor Icons 163
Component Instance Icons 163
Filter Icons 164
Component Instance Status 164
Named Services Icons 165
Port Icons 165
Virtual Circuit Icons 166
Object Information Column 167
Popup Menus 168
Session Popup Menu 168
Processor Popup Menu 169
Component Instance Popup Menu 170
Port Reference Popup Menu 173
Virtual Circuit Popup Menu 174
Creating Processors and Component Instances 175
Adding a Processor 175
Changing the Properties of a Processor 176
Removing a Processor 177
Adding a Component Instance 177
Changing the Properties of a Component Instance 180
User Guide - Rational Rose RealTime Connexis xi
Performing Event Tracing 182
Defining a Trace Filter for a Component Instance 182
Setting trace filters 185
Defining a Port Reference Trace 188
Defining a Virtual Circuit Trace 192
Trace Window 194
Component Instance Trace Window 194
Virtual Circuit Trace Window 195
Trace Window Popup Menu 196
Show trace data 197
Define trace 199
Trace active 199
Select in tree 199
Clear 199
Save trace 199
Trace Header Context Menu 201
Generating Interaction Diagrams from Trace Output Files 202
Reporting of error messages 206
Log Window 206
Displaying the Metrics Collection 207
Starting Metrics Collection 208
Using the Metrics Window 208
Summary metrics collection 210
Detailed metrics collection 214
Messages metrics collection 216
Audits metrics collection 219
Engineering metrics collection 221
DCS errors metrics collection 225
Application errors metrics collection 228
Application incompatibility metrics collection 232
Stopping Metrics Collection 234
Saving Collected Metrics 234
xii User Guide - Rational Rose RealTime Connexis
Viewer Tips and Usage Notes 234
Capturing Pre-Viewer Session Messages 234
Error and Warning Tracing 235
Software errors 235
Software warnings 235
Maximizing Viewer Responsiveness 235
Chapter 8 Using the Connexis Metrics Service 237
Obtaining Metrics Data with a Metrics Service 237
Enabling Metrics in the DCS library 238
Adding a Metrics Port 238
Subscribing to the Metrics Service 238
Collecting and Processing Metrics 239
Using Metrics and the Connexis Viewer 243
Chapter 9 Registration String Grammar 245
Registration String Grammar for DCS Registrations 245
Chapter 10 Connexis Command Line Options 247
Component Instance with Fixed Endpoints (no locator service) 247
Component Instance using CDM Endpoint, Locator using CDM 248
Component Instance using CDM and CRM Endpoints, Primary
Locator using CDM, Backup Locator using CRM 249
Component Instance with CDM and CRM, CRM is Preferred Transport
250
Miscellaneous Command Line Options 250
Chapter 11 Connexis Messages, Errors, and Warnings 255
Initialization Messages 255
Initialization Errors 257
Parameter Errors 257
User Guide - Rational Rose RealTime Connexis xiii
Chapter 12 Connexis Customization Reference 261
Engineering Rules Overview 262
Thread Configuration 262
Process view of a Connexis application 263
Default number of threads 264
The application layer 265
DCS and transport Layer 265
Buffer Configuration 266
Overall buffer configuration of a Connexis application 266
Application layer 267
DCS layer 268
Connexis buffer usage 270
Configuring the Number of Virtual Circuits 271
Verifying Connections 272
Handshake audit 272
Connection audit 273
Reset audit 273
Command Line Options Reference 274
Setting Command Line Options 274
System wide 275
DCS options 277
Transporter options 278
Transport specific options 282
CDM 285
Locator 286
Connexis viewer/target agent 287
Chapter 13 Customizing and Porting DCS Libraries 289
Common customizations for the DCS 289
Other resources 290
Operating system capabilities 290
What to do before calling Rational support 290
Porting the DCS to a New Target Configuration 290
Creating a New TargetRTS Library 291
Creating DCS Target Specific Header Files 292
Loading the DCS Model 293
Creating a C++ Library Component 293
Configuring the C++ Library Component Settings 294
xiv User Guide - Rational Rose RealTime Connexis
Configuring the CDR Encode/Decode Functionality 296
Creating a Minimal DCS Library Configuration 296
Building the Library 297
Testing the Port 297
Chapter 14 Using the Transport Integration Framework 299
Transport Integration Overview 300
DCS Architecture 301
Terminology 302
Connection Lifecycle 303
DCS Threading Model 304
Understanding your Transport 305
Determine the Name of your Transport and Protocols 306
Decide the String Format of the User-specified Address 306
Decide How to Validate the Address 306
Decide the Transformation of the Address 307
Determine the Internal Representation of your Address 308
Decide the Format of the Listening Point Information 309
Decide if your Transport is Blocking or Non-blocking 309
Decide the Recommended Address Resolution Configuration 310
Decide How the Transport will Recover from Transport Failures
311
Decide How to Audit your Transport 311
Decide the Format of your Messages 312
Decide Strategy for Listening for Messages 313
Integrating your Transport 315
Setting up the Model 315
Understand the Integrated Transport 316
Implementing the RTDTransportAddressFactory Subclass 316
Implementing the RTDTransportAddress Subclass 317
Implementing the RTDTransportEndpointFactory Subclass 318
Implementing the RTDTransportEndpoint Subclass 319
Implementing the RTDTransport Subclass 320
User Guide - Rational Rose RealTime Connexis xv
Building the Transport Integration 321
Packaging the Transport Integration 321
Using the Transport Integration in Another Model 322
Testing the Transport Integration 322
TIF Classes 322
RTDTransportAddress 325
Constructors 327
RTDTransportEndpointFactory 331
RTDTransportEndpoint 332
Constructor 333
RTDTransport 339
RTDTIF 341
RTDTransportProfile 341
RTDConnexisAPI 348
Appendix A Comparison of TCP/IP and UDP/IP 355
Index 357
xvi User Guide - Rational Rose RealTime Connexis
User Guide - Rational Rose RealTime Connexis i
Preface
This document is organized so that each chapter is as stand-alone as
possible. This section provides a brief overview of the content of each
chapter and several reading paths through the document based on
reader knowledge.
“Rational Connexis Overview” on page 5, provides a brief introduction
to Connexis, the solutions that it provides and its primary features.
Quick Start” on page 31, provides a simple Connexis tutorial. This
tutorial is also useful for those who are new to Rose RealTime.
“Adding Connexis Support to Your Model” on page 83 describes how to
add Connexis support to your Rose RealTime model.
Establishing Connections” on page 107, elaborates on the concepts
presented in the Overview chapter. This chapter describes the different
ways of creating connections using Connexis, the syntax for describing
Connexis endpoints and the parameters that can be supplied as part
of registering connection endpoints.
Using the Connexis Locator Service” on page 135, describes the
Connexis Locator Service and how to configure it to run in a distributed
application.
Using the Connexis Viewer” on page 151, describes the Connexis
Viewer and how to configure it to view a distributed application.
Using the Connexis Metrics Service” on page 237 describes how to
collect DCS statistics from within a Rose RealTime executable model.
“Registration String Grammar” on page 245 provides information on
the Backus-Naur Form (BNF) Grammar for the registerSAP and
registerSPP commands.
Preface
ii User Guide - Rational Rose RealTime Connexis
“Connexis Command Line Options” on page 247 provides command
line examples for commonly-used Connexis configurations.
Connexis Messages, Errors, and Warnings” on page 255 provides
information to assist users in developing and debugging their models.
“Connexis Customization Reference” on page 261, describes the
different configuration options that can be used to customize how
Connexis works.
“Customizing and Porting DCS Libraries” on page 289, describes the
Distributed Connection Service and explains how to customize or port
DCS libraries to a new target environment.
“Using the Transport Integration Framework” on page 299, describes
the Connexis Transport Integration Framework and how to integrate
common or customized transport in a distributed application.
“Comparison of TCP/IP and UDP/IP” on page 355, provides
background information about TCP/IP and UDP/IP.
Road Map
People who are new to Rose RealTime should review the Rose RealTime
documentation followed by the Overview and Quick Start chapters of
this document.
People who are new to Connexis, should read the Overview and Quick
Start chapters before any other part of the manual.
If you are already familiar with Rose RealTime and have a good
understanding of the problems that Connexis solves, you may want to
start with Establishing Connections, and refer to the Overview chapter
only when terms or concepts are unfamiliar to you.
Related Documentation
The following is a list of documentation that is related to the Connexis
product.
Rose RealTime online Help and user documentation. This
documentation is available online with the Rose RealTime product.
ISO/IEC 10746-1 ODP Reference Model Part 1. This specification
details the challenges and potential solutions to distributed
computing.
How to Get Help
User Guide - Rational Rose RealTime Connexis iii
How to Get Help
This section describes procedures for interacting with Rational
Software Corporation's technical support services.
When contacting Rational technical support
When contacting technical support for Rose RealTime, please be
prepared to supply the following information:
Name, telephone number, and company name.
Product version number (found in the viewers Help > About dialog).
Computer make and model.
Make and version of the operating system.
Make and version of development tools (configuration management
program, compiler, linker, RTOS, requirements management
program).
Your log number (if you are calling about a previously reported
problem).
If your site has a designated, on-site support person, please try to
contact that person before contacting Rational technical support.
Rational web site
You can contact technical support and obtain the latest product
information through our web site at:
http://www.rational.com/products/rosert
Other Resources
Online Help is available for Rational Rose RealTime.
Select an option from the Help menu
All manuals are available online, either in HTML or PDF format.
To access the online manuals, click Rose RealTime Online Documentation
from the Start menu.
For more information on training opportunities, see the Rational
University Web site: http://www.rational.com/university.
Preface
iv User Guide - Rational Rose RealTime Connexis
Contacting Rational Technical Publications
To send feedback about documentation for Rational products, please
send e-mail to our Technical Documentation Department at
techpubs@rational.com.
Contacting Rational Technical Support
If you have questions about installing, using, or maintaining this
product, contact Rational Technical Support.
Note: When you contact Rational Technical Support, please be prepared
to supply the following information:
Your name, telephone number, and company name
Your computers make and model
Your computers operating system and version number
Product release number and serial number
Your case ID number (if you are following up on a previously-
reported problem)
Your Location Telephone Fax E-mail
North America (800) 433-5444
(toll free)
(408) 863-4000
Cupertino, CA
(781) 676-2460
Lexington, MA
support@rational.com
Europe, Middle
East, Africa
+31 (0) 20-4546-200
Netherlands
+31 (0) 20-4546-202
Netherlands
support@europe.rational.com
Asia Pacific +61-2-9419-0111
Australia
+61-2-9419-0123
Australia
support@apac.rational.com
User Guide - Rational Rose RealTime Connexis 5
Chapter 1
Rational Connexis Overview
Rational Connexis is a Rational Rose for RealTime add-in product that
provides connectivity for Unified Modeling Language (UML) models.
Connexis is tightly integrated with Rose RealTime and is highly
optimized for event-driven asynchronous systems.
Connexis improves an applications time to market by eliminating the
need to design, develop, and test a custom Inter-Process
Communications (IPC) mechanism. The use of a Commercial Off The
Shelf (COTS) distribution component, such as Connexis, simplifies and
de-risks the design and deployment of distributed systems.
Key Benefits of Connexis
In addition to the time to market advantage of using Connexis, there
are also several technical advantages to using Connexis. These are
listed below and will be discussed in more detail in the following
sections:
Connexis Leverages Proven Standards
Connexis is Tightly Integrated with Rose RealTime
Connexis Provides Access Transparency
Connexis Provides Location Transparency
Connexis is Very Flexible and Easily Configurable
Connexis Provides Support for Testing Distributed Applications
Connexis is Designed to be Fault-tolerant and Reliable
Chapter 1 Rational Connexis Overview
6 User Guide - Rational Rose RealTime Connexis
Connexis Leverages Proven Standards
Connexis is built upon current industry-standard technologies.
Connexis supports sending UML-defined data classes between Rose
RealTime models running in different processes and lets you integrate
proven transports using the Connexis Transport Integration
Framework. As shown in Figure 1, Connexis Datagram Messaging
(CDM) is designed on top of UDP and Connexis Reliable Messaging
(CRM) is designed on top of TCP. Connexis also supports custom
messaging transports, allowing your applications to support native
communication protocols to improve service.
Figure 1 Connexis Architecture
Connexis is Tightly Integrated with Rose RealTime
The Connexis product is tightly integrated with Rose RealTime. Adding
Connexis support to a Rose RealTime model simply involves sharing
Connexis packages, adding Connexis capsule roles to the model, and
configuring components for your application. Transports that are
integrated into Connexis are available to the application in the same
manner as standard Connexis transports. Using transports provided
by Connexis and using integrated transports are very similar. Once you
have used one, you can use any other.
Key Benefits of Connexis
User Guide - Rational Rose RealTime Connexis 7
If you know how to use Rose RealTime, learning how to use Connexis
is easy. Connexis ports are unwired ports in your Rose RealTime model
that you register with the Target RSL using a Connexis registration
string. The only concept that is new to a Rose RealTime user is the
format of the Connexis registration string. Once the ports are
registered, sending and receiving messages on them occurs in the
exact same way as it does in a UML model that does not use Connexis.
Connexis Provides Access Transparency
The flexible encoding and decoding strategy that is used by Connexis
allows Connexis to work on different types of hardware environments.
The endian of the target environment is transparent to the executing
application.
Connexis Provides Location Transparency
The Connexis Locator service provides location transparency for a
distributed application. The application uses service names to refer to
the endpoints that are being connected. As a result, the physical
address of these endpoints never has to be revealed to the application.
Locator features are available for services published on integrated
transport addresses. Connexis also supports many different
distribution options which allow the design of the application to be very
flexible.
The following are the most common types of connections supported:
Local connections
Connexis supports local connections which are optimized to be as
efficient as directly wired ports. The endpoints of the local
connections are registered using service names and Connexis
takes care of binding the endpoints together. Once bound, these
local connections have the same performance characteristics as
two wired ports that have been bound together.
Explicit endpoint connections
Connexis accepts registrations that use explicit endpoint addresses
in the registration string. This can be used if the application knows
the processor location of the services that it wants to access. In
this way a client can bind to a service using the explicit processor
location and the service name of the desired service.
Chapter 1 Rational Connexis Overview
8 User Guide - Rational Rose RealTime Connexis
Locator connections
The Connexis Locator service can be used to find a service (given
the service name) anywhere in the distributed application. Once
the Locator has been started, one side of the connection registers
with it as the publisher, and the other side registers as the
subscriber. The Connexis Locator finds the appropriate endpoints,
and feeds them back to the connection service which establishes
the connection.
Connexis is Very Flexible and Easily Configurable
Connexis supports a wide range of configuration options. This enables
the engineering of Connexis to be very flexible and adaptable to
different target environments. Configuration options are available to:
configure connection audits
adjust buffer counts and sizes
adjust thread priorities and stack sizes
adjust message delivery timing characteristics
The Target Agent, which interfaces to the Connexis Viewer, and the
Connexis Locator Service do not have to be a part of every Connexis
application. If your application does not use the Locator and you do not
need access to the Connexis Viewer, these components can be left out
of the nodes configuration. This helps minimize the size of the
Connexis code that gets linked in your application. For more
information about the Connexis Viewer refer to Using the Connexis
Viewer on page 151. For more information on the Connexis Locator
Service refer to Using the Connexis Locator Service on page 135.
Connexis allows multiple ports to be registered with the same service
name. This, coupled with the normal Rose RealTime feature of port
multiplicity, enables several simple distribution patterns to be
supported automatically by Connexis. Patterns that are not directly
supported can usually be implemented very easily in Rose RealTime.
Connexis is shipped with full source. The library can be rebuilt if
needed for a custom environment configuration.
Key Benefits of Connexis
User Guide - Rational Rose RealTime Connexis 9
Connexis Provides Support for Testing Distributed Applications
One of the tools that comes with Connexis is the Connexis Viewer. The
Connexis Viewer allows developers to attach to running Connexis
applications and to graphically view connections as they are being
established and taken down. The Viewer provides a minimally-
intrusive tracing mechanism that allows you to trace messages that are
being sent and received by any of the endpoints in a distributed
application. The Viewer also receives messages from integrated
transports and collects metrics information.
The traditional method of testing a distributed Rose RealTime
application is to attach a probe on each end of a virtual circuit to make
sure that the connection has been established. This method of testing
does not scale well. In large systems, it is very difficult to know where
the other end of a virtual circuit is in the model (consider systems with
replicated publishers or multiple publishers with the same name). The
Connexis Viewer simplifies the monitoring of distributed connections.
The Viewer also has the ability to import the deployment diagram from
a Rose RealTime model so that the information about the distributed
application does not have to be entered in two places. The Rose
RealTime target observability feature can also be used to trace message
flow on unwired Connexis ports.
The Connexis installation provides DCS libraries that are compiled
with debugging capabilities for the Connexis Viewer and the Target
Observability feature of Rose RealTime. This library configuration
makes the initial debugging of distributed applications easier. As the
application becomes more mature, consider building a minimal
configuration of the DCS libraries for your target configuration.
Building a minimal configuration is described in Customizing and
Porting DCS Libraries on page 289.
Connexis is Designed to be Fault-tolerant and Reliable
Fault tolerance and reliability are paramount to most real-time
systems. Connexis has been designed with these requirements in
mind. The following is a list of the different Connexis features that
enhance the fault tolerance and reliability of Connexis:
The Locator Service can be run in simplex or duplex mode. A
binary elector is used to determine the health of the primary
locator.
Chapter 1 Rational Connexis Overview
10 User Guide - Rational Rose RealTime Connexis
Connexis has been designed with true non-blocking behavior. All
potentially blocking system calls are handled by a user-
configurable set of helper threads. Name resolving is an example of
an operation that makes use of helper threads.
A heart beat style audit is used over the UDP datagram based
connections to detect connection / process / processor failure.
This audit is tunable so that it can be used in a variety of
environments. The audit is highly efficient since it monitors user
messages to collect status information. This allows the explicit Are
you Alive messages to be suppressed. When explicit Are You
Alive messages are used, the number of such messages sent per
unit of time can be capped to ensure that audits do not overutilize
system resources. When a connection-oriented protocol (such as
TCP) is used, only a very basic, is the connection alive, protocol is
used.
Buffering policies can be configured between the UML
asynchronous messaging controller and the flow-controlled
transport message router. This ensures that your model never
hangs due to a slow or broken transport connection. When the
queue fills up, messages are properly deleted from the system.
It is easy to build a set of components that meet application
specific requirements for fault-tolerance and reliability. A pair of
generic signals, rtBound and rtUnbound, are supported for all
Rose RealTime and Connexis ports. Notification can be enabled on
a per-port basis and utilized by the application with minimal
additional complexity.
The underlying try-forever algorithm can be overridden by the
application simply by deregistering the unwired port when quality
of service parameters are not met.
Patterns for distribution can be implemented using Connexis as
the underlying distribution mechanism. For example, a single
publisher can actually hide multiple distributed connections to a
replicated service.
Resource limits can be placed on publishers of services to limit the
number of subscribers per publisher.
The allocation of unwired ports to capsules is under the control of
the designer and since the incarnation of capsules onto threads is
also under control of the application, the application can
dynamically control which resources are being used.
Connexis Terminology and Definitions
User Guide - Rational Rose RealTime Connexis 11
Services can be ranked according to the preferred order of use.
This ranking is done with full, dynamically updated knowledge of
the resource limits. If a given service is full, one of a lower rank will
be used if available.
Configurable system audits verify that the internal system
connection state matches across the entire system.
Connexis Terminology and Definitions
Table 1 lists and defines Connexis and UML terms and acronyms.
Table 1 Definitions
Term Definition
CDM Connexis Datagram Messaging. A thin layer on top of UDP
that provides additional support for connection auditing
and quality of service parameters.
CRM Connexis Reliable Messaging. A thin layer on top of TCP
that provides additional support for connection auditing
and quality of service parameters.
DCS Distributed Connection Service. This is the key
component used for connecting and managing the
different parties in a connection.
DNS Domain Name System (or Service), an Internet service
that translates domain names into IP addresses. Because
domain names are alphanumeric, they are easier to
remember; however, the Internet is really based on IP
addresses. Every time you use a domain name, a DNS
service must translate the name into the corresponding IP
address. For example, the domain name
www.example.com might translate to 198.105.232.4.
duplex locator
service
Refers to a configuration in which there are two locators.
In normal operation, one locator acts as the active locator
and the other acts as the standby locator. This
configuration is used to prevent a locator from being a
single point of failure.
endpoint An endpoint is an explicit network address used for
finding a peer object. It consists of a protocol followed by a
colon, followed by a protocol-address. For example:
cdm://ipaddress:port.
Chapter 1 Rational Connexis Overview
12 User Guide - Rational Rose RealTime Connexis
ILS Internal Layer Service. This is the connection service that
is built into Rose RealTime. It can only be used for
establishing intra-process connections.
IPC Inter-Process Communication. This is a broad term that
is being used to describe any mechanism that is used to
share information between processes. This could be
something as simple as shared memory or something as
sophisticated as CORBA.
Locator The Connexis Locator Service is a configurable service
that is used to look up the physical location of an object
given a service name for that object.
notification The term used to describe the process of sending a
message to a capsule to inform it when one of its ports
has been connected to, or disconnected from, its peer.
SAP Service Access Point. Term used to describe an unwired
port that is participating in a connection as the
subscriber. The SAP acronym appears in portions of the
Run-time Service Librarys API.
simplex locator
service
Refers to a configuration in which there is only one
locator. This configuration does not provide redundancy.
See also duplex locator service.
SPP Service Provisioning Point. Term used to describe an
unwired port that is participating in a connection as the
publisher. The SPP acronym appears in portions of the
Run-time Service Librarys API.
tagged-values Term used to represent the parameters that are being
passed to the Connection Service when registering an
unwired port.
Target RSL Target Run-time System Libraries. These are the libraries
that are compiled into a Rose RealTime model and that
implement the messaging, state walking, and timing
service (among other services) of a Rose RealTime model.
TCP/IP Transmission Control Protocol / Internet Protocol.
Connection-based transport protocol.
Transport The underlying protocol that is being used to pass data
between communicating objects.
Table 1 Definitions
Term Definition
Connexis Application Layers
User Guide - Rational Rose RealTime Connexis 13
Connexis Application Layers
Connexis allows multiple Rose RealTime-generated executables to be
connected in a robust and reliable manner. Executables are networked
by connecting unwired ports across processor boundaries.
The Connexis programming model provides significant value:
built for real-time - automatic mapping of UML communication
ports onto a high-performance software backplane
product-ready, but flexible - the software is ready to run as soon as
it has been installed but can be adapted to handle project-specific
requirements
Transport
Integration
Framework (TIF)
A framework that lets 3rd parties (including developers)
add additional transports for use in Connexis Messaging.
UDP User Datagram Protocol. Connectionless transport
protocol.
UML Unified Modeling Language. An industry-standard
modeling language used to model object-oriented software
systems. UML is used by Rose RealTime and Connexis to
model the software that is being built.
unwired port An unwired port is a UML object that can have
connections specified using registration names. These
names can be specified at either design time or run-time.
virtual circuit A virtual circuit is the term used to refer to a connection
that has been established between two endpoints. This
refers to a connection between a single subscriber and a
single publisher.
wired port A wired port is a UML object that can have an explicit
connection (to another wired port) specified at design
time. The connection will be established at system
initialization time or at run-time if the port is contained in
a capsule that is optional or plug-in.
Table 1 Definitions
Term Definition
Chapter 1 Rational Connexis Overview
14 User Guide - Rational Rose RealTime Connexis
simple-to-use programming model - supports client/server type
name binding and asynchronous messaging
support for fault tolerance - detects failures and provides a
framework for dealing with faults
A Rose RealTime application that is using Connexis to implement its
inter-process communication has the high-level architecture shown in
Figure 2. The control paths that are shown, indicate the components
that are involved in registering and deregistering endpoints in the UML
application. All data that is sent between endpoints in a Connexis-
enabled application goes through the Transport component.
Figure 2 High level view of a Connexis enabled application
UML Application
This section presents an overview of how Connexis is used from within
Rose RealTime. For more information on Rose RealTime refer to the
“Rational Rose RealTime Toolset Guide.
Ports in Rose RealTime
In Rose RealTime, ports are used to send messages between the
capsules in your model. Rose RealTime has several different kinds of
ports. The most common type of port is a wired port as shown in
Figure 3. Wired ports are visibly connected to other wired ports in Rose
RealTime models. Wired ports are represented graphically with two
connected squares in the oval part of the port icon.
Connexis Application Layers
User Guide - Rational Rose RealTime Connexis 15
Figure 3 Connecting wired ports
Another type of port that can be used in Rose RealTime is the unwired
port. Unwired ports are the primary method for establishing Connexis
connections. Once you have created an unwired port, you can specify
the connection service, protocol, and endpoint address that it will use
by registering the port with the Target RSL. This registration can either
be done automatically or through application code. The Connection
Service box in Figure 4 corresponds to the Distributed Connection
Service box in Figure 2. The DCS is one implementation of a
Connection Service.
Figure 4 Connecting unwired ports
A more detailed discussion on the registration process is provided in
Establishing Connections on page 107.
Chapter 1 Rational Connexis Overview
16 User Guide - Rational Rose RealTime Connexis
Distributed Connection Service
The Distributed Connection Service (DCS) is the connection service
that is provided with Connexis. It is responsible for maintaining
information about the unwired ports that have been registered with it
by a UML model. The DCS is the part of the system that is responsible
for establishing connections between unwired ports. It does this by
parsing the registration strings that are passed in when an unwired
port registers with the Target RSL.
Transport
The Transport is the component that is responsible for sending and
receiving data between processes. It manages any incoming or
outgoing data buffers and encodes and decodes data. A more detailed
break-down of the Transport component is shown in Figure 5.
Figure 5 Inside the Transport component
Connexis Application Layers
User Guide - Rational Rose RealTime Connexis 17
Locator Service
Another key component of a robust distributed system is a fault-
tolerant name service. A name service is used to find the actual
location of a server given a predetermined service name. A well-known
example of a name service is the Domain Naming Service (DNS) that is
widely used on the Internet. The principle function of a name service is
to look up a specific address when it is given a service name. This
isolates the calling application from changes in the physical addressing
of network components. In the Connexis product, the Locator Service
provides the name service functionality.
The Locator Service actually does a bit more than just operate as a
name server. The Locator can be configured to arbitrate between more
than one endpoint that provides the same service and it can also be set
up to run in duplex mode, which allows a backup Locator to
automatically take over when the primary fails.
Using the locator
An endpoint is defined to be the combination of a transport protocol
and the address of a specific port in a distributed application. For
example, cdm://address:port. If an explicit endpoint is provided, then
the client will try to connect to the server at the specified endpoint. If a
complete endpoint is not provided then the Locator is contacted. The
Locator returns an endpoint that is then used by Connexis to choose
the appropriate service provider or peer. The service name by which an
endpoint is referred, is specified as part of the registration of that
endpoint.
The Connexis Locator Service supports both a primary and a backup
locator. In this way, a distributed application can be made more robust
by ensuring that there is no single point of failure in the name server.
Chapter 1 Rational Connexis Overview
18 User Guide - Rational Rose RealTime Connexis
The HelloWorld Model
The HelloWorld model implements a simple distributed model using
Connexis. The model demonstrates the use of the Connexis Locator
Service and how it can be used to easily provide backup service in a
distributed environment.
The model contains two servers, a client, and the Connexis locator
service, each running independently. The servers speak different
languages (either English, or French). Initially, the client is bound to
the server that comes up first. Once bound, the client makes requests
to the server and the server sends back a greeting in the language it
speaks.
If the server to which the client is bound becomes unavailable, the
client is notified of the connection loss, and it rebinds to the backup
server, which starts responding to the client requests in the language
it speaks. For example, if the client is initially bound to the English
server, it will start receiving greetings in English. If you then terminate
the English server (for example, resetting through the RTS panel), the
connection will be lost momentarily, the client will be rebound to the
French server, and the client will start receiving the greetings in
French.
Note: The greetings are output to the DOS window (Windows) and the
RTS Output window (Solaris), which comes up when the client is started.
Running the HelloWorld Model
The model can be run on all supported host platforms. To run the
application, start up the matching (for example, VC++6.0) set of
locator, client, EnglishServer and FrenchServer component instances.
Keep the DOS (Windows) or RTS Output (Solaris) window for the
client in view. The other DOS or RTS Output windows can be
minimized to reduce screen clutter.
Run all the component instances from the corresponding RTS
panels.
The HelloWorld Model
User Guide - Rational Rose RealTime Connexis 19
If you run the EnglishServer first, you should see Hello World!!!
appear on the client DOS window repeatedly. At this point, you can
terminate the EnglishServer instance by means of the RTS panel.
The client will receive a connection loss, and will then switch over
to the FrenchServer as soon it is rebound via the locator service.
You should now start to see "Salut le monde!!!" displayed in the
client DOS window.
Additional HelloWorld Models
The following models are extensions of the HelloWorld model. They
provide examples of distributed load-sharing and fault-tolerant
patterns.
HelloWorldHotStandby
A client connects to two servers through a proxy actor, and continually
sends greeting requests. The proxy forwards the message to both
servers, and both of the servers respond back to the proxy, which in
turn relays the message from the active server to the client. If there is
no response from the active server within a specified time period, the
other server becomes active, and starts to handle all the client
requests.
HelloWorldLoadSharing
This model consists of two servers (an English and a French one) that
supply greeting messages for multiple clients. The clients connect to
the servers in a round-robin fashion. For example, if you had four
clients, the first and the third client would connect to one server and
the second and the fourth client would connect to the other server.
HelloWorldOverflowToBackupService
This model contains two servers (an English and a French one). One of
the servers is given a higher rank so that it acts as the primary server.
The clients connect to the primary server until the primary server has
reached its full capacity. Any subsequent clients will connect to the
backup server, which will handle their greeting requests for those
clients.
Chapter 1 Rational Connexis Overview
20 User Guide - Rational Rose RealTime Connexis
HelloWorldRedundantLocator
The model consists of one server, multiple clients, and a primary and
a backup locator. The clients connect to the server using the primary
locator. The server, in turn, provides greeting signals for the clients. If
the primary locator is shut down, all subsequent client-server
connections will be established using the backup locator.
Using Connexis
There are several steps that must be taken to add Connexis support to
a model. These are:
share the RTDInterface package
add Connexis component capsule roles to appropriate capsules in
the model
integrate transport protocols
configure components for your application
Note: The Connexis configuration dialogs on ports and capsules
allow the user to perform these steps as well.
In addition to these steps, there are also general design rules that must
be followed to ensure that the Connexis components have been
initialized properly before they are used.
Refer to Adding Connexis Support to Your Model on page 83 for more
information on Connexis-enabling your application.
User Guide - Rational Rose RealTime Connexis 21
Chapter 2
Using Connexis Model Examples
With Connexis, four model examples are included to accelerate your
learning and proficiency. The list of models are outlined below:
The BasicTest Model can be used to verify your environment.
The Quick start Model runs you through an introductory tutorial.
The HelloWorld Model presents a simple distributed model.
The Performance Model lets you evaluate the performance of
Connexis-enabled models in your environment.
By default, components in these model examples specify localhost
(127.0.0.1) as the host machine. If you want to run the model examples
remotely (that is, on a specific processor rather than the one you are
on), you must modify the model examples first.
The BasicTest Model
The BasicTest model implements a very simple client server distributed
system and is intended for use as a simple model to test proper
Connexis installation and operation on any of the Connexis-supported
platforms.
All hosts and target configurations supported with your Connexis
installation are provided.
To run the model on one of the supported configurations listed above,
see Verifying your installation using BasicTest, in the Release Notes
and Installation Guide for Rational Rose RealTime Professional.
Chapter 2 Using Connexis Model Examples
22 User Guide - Rational Rose RealTime Connexis
The Quick Start Model
The Rational Connexis User Guide provides a Quick start tutorial
(chapter 2) to allow you to quickly come up to speed on using Connexis.
The tutorial is composed of three iterations. Iteration 1 takes you
through building a simple ping pong model using Rose RealTime.
Iteration 2 takes you through the steps required to Connexis-enable
the ping pong model and make it distributed.
For your reference, complete, documented models for each iteration
are provided as part of the model examples provided with Connexis.
These examples can be run on all supported host platforms. For
detailed instructions on using the Quick Start model, see Quick Start
on page 31.
Quick Start Iteration 1 Model
The PingPong_Iteration1 model is the completed version of the model
developed in Connexis Quick start tutorial (Iteration 1). See Quick
Start on page 31 for details.
This model implements a simple ping pong application using Rose
RealTime. This model is used as a starting point for
PingPong_Iteration2 to show the simple steps required to quickly
Connexis-enable an application built using Rose RealTime.
To run the model, compile the PingPongApp component instance
corresponding to your host compiler, and choose run from the item
menu of the component instance under the PingPongProcessor.
Quick Start Iteration 2 Model
The PingPong_Iteration2 model is the completed version of the model
developed in Connexis Quick start tutorial (Iteration 2). See Quick
Start on page 31 for details.
This model implements a simple distributed ping pong application
using Rose RealTime and Connexis. It is a Connexis-enabled version of
the model developed in Iteration 1, and demonstrates the simplicity of
distribution using Connexis.
The HelloWorld Model
User Guide - Rational Rose RealTime Connexis 23
To run the model, please compile the Ping and Pong component
instances corresponding to your host compiler, and choose run from
the item menu of the component instances under the
PingPongProcessor.
The HelloWorld Model
The HelloWorld model implements a simple distributed model using
Connexis. The model demonstrates the use of the Connexis Locator
Service and how it can be used to easily provide backup service in a
distributed environment.
The model contains two servers, a client, and the Connexis locator
service, each running independently. The servers speak different
languages (either English, or French). Initially, the client is bound to
the server that comes up first. Once bound, the client makes requests
to the server and the server sends back a greeting in the language it
speaks.
If the server to which the client is bound becomes unavailable, the
client is notified of the connection loss, and it rebinds to the backup
server, which starts responding to the client requests in the language
it speaks. For example, if the client is initially bound to the English
server, it will start receiving greetings in English. If you then terminate
the English server (for example, resetting through the RTS panel), the
connection will be lost momentarily, the client will be rebound to the
French server, and the client will start receiving the greetings in
French.
Note: The greetings are output to the DOS window (Windows) and the
RTS Output window (Solaris), which comes up when the client is started.
Running the HelloWorld Model
The model can be run on all supported host platforms. To run the
application, start up the matching (for example, VC++6.0) set of
locator, client, EnglishServer and FrenchServer component instances.
Keep the DOS (Windows) or RTS Output (Solaris) window for the
client in view. The other DOS or RTS Output windows can be
minimized to reduce screen clutter.
Run all the component instances from the corresponding RTS
panels.
Chapter 2 Using Connexis Model Examples
24 User Guide - Rational Rose RealTime Connexis
If you run the EnglishServer first, you should see Hello World!!!
appear on the client DOS window repeatedly. At this point, you can
terminate the EnglishServer instance by means of the RTS panel.
The client will receive a connection loss, and will then switch over
to the FrenchServer as soon it is rebound via the locator service.
You should now start to see "Salut le monde!!!" displayed in the
client DOS window.
Additional HelloWorld Models
The following models are extensions of the HelloWorld model. They
provide examples of distributed load-sharing and fault-tolerant
patterns.
HelloWorldHotStandby
A client connects to two servers through a proxy actor, and continually
sends greeting requests. The proxy forwards the message to both
servers, and both of the servers respond back to the proxy, which in
turn relays the message from the active server to the client. If there is
no response from the active server within a specified time period, the
other server becomes active, and starts to handle all the client
requests.
HelloWorldLoadSharing
This model consists of two servers (an English and a French one) that
supply greeting messages for multiple clients. The clients connect to
the servers in a round-robin fashion. For example, if you had four
clients, the first and the third client would connect to one server and
the second and the fourth client would connect to the other server.
HelloWorldOverflowToBackupService
This model contains two servers (an English and a French one). One of
the servers is given a higher rank so that it acts as the primary server.
The clients connect to the primary server until the primary server has
reached its full capacity. Any subsequent clients will connect to the
backup server, which will handle their greeting requests for those
clients.
The DCS Performance Model
User Guide - Rational Rose RealTime Connexis 25
HelloWorldRedundantLocator
The model consists of one server, multiple clients, and a primary and
a backup locator. The clients connect to the server using the primary
locator. The server, in turn, provides greeting signals for the clients. If
the primary locator is shut down, all subsequent client-server
connections will be established using the backup locator.
The DCS Performance Model
With the DCS Performance Model, you collect performance data for
intra-thread, inter-tread, and inter-processor messaging throughput.
Using this data, you can evaluate message throughput and transport
latency within your environment.
The performance model contains a client capsule and a server capsule
that echo messages between each other. This lets you evaluate the
amount of time required to send messages between capsules.
The model measures performance between capsules in the following
scenarios:
Client and server on the same thread
Client and server on different threads
Client and server in different processes (using the DCS)
The model also provides data that can be used to measure the message
latency using raw socket-based inter-process communication (IPC).
Running the Performance Model
Before compiling the components for the performance model, you must
set the target configuration properties for the components. Once the
components are built, the run-time operations must be configured to
run either the CDM/UDP and CRM/TCP tests.
To run the performance model
1. Set the C++ Compilation Target Services Library properly for the
following components so that they can compile in your
environment:
ThroughputClient
ThroughputServer
Chapter 2 Using Connexis Model Examples
26 User Guide - Rational Rose RealTime Connexis
All intra-thread, inter-thread, and inter-process tests run within
the ThroughputClientInstance. The ThroughputServerInstance is
used for the IPC tests and the benchmark UDP/TCP tests.
2. Edit the properties of the inclusion paths to include the
TargetRTS target specific header files.
For example, if you are running on a VxWorks target, the following
inclusion path must be specified:
$RoseRT_Home/C++/TargetRTS/src/target/TORNADO1
Note: These directories are not normally included in user models.
They have been used in this model to facilitate portability to different
target environments.
3. Set the run-time options for the clients component instance
according to the following chart:
4. Set the run-time options for the servers component instance
according to the following chart:
Table 2 Run-time options for the client component
Option Description
-s<server address>:<port> specifies the endpoint of the server and is
used in the client's registration string. (ex.:
-s192.139.252.84:9900).
This parameter must correspond to the
server endpoint specified using -CNXep.
-n<num msgs> specifies the number of messages to be
echoed between the client and server for
each test.
-crm | -cdm specifies which transport is to be tested.
-l<local port> specifies the local port to be used for the
raw TCP/UDP benchmarks.
-r<remote port> specifies the remote port to be used for the
raw TCP/UDP benchmarks. The remote
address is obtained from the endpoint
parameter (-s).
The DCS Performance Model
User Guide - Rational Rose RealTime Connexis 27
5. Run CDM/UDP and CRM/TCP.
Performance model server output
Rational Rose RealTime C++ Target Run Time System
Release 6.30.B.01 (+c)
Copyright (c) 1993-2000 Rational Software
rosert: observability listening at tcp port 30503
*******************************************************************
* Please note: STDIN is turned off. *
* To use the command line, telnet to the above mentioned port. *
* The _output_ of any command will be displayed in _this_ window. *
*******************************************************************
Rational Software Corp. Connexis(tm) - Distributed Connection Service (dcs)
Release 6.30.B.154
Copyright (c) 1999-2000 Rational Software Corporation
dcs: CDM Transport : enabled
dcs: CDM listening at [cdm://192.139.252.171:9900]
dcs: locator service not available
dcs: metric service available
DCS Performance Test Begins
===========================
Client address for benchmark tests: 192.139.252.171
Benchmark tests listening at port: 9800
Benchmark tests connecting to remote port: 8800
Table 3
Option Description
-crm | -cdm specifies which transport is to be tested.
-l<local port> specifies the local port to be used for the
raw TCP/UDP benchmarks.
-CNXep = port
-CNXep = CRM:port
specifies the endpoint where the server is
listening.
-r<remote port> specifies the remote port to be used for the
raw UDP benchmarks.
-a<remote address> specifies the remote address to be used for
the raw UDP benchmarks.
Chapter 2 Using Connexis Model Examples
28 User Guide - Rational Rose RealTime Connexis
Performance model client output
Rational Rose RealTime C++ Target Run Time System
Release 6.30.B.01 (+c)
Copyright (c) 1993-2000 Rational Software
rosert: observability listening at tcp port 30346
*******************************************************************
* Please note: STDIN is turned off. *
* To use the command line, telnet to the above mentioned port. *
* The _output_ of any command will be displayed in _this_ window. *
*******************************************************************
DCS Performance Test Begins
===========================
Number of messages per iteration: 10000
Server address for IPC tests: 192.139.252.171:9900
Benchmark tests listening at port: 8800
Benchmark tests connecting to remote port: 9800
Transport protocol to be tested: cdm
Intra-thread Througput Test
---------------------------
Start time [s:ns]: 984682532:620000000
Finish time [s:ns]: 984682532:700000000
Message size: 16
Messages sent: 10000
Duration [in ms]: 80
Start time [s:ns]: 984682532:700000000
Finish time [s:ns]: 984682532:780000000
Message size: 64
Messages sent: 10000
Duration [in ms]: 80
Start time [s:ns]: 984682532:780000000
Finish time [s:ns]: 984682532:861000000
Message size: 256
Messages sent: 10000
Duration [in ms]: 81
Start time [s:ns]: 984682533:261000000
Finish time [s:ns]: 984682533:351000000
Message size: 1024
Messages sent: 10000
Duration [in ms]: 90
Start time [s:ns]: 984682533:351000000
Finish time [s:ns]: 984682533:501000000
Message size: 4096
Messages sent: 10000
Duration [in ms]: 150
Inter-thread Througput Test
---------------------------
The DCS Performance Model
User Guide - Rational Rose RealTime Connexis 29
Start time [s:ns]: 984682533:501000000
Finish time [s:ns]: 984682533:682000000
Message size: 16
Messages sent: 10000
Duration [in ms]: 181
Start time [s:ns]: 984682533:912000000
Finish time [s:ns]: 984682534:112000000
Message size: 64
Messages sent: 10000
Duration [in ms]: 200
Start time [s:ns]: 984682534:112000000
Finish time [s:ns]: 984682534:303000000
Message size: 256
Messages sent: 10000
Duration [in ms]: 191
Start time [s:ns]: 984682534:513000000
Finish time [s:ns]: 984682534:683000000
Message size: 1024
Messages sent: 10000
Duration [in ms]: 170
Start time [s:ns]: 984682534:693000000
Finish time [s:ns]: 984682534:914000000
Message size: 4096
Messages sent: 10000
Duration [in ms]: 221
Rational Software Corp. Connexis(tm) - Distributed Connection Service (dcs)
Release 6.30.B.154
Copyright (c) 1999-2000 Rational Software Corporation
dcs: CDM Transport : enabled
dcs: CDM listening at [cdm://192.139.252.171:2202]
dcs: locator service not available
dcs: metric service available
Inter-processor Througput Test
------------------------------
Start time [s:ns]: 984682535:134000000
Finish time [s:ns]: 984682536:95000000
Message size: 16
Messages sent: 10000
Duration [in ms]: 961
Start time [s:ns]: 984682536:105000000
Finish time [s:ns]: 984682537:47000000
Message size: 64
Messages sent: 10000
Duration [in ms]: 942
Chapter 2 Using Connexis Model Examples
30 User Guide - Rational Rose RealTime Connexis
Start time [s:ns]: 984682537:57000000
Finish time [s:ns]: 984682538:68000000
Message size: 256
Messages sent: 10000
Duration [in ms]: 1011
Start time [s:ns]: 984682538:78000000
Finish time [s:ns]: 984682539:290000000
Message size: 1024
Messages sent: 10000
Duration [in ms]: 1212
Start time [s:ns]: 984682539:290000000
Finish time [s:ns]: 984682541:152000000
Message size: 4096
Messages sent: 10000
Duration [in ms]: 1862
Inter-process Benchmark Test
----------------------------
Start time [s:ns]: 984682541:173000000
Finish time [s:ns]: 984682541:513000000
Message size: 16
Messages sent: 10000
Duration [in ms]: 340
Start time [s:ns]: 984682541:523000000
Finish time [s:ns]: 984682541:823000000
Message size: 64
Messages sent: 10000
Duration [in ms]: 300
Start time [s:ns]: 984682541:833000000
Finish time [s:ns]: 984682542:144000000
Message size: 256
Messages sent: 10000
Duration [in ms]: 311
Start time [s:ns]: 984682542:144000000
Finish time [s:ns]: 984682542:524000000
Message size: 1024
Messages sent: 10000
Duration [in ms]: 380
Start time [s:ns]: 984682542:534000000
Finish time [s:ns]: 984682543:406000000
Message size: 4096
Messages sent: 10000
Duration [in ms]: 872
TESTS COMPLETE!!!!
User Guide - Rational Rose RealTime Connexis 31
Chapter 3
Quick Start
Connexis is a connection tool that provides robust, transparent
communication between Rational Rose RealTime executable models.
Rational Connexis is integrated with Rational Rose RealTime, which is
a modeling tool that generates executables from UML models.
Connexis improves an applications time to market by eliminating the
need to design, develop, and test a custom Inter-Process
Communications (IPC) mechanism. The use of a production quality,
Commercial Off The Shelf (COTS) distribution component, such as
Connexis, simplifies and de-risks the design and deployment of
distributed systems.
The Connexis Quick start presented in this chapter takes you through
the general steps that are required to create and execute a Connexis-
enabled application. To follow the steps laid out in this chapter, you
should have:
Rational Rose RealTime installed on your workstation
Rational Connexis installed on your workstation
a general understanding of Rational Rose RealTime and UML
Quick Start Overview
The application to be created is a simple ping pong application. The
clients send a ping message to the server, and the server responds with
a pong message. Registration is accomplished using the Locator
Service. The necessary command line options for starting the
applications are also presented.
Chapter 3 Quick Start
32 User Guide - Rational Rose RealTime Connexis
This application is created in three iterations:
Iteration 1: Creating the Rose RealTime Model - creates the basic
architecture using wired ports to connect the Ping and Pong
capsules. This also involves a third capsule which acts as the
container for the Ping and Pong capsules.
Iteration 2: Connexis Enabling our Application- makes
modifications so that Ping and Pong communicate through
unwired ports that make use of Connexis connections.
Iteration 1 focuses on creating a simple Rose RealTime model;
therefore, readers who are familiar with Rose RealTime can start with
the solution for Iteration 1, which is found in the examples directory,
$ROSERT_HOME\CONNEXIS\C++\examples. Iteration 2 focuses on
Connexis-enabling the Rose RealTime model.
Note: The package organization of the example models differs slightly
from this tutorial because the examples support multiple platforms;
however, the model elements are the same.
Many of the steps that are presented in these iterations are examples
of good modeling practices. Explanations and the rationale behind
these good modeling practices are presented where appropriate and
are separated from the rest of the text by the heading Rationale for
....
Quick Start Overview
User Guide - Rational Rose RealTime Connexis 33
Figure 6 presents the final architecture of the model that is created in
Iteration 2.
Figure 6 Ping pong application architecture (at the end of Iteration 2)
Even though the ping pong application is very simple it is still
appropriate to present a sequence diagram that documents its
behavior. The sequence diagram, shown in Figure 7, describes the
messages that are sent between the Ping and Pong capsules. The
events illustrated in this sequence diagram are discussed throughout
the remainder of the Quick start.
Chapter 3 Quick Start
34 User Guide - Rational Rose RealTime Connexis
Figure 7 Ping Pong application sequence diagram
Iteration 1: Creating the Rose RealTime Model
User Guide - Rational Rose RealTime Connexis 35
Iteration 1: Creating the Rose RealTime Model
Iteration 1 focuses on creating the Rose RealTime model that is used
throughout the Quick start.
Step 1: Create a New Model
To create a new model in Rose RealTime:
1. Select File > New.
Step 2: Create Packages for the Model
To create the ping pong client package:
1. Open the pop-up menu on the Logical View package in your Rose
RealTime browser. Do this by right-clicking on the Logical View
package as shown in Figure 8.
Figure 8 Creating packages
2. Select New > Package from the pop-up menu.
Chapter 3 Quick Start
36 User Guide - Rational Rose RealTime Connexis
3. While the default package name is selected, type in
PingPongClient to set the name of the new package.
To create the ping pong server package:
Follow the same steps as those listed for To create the ping pong client
package: except name the new package PingPongServer.
To create the ping pong container package:
Follow the same steps as those listed for To create the ping pong client
package: except name the new package Container.
To create the ping pong utility package:
Follow the same steps as those listed for To create the ping pong client
package:- except name the new package Common.
You should now have all of the packages that are required, as shown
in Figure 9.
Iteration 1: Creating the Rose RealTime Model
User Guide - Rational Rose RealTime Connexis 37
Figure 9 Created packages
Rationale for creating packages
It is good practice (although not required) to organize all of your Rose
RealTime models into packages. You might think that it is overkill for
a model that is as trivial as this one, but it is good to get in the habit
of doing this, remember small models usually become big models
eventually and it is easier to start off with packages than it is to add
them later.
The main reasons for wanting to organize your models into packages
are:
ease of understanding and navigation - Packages give you an extra
level of abstraction above what is provided by the classes and
capsules in your model.
separation of concerns - It is a good way of dividing the work that is
to be done between teams or individuals on teams.
Chapter 3 Quick Start
38 User Guide - Rational Rose RealTime Connexis
configuration management - Packages are a possible unit of
version control.
access control - You can define the visibility of classes and
capsules within packages. This makes it possible to control the
access to design elements that are organized into packages.
There are many other reasons for wanting to organize your models into
packages. For more information on this topic, refer to the Rose
RealTime Users Guide.
Step 3: Create the Ping, Pong, and ContainerCapsules
In this application, the Ping capsule fulfills the role of a client. It is
referred to as the client because it only manages a single connection.
The server side of the application is responsible for managing multiple
connections (one for each client it is connected to). The Pong capsule
fulfills the role of the server in this application. The container capsule
contains both the Ping and Pong capsules in Iteration 1 of the
application.
Remember that the application is being built in two iterations; the first
uses wired ports and the second uses Connexis-enabled, non-wired
ports.
Iteration 1: Creating the Rose RealTime Model
User Guide - Rational Rose RealTime Connexis 39
To create the Ping capsule:
1. Select the PingPongClient package as shown in Figure 10.
Figure 10 Creating a new capsule
2. Open the pop-up menu and select New > Capsule.
3. While the default name of the new capsule is still highlighted, type
in Ping." This renames the new capsule.
To create the Pong capsule:
To create the Pong capsule, follow the same steps as those listed for To
create the Ping capsule: except create the Pong capsule in the
PingPongServer package.
To create the Container capsule:
To create the Container capsule, follow the same steps as those listed
for To create the Ping capsule: except create the Container capsule in
the Container package.
Chapter 3 Quick Start
40 User Guide - Rational Rose RealTime Connexis
The connection topology that is used in this application is an
oversimplification of a real-world distributed application. In real-world
distributed applications, objects would typically take on the role of
client in some communication scenarios and the role of server in
others. Common connection topologies for distributed applications are
discussed in Establishing Connections on page 107.
You should now have all of the capsules that are required as shown in
Figure 11.
Figure 11 Created capsules
Step 4: Create the PingPong Protocol Class
In Rose RealTime, capsules communicate with one another through
ports. Ports are defined by a protocol. A protocol is a definition of a set
of incoming signals, along with their associated data types, and a set
of outgoing signals, along with their associated data types.
To create a protocol class:
1. Open the pop-up menu on the Common package by right-clicking
on the Common Package as shown in Figure 12.
2. Select New > Protocol from the pop-up menu.
Iteration 1: Creating the Rose RealTime Model
User Guide - Rational Rose RealTime Connexis 41
3. While the default name of the new protocol is still highlighted, type
in PingPong." This renames the new protocol.
Figure 12 Creating protocol classes
The PingPong protocol consists of an In Signal called pong, and an Out
Signal called ping. Neither of these signals have data associated with
them.
To add the signals to the protocol class:
1. Open the pop-up menu on the PingPong protocol class.
2. Select Open Specification from the pop-up menu.
3. Select the Signals tab.
4. Open the pop-up menu on the In Signals panel (by right clicking on
the white space below In Signals as shown in Figure 13) and select
Insert. A new signal is added and its default name is highlighted.
Chapter 3 Quick Start
42 User Guide - Rational Rose RealTime Connexis
Figure 13 Protocol specification window
5. While the default name is highlighted, type in pong." This names
the In Signal pong.
6. Repeat steps 4 and 5 in the Out Signal panel. Name the Out Signal
ping."
7. Click the OK button.
Rationale for choice of conjugation and signal names
The In Signal is named pong because the protocol is defined from the
perspective of the client. Remember that the client side of the
application is implemented by the Ping capsule. The Ping capsule
sends ping signals and receives pong signals; therefore, the protocol
that is being used should have a pong In Signal and a ping Out Signal.
Iteration 1: Creating the Rose RealTime Model
User Guide - Rational Rose RealTime Connexis 43
The practice of conjugating the server side of a connection is not
required but it is a good way of keeping the naming of ports and
protocols consistent. Conjugating the server side of a connection has
the added benefit of reducing modeling efforts. Ports by default are not
conjugated and there are usually more client ports that server ports.
Step 5: Build the Structure of the Model
As was outlined in the introduction section of this chapter, the first
iteration uses wired ports to connect the Ping and Pong capsules. This
means that a capsule that acts as the container for the Ping and Pong
capsules must be created. This is the capsule that was called
Container.
To create Ping and Pong capsule roles in the Container capsule:
1. Create a new class diagram called Architecture." This is done by
right-clicking on the Logical View package and selecting New > Class
Diagram from the pop-up menu.
2. Double-click Architecture to open the class diagram.
3. Drag one of each of the Ping, Pong, and Container capsule, from
the browser onto the diagram.
4. Select the Unidirectional Aggregation tool .
5. Create an aggregation relationship between the Container capsule
and the Ping capsule. Do this by clicking and dragging from the
Container capsule to the Ping capsule as shown in Figure 14.
Chapter 3 Quick Start
44 User Guide - Rational Rose RealTime Connexis
Figure 14 Creating aggregations between capsules
6. Repeat step 5 to create an aggregation relationship between the
Container capsule and the Pong capsule.
7. Select the Container/Ping aggregation and open its specification.
Type in the name ping."
8. Assign a cardinality of 5 to the Container/Ping aggregation.
In a real application, the cardinality would be specified using a
constant as opposed to a literal. A literal was used in this example
only for brevity.
9. Click the OK button.
10. Select the Container/Pong aggregation and open its specification.
Type the name pong."
11. Click the OK button.
Iteration 1: Creating the Rose RealTime Model
User Guide - Rational Rose RealTime Connexis 45
If you now open the structure diagram of the Container capsule,
you should see a structure similar to what is shown in Figure 15.
Figure 15 Container capsule’s structure diagram
Note: This containment structure could have been created just as easily
from the structure editor of the Container capsule.
To create required ports on Ping and Pong capsules:
1. Drag the PingPong protocol class onto the Architecture class
diagram.
2. Create an aggregation association between the Ping capsule and
the PingPong protocol as shown in Figure 16. Name the association
pingPong.
Chapter 3 Quick Start
46 User Guide - Rational Rose RealTime Connexis
Figure 16 Creating ports from a class diagram
3. Create an aggregation association between the Pong capsule and
the PingPong protocol. Name the association pingPong."
4. Open the specification for the aggregation between the Pong
capsule and the PingPong protocol.
5. Specify a cardinality of 5 and click the Conjugated check box.
6. Click the OK button.
To create a log protocol:
1. Select the Ping capsule.
2. Open its structure diagram.
3. Drag a log protocol onto the structure diagram. Do this by selecting
the log protocol found in the RTClasses package in the Logical View
package.
4. Select the log icon and open its specification.
5. Type in the name log and ensure that Protected is enabled.
6. Click the OK button.
Iteration 1: Creating the Rose RealTime Model
User Guide - Rational Rose RealTime Connexis 47
Rationale for visibility of ports
The log protocol is used to access the logging service that is built into
the Rose RealTime libraries. The logging service is used primarily for
printing messages to standard error during the initial debugging of
models.
The PingPong port is shown in the class diagram because it is
architecturally significant. The log port is shown in the structure
diagram because it is an implementation detail; however, the log port
could have been added to the class diagram, if desired, and the
behavior would be exactly the same.
Repeat steps 1 to 6 for the Pong capsule.
To connect the Ping and Pong capsules:
1. Open the structure editor for the Container capsule by right-
clicking and choosing Open Structure Diagram.
2. Select the Connector tool .
3. Connect the pingPong port on the Ping capsule to the pingPong
port on the Pong capsule as shown in Figure 17.
Figure 17 Creating connectors between ports
The structure for Iteration 1 is now complete. Your class diagram
should look the same as the one shown in Figure 18.
Note: To show the port and log icons, select the capsule and choose
Options > Show Visibility.
Chapter 3 Quick Start
48 User Guide - Rational Rose RealTime Connexis
Figure 18 Completed structure for Iteration 1
Step 6: Implement the State Machines for Ping and Pong
To implement the state machines for the Ping and Pong capsules
perform the steps listed below.
To create Pings state machine:
1. Select the Ping capsule.
2. Open the state editor by right-clicking and choosing Open State
Diagram.
3. Select the state tool and drop a state on the diagram. Do this
by clicking the state tool and clicking anywhere on the diagram.
4. Name this state ready."
5. Select the transition tool and draw the initial transition from
the initial state to the ready state.
Iteration 1: Creating the Rose RealTime Model
User Guide - Rational Rose RealTime Connexis 49
6. Double-click the transition, and select the Actions tab in the
specification editor.
7. Type in the following code, and then click the OK button (see
Figure 19).
pingPong.ping().send();
Figure 19 Adding code to a transition
8. Select the self transition tool and draw a self transition on the
ready state, name this transition pong." Your diagram should look
similar to Figure 20.
Chapter 3 Quick Start
50 User Guide - Rational Rose RealTime Connexis
Figure 20 Creating states
9. Double-click on the pong transition and select the Actions tab.
10. Type in the following code:
log.log("received a pong");
pingPong.ping().send();
Note: In a real world application, you would not immediately send a
Ping request. You would most likely perform additional processing
where another event would trigger the sending of another Ping
request.
11. Click the Apply button.
12. Select the Triggers tab.
13. Right-click in the control area and select Insert from the pop-up
menu as shown in Figure 21.
Iteration 1: Creating the Rose RealTime Model
User Guide - Rational Rose RealTime Connexis 51
Figure 21 Adding triggers to a transition
14. Select the pingPong port and the pong signal from the resulting
Event Editor dialog as shown in Figure 22 and click the OK button.
Chapter 3 Quick Start
52 User Guide - Rational Rose RealTime Connexis
Figure 22 Selecting the port and signal
To create Pongs state machine:
1. Open the state editor for the Pong capsule.
2. Select the state tool and drop a state on the diagram.
3. Name this state ready."
4. Select the transition tool and draw the initial transition from the
initial state to the ready state.
5. Select the self transition tool and draw a self transition on the
ready state, name this transition ping."
6. Double-click on the ping transition, and select the Actions tab in the
specification editor.
7. Type in the following code:
log.log("received a ping");
rtport->pong().reply();
8. Click the Apply button.
9. Select the Triggers tab.
Iteration 1: Creating the Rose RealTime Model
User Guide - Rational Rose RealTime Connexis 53
10. Right-click in the control area and select Insert from the pop-up
menu.
11. Select the pingPong port and the ping signal from the resulting
Event Editor dialog and click the OK button.
Step 7: Build and Test the Model
To build and run a model from Rose RealTime, you must first create a
component. Components are used to model the physical elements that
may reside on a node, such as executables, libraries, source files, and
documents. In other words, the component represents the physical
packaging of the logical elements, such as classes and capsules. For
the purposes of this example, the components that are created are
going to represent executables.
Components have an associated top-level capsule. The top-level
capsule defines what parts of the model are contained in the
executable. In this case, the Container capsule should be made the
top-level capsule of the new component.
To create a component:
1. Choose Build > Component Wizard to run the Build Component Wizard.
2. Click Next.
3. Type PingPongApp in the component name field as shown in
Figure 23. Ensure that the package is Component View and click
Next.
Chapter 3 Quick Start
54 User Guide - Rational Rose RealTime Connexis
Figure 23 Setting the component identity - Iteration 1
4. Select C++ and click Next.
5. Click the OK button.
To customize the component:
1. Click Next.
2. Click Set the top-level capsule as shown in Figure 24.
Iteration 1: Creating the Rose RealTime Model
User Guide - Rational Rose RealTime Connexis 55
Figure 24 Setting the top-level capsule - Iteration 1
3. Select the package. In this case, select Container from the drop-
down list.
4. Select the capsule. In this case, select the Container capsule from
the drop-down list
5. Click Next.
6. Click Next.
7. Choose the target configuration as in Figure 25. If your
development configuration is Visual C++ 6.0 in Windows NT, select
NT40T.x86-VisualC++-6.0 and click Next. If your configuration is
different, select the appropriate target.
Chapter 3 Quick Start
56 User Guide - Rational Rose RealTime Connexis
Figure 25 Setting the target service library
8. Click Finish and click the OK button.
There are many options that are associated with components. For the
purposes of this example the default values are sufficient.
To create a processor:
To execute the model from within the toolset, you must assign the
component that was created in the last step to a processor. This tells
Rose RealTime to execute the component on a specific machine on your
network. There are many options that can be set for the processor and
for executing a component instance on the processor. The defaults are
sufficient in this case.
To create a processor:
1. Right-click on the Deployment View folder in the Rose RealTime
browser and select New > Processor from the pop-up menu.
2. Name this processor PingPongProcessor."
3. Drag and drop the PingPongApp component onto the
PingPongProcessor.
Iteration 1: Creating the Rose RealTime Model
User Guide - Rational Rose RealTime Connexis 57
You now should have a PingPongProcessor that contains a
PingPongApp component instance as shown in Figure 26.
Figure 26 Processor and component instance
To build the model:
1. Save the model as "Tutorial_Iteration1."
2. Select the PingPongApp component.
3. Open the pop-up menu and choose Build > Quick Build.
4. Click Add References and Continue.
5. Click the OK button.
Rationale for using Quick Build
In this rapid prototyping example, we allow the tool to inform us about
missing references and add them. In a large, managed application,
references should be carefully managed and added manually to the
component.
Run the PingPong component instance
To run the PingPong application:
1. Right-click on the PingPongAppInstance and select Run from the
pop-up menu. This creates the run-time environment within Rose
RealTime.
2. Select No to Build the component? since it is already built.
Chapter 3 Quick Start
58 User Guide - Rational Rose RealTime Connexis
The top left hand corner of the Rose RealTime application should
now look something like what is illustrated in Figure 27. A console
window also appears. This window is where the standard output
from the model is displayed. Keep this window visible so that you
can see the output that is being displayed.
Figure 27 Rose RealTime run-time environment
3. Press the Start button to execute the model.
While the PingPongApp is running, you should see messages being
printed to the console window. The Pong capsule receives ping signals
from the Ping capsule and prints received a ping each time it does.
Likewise, the Ping capsule receives pong messages from the Pong
capsule and prints received a pong each time it does.
Iteration 2: Connexis Enabling our Application
User Guide - Rational Rose RealTime Connexis 59
Because of the way that this model has been designed and the way the
Target RSL message queuing works, this model prints five received a
ping messages followed by five received a pong messages and
continues doing this until the model is stopped. All messages that are
sent to a capsule are queued in a priority queue. In this model, all five
of the ping messages are queued before a pong response is
generated. This causes the messages to be output as shown in the
console window.
4. Click the Shutdown button in the Runtime Viewer to stop the
process.
Iteration 2: Connexis Enabling our Application
Connexis manages connections that are established between unwired
ports. Unwired ports are ports whose connections are defined at run-
time. Unlike wired ports, unwired ports cannot have connectors
defined between themselves and other ports. The connections
established between unwired ports can also be removed and
reestablished at run-time.
Since unwired ports are used in Iteration 2, the first thing to do for
Iteration 2 is to remove the wired connections that were created in
Iteration 1 and make the wired pingPong ports unwired.
Step 1: Remove the Connector Between the pingPong Ports
To remove the connector between the pingPong ports:
1. Open the model Tutorial_Iteration1 that you created in
Iteration 1.
2. Save the model as Tutorial_Iteration2.
3. Open the Container capsules structure diagram as shown in
Figure 28.
4. Select the connector that is joining the pingPong ports on the Ping
and Pong capsules. Right-click and choose Remove/Exclude to delete
the connector.
Chapter 3 Quick Start
60 User Guide - Rational Rose RealTime Connexis
Figure 28 Removing the connector between ping and pong
Step 2: Make Changes to Pong’s pingPong Port
To make changes to Pongs pingPong port:
1. Open the Pong capsules structure diagram.
2. Select the pingPong port and open its specification.
3. Uncheck the Wired option as shown in Figure 29.
4. Check the Publish option.
This makes the port externally visible.
5. Since the port is being registered in transition code, the Application
radio button must also be checked.
Iteration 2: Connexis Enabling our Application
User Guide - Rational Rose RealTime Connexis 61
Figure 29 Changing port specifications for Pong
Step 3: Make Changes to Pings pingPong Port
To make changes to Pingt pingPong port:
1. Open the Ping capsules structure diagram.
2. Select the pingPong port and open its specification.
3. Uncheck the Wired option as shown in Figure 30.
4. Check the Notification check box.
5. Since the port is being registered in transition code, the Application
radio button must also be checked.
Chapter 3 Quick Start
62 User Guide - Rational Rose RealTime Connexis
Figure 30 Changing port specifications for Ping
The Notification box has been checked so the Ping capsule will be
notified when a connection has been established on the pingPong port.
The Notification box was not checked in the Pong capsule because it
doesnt really care when connections have been established to its port.
This is because the Pong capsule has published its interface and is just
waiting for others to connect to it. In a more realistic design, the Pong
capsule may be required to keep track of how many clients are
connected at any given time. This would make Pongs state machine
slightly more complicated.
In the Ping capsule, the notification event will be used. Pings state
machine must be changed so that it waits for an rtBound signal to be
received on the pingPong port before sending a Ping message.
Note: The Target RSL sends the rtBound signal as notification that a
connection was established.
Iteration 2: Connexis Enabling our Application
User Guide - Rational Rose RealTime Connexis 63
Step 4: Adding DCS Layer Notification to the Ping and Pong Capsules
To add DCS layer notigication to Ping and Pong capasules:
1. Open the Class Diagram called Architecture you created in the first
iteration.
2. Drag the RTDInitStatus protocol, located in the RTDInterface
package in the Logical View, onto the diagram.
3. Select the Unidirectional Aggregation tool.
4. Create an aggregation association between the Pong capsule and
the RTDInitStatus protocol. Name the association "dcsStatus."
5. Open the specification for the aggregation between the Pong
capsule and the RTDInitStatus protocol.
6. Specify that it is:
a. protected
b. an end port
c. not wired, and
d. notification enabled
7. Specify that the Registration will be handled automatically, and
specify a registration override of :RTDInitStatus.
8. Repeat steps 3 through 7 for the Ping capsule.
Before a model attempts to publish or subscribe to services through
Connexis, it should verify that the DCS layer is active and properly
initialized. If not, publication and subscription attempts will fail. The
Connexis capsule will publish the RTDInitStatus service through the
Internal Layer Service when it has completed its initialization. By
subscribing to the service and enabling notification, the model can wait
until it receives notification from Connexis before registering its SAPs
or SPPs.
Chapter 3 Quick Start
64 User Guide - Rational Rose RealTime Connexis
Figure 31 Port Specification for dcsStatus
Step 5: Modify Pings State Machine to Wait for Connexis
To modify Pings state machine to wait for Connexis:
1. Open the state diagram for Ping.
2. Add a new state to the diagram and call it waitingForDCS.
3. Delete the Initial transition to the ready state.
4. Add a new Initial transition to the waitingForDCS state.
5. Add a transition from the waitingForDCS state to the ready
state. Label this transition dcsReady.
6. Open the specification for the dcsReady transition and click the
tab.
7. Insert a trigger for the rtBound event on the dcsStatus port. We will
add the action code to subscribe to the service in a later step.
Iteration 2: Connexis Enabling our Application
User Guide - Rational Rose RealTime Connexis 65
Figure 32 Add a transition for dcsStatus
Step 6: Modify Pongs State Machine to Wait for Connexis
To modify Pongs state machine to wait for Connexis:
1. Open the state diagram for Pong.
2. Add a new state to the diagram and call it waitingForDCS.
3. Delete the Initial transition to the ready state.
4. Add a new Initial transition to the waitingForDCS state.
5. Add a transition from the waitingForDCS state to the ready
state. Label this transition dcsReady.
6. Open the specification for the dcsReady transition and click the
Triggers tab.
7. Insert a trigger for the rtBound event on the dcsStatus port. We will
add the action code to publish the service in a later step.
Chapter 3 Quick Start
66 User Guide - Rational Rose RealTime Connexis
Step 7: Modify Pings State Machine to Wait for Notify
To modify Pings state machine to wait for notify:
1. Open the state diagram for Ping.
2. Add a new state to the diagram and call it connected."
3. Add a transition between the ready state and the connected
state. Label this transition bound."
4. Open the specification for the bound transition and click on the
Triggers tab.
5. Insert a trigger for the rtBound event on the pingPong port.
Figure 33 Transition Specification for rtBound
6. Click on the Actions tab and add the following code in the code
editor:
pingPong.ping().send();
7. Move the pong transition from the ready state to the connected
state.
To do this, select the transition and drag both ends of the
transition over onto the Connected state one at a time. Your final
state diagram should be similar to the one shown in Figure 34.
Iteration 2: Connexis Enabling our Application
User Guide - Rational Rose RealTime Connexis 67
Figure 34 Pings state diagram
Step 8: Add Registration Code to the Ping and Pong Capsules
Connexis needs to know how to connect the unwired ports in your
model. A client can lookup a server in one of three places:
locally - connect only with current TargetRTS
explicit address - connect only to the TargetRTS at the specified
address
locator - connect using the Locator service
In addition to these options, there are also several parameters that can
be passed to Connexis when you register a port. These parameters are
discussed in detail in Establishing Connections on page 107.
In this example, the Ping and Pong capsules are going to register with
the Locator service.
The basic syntax for registering a port with the Locator service is:
// for the client side of the connection
registerSAP(“registrationString”);
and
//for the server side of the connection
registerSPP(“registrationString”);
Chapter 3 Quick Start
68 User Guide - Rational Rose RealTime Connexis
The registration string is different depending on which of the three
lookup types you are using (local, explicit address, locator). In this
example, the Locator service is being used, so the form of the
registration string is:
connection_service:/registration_name
The only connection service currently available is the Distributed
Connection Service (DCS) and Connexis Reliable Messaging (CRM).
This leaves us with the following syntax for registering the pingPong
port in the client:
registerSAP(“dcs:/pingpong”);
and the syntax for registering the pingPong port in the server as:
registerSPP(“dcs:/pingpong”);
In this example, the pingpong portion of the registration string could
have been any string.
This is the simplest case of registration using the Locator. There are
many parameters that can be supplied to the Locator as part of the
registration string for doing things like setting the transport protocol
that is being used. These parameters are discussed in Establishing
Connections on page 107.
To add registration code to the Ping capsule:
1. Open the state diagram for the Ping capsule.
2. Double-click on the dcsReady transition and select the Actions tab
in the resulting dialog.
3. Delete the existing text and enter the following code into the code
window:
if (!pingPong.registerSAP(dcs:/pingpong)) {
log.log(Ping registration failed);
}
4. Click the OK button.
To add registration code to the Pong capsule:
1. Open the state diagram for the Pong capsule.
2. Double-click on the dcsReady transition and select the Actions tab
in the resulting dialog.
Iteration 2: Connexis Enabling our Application
User Guide - Rational Rose RealTime Connexis 69
3. Enter the following code into the code window:
if (!pingPong.registerSPP(dcs:/pingpong)) {
log.log(Pong registration failed);
}
4. Click the OK button.
Now all of the model changes that are required have been completed.
The next step is to set up the Connexis environment and create two
new components. One of the components represents the Ping
application and the other the Pong application.
Step 9: Add the Connexis Configuration Capsules to Your Model
The Ping Pong Model requires the Ping and the Pong capsule to include
the DCS capsule roles. We will use the Connexis configuration
interface to add an RTDBase_Agent to Ping and an
RTDBase_Locator_Agent to Pong. (This configuration can also be done
manually).
Chapter 3 Quick Start
70 User Guide - Rational Rose RealTime Connexis
To configure the Ping Capsule:
1. Right-click the Ping capsule as in Figure 35.
Figure 35 Configuring the Ping Capsule
2. Select .
The Configure Connexis Dialog appears.
Iteration 2: Connexis Enabling our Application
User Guide - Rational Rose RealTime Connexis 71
Figure 36 Configure Connexis Capsule dialog
3. Select the following options:
a. Include DCS capsule role into this capsule
b. Target Agent (Viewer Debugging)
4. Click .
A dialog, suggesting that Connexis packages be shared into this
model, appears.
Figure 37 Sharing Connexis Packages request dialog
5. Click .
You can see that the DCS capsule role has been added by viewing
the Ping capsule structure (see Figure 38, Ping Capsule Structure).
Chapter 3 Quick Start
72 User Guide - Rational Rose RealTime Connexis
Figure 38 Ping Capsule Structure
To configure the Pong Capsule:
1. Right-click the Pong capsule.
2. Select .
Iteration 2: Connexis Enabling our Application
User Guide - Rational Rose RealTime Connexis 73
The Configure Connexis dialog appears.
Figure 39 Configure Connexis Capsule
3. Select the following options:
a. Include DCS Capsule Role into this capsule
b. Target Agent (Viewer Debugging)
c. Locator Functionality (Backup/Primary)
4. Click .
You can see that the DCS capsule role has been added by viewing the
Pong capsule structure. Since Pong also supports the locator, the class
of the DCS role is RTDBase_Locator_Agent instead of RTDBase_Agent.
Rationale for selecting RTD interfaces
In this configuration, only the Pong (server) capsule can be the locator.
We could use an RTD_Base_Locator_Agent reference in both Ping and
Pong, in which case either capsule could serve as the primary locator.
The locators location is determined by the parameters specified in
Step 13: Build and Execute the Models."
Chapter 3 Quick Start
74 User Guide - Rational Rose RealTime Connexis
For more information about the features provided by the different
RTDInterface capsules, refer to Adding Connexis Support to Your
Model on page 83.
Step 10: Create and Configure the Ping Component
Create a component for the Ping application.
To create the Ping component:
1. Select the Component View package.
2. Open the pop-up menu and select New > Package.
3. Name the package DistributedApp."
4. Choose Build > Component Wizard to run the Build Component Wizard.
5. Click Next.
6. Type Ping in the component name field as shown in Figure 40.
Ensure that the package is DistributedApp and click Next.
Figure 40 Setting the component identity - Iteration 2
7. Select C++ and click Next.
8. Click the OK button.
Iteration 2: Connexis Enabling our Application
User Guide - Rational Rose RealTime Connexis 75
To customize the component:
1. Click Next.
2. Click Set the top-level capsule as shown in Figure 41.
a. Select PingPongClient package from the drop-down list.
b. Select Ping as the capsule.
Figure 41 Setting the top-level capsule - Iteration 2
3. Click Next.
4. Click Next.
5. Choose the target configuration.
Use the same target configuration as in To customize the
component: on page 54, step 7.
Step 11: Create and Configure the Pong Component
Create a component for the Pong application.
To create the Pong component:
1. Choose Build > Component Wizard to run the Build Component Wizard.
2. Click Next.
3. Type Pong in the component name field. Ensure that the package
is DistributedApp and click Next.
Chapter 3 Quick Start
76 User Guide - Rational Rose RealTime Connexis
4. Select C++ and click Next.
5. Click the OK button.
To customize the component:
1. Click Next.
2. Set the top level capsule:
a. Select PingPongServer package from the drop-down list.
b. Select Pong as the capsule.
3. Click Next.
4. Click Next.
5. Choose the target configuration.
Use the same target configuration as in To customize the
component: on page 54, step 7.
Iteration 2: Connexis Enabling our Application
User Guide - Rational Rose RealTime Connexis 77
Step 12: Add Component Dependencies
You need to create dependencies between the Ping component and the
Connexis DCS library, and the Pong component and the DCS library.
To add component dependencies:
1. Right-click the Ping Component.
Figure 42 Configuring the Ping Component
2. Select > .
The Component Diagram Selection dialog appears.
Chapter 3 Quick Start
78 User Guide - Rational Rose RealTime Connexis
Figure 43 Component Diagram Selection dialog
3. Select .
4. Click .
You have created a dependency between the Ping component and
the DCS library.
5. Repeat steps one to four for the Pong component.
The Main diagram in Component View will appear as in Figure 44.
You should now have Ping and Pong components that are ready to be
compiled.
Iteration 2: Connexis Enabling our Application
User Guide - Rational Rose RealTime Connexis 79
Figure 44 Main component view diagram
Step 13: Build and Execute the Models
Now that the components have been created and configured, they must
be built. This is done by right-clicking on the component and selecting
Build from the pop-up menu.
To create a Ping processor and component instance:
1. Create a processor for the Ping component and name it
PingProcessor."
2. Drag the Ping component onto the PingProcessor to create a
component instance.
3. Select the PingInstance and open its specification.
4. Add the following code to the Parameters field in front of the code
-obslisten=30468:
-CNXep=cdm://localhost:7777 -CNXlpep=cdm://localhost:8888
Your final code should appear similar to the line below. Note that
the target observability port number, 30468, will vary from this
example.
-CNXep=cdm://localhost:7777 -CNXlpep=cdm://localhost:8888 -
obslisten=30468
Note: See page 253 for information on using localhost.
Chapter 3 Quick Start
80 User Guide - Rational Rose RealTime Connexis
5. Click the OK button.
To create a Pong processor and component instance:
1. Create a processor for the Pong component and name it
PongProcessor."
2. Drag the Pong component onto the PongProcessor to create a
component instance.
3. Select the PongInstance and open its specification.
4. Add the following code to the Parameters field in front of the code
-obslisten=30477:
-CNXep=cdm://localhost:8888 -CNXlp
Your final code should appear similar to the line below. Note that
the target observability port number, 30477, will vary from this
example.
-CNXep=cdm://localhost:8888 -CNXlp -obslisten=30477
5. Click the OK button.
Rationale for the Connexis parameters
The -CNXep= parameter identifies the cdm endpoint at which the
component instance listens. The -CNXlp parameter on the
PongInstance specifies that the PongInstance will act as the primary
locator. The -CNXlpep= parameter informs the PingInstance of the
location of the primary locator. Note that the -CNXep of the
PongInstance is the value of the -CNXlpep of the PingInstance. For
more information about Connexis parameters, refer to Establishing
Connections on page 107.
Run the Pong component instance
To run the Pong component instance:
1. Right-click on the PongInstance and select Run from the pop-up
menu.
2. Select No to Build the component? since it is already built.
A console window appears.
3. Press the Start button to execute the model.
Iteration 2: Connexis Enabling our Application
User Guide - Rational Rose RealTime Connexis 81
Run the Ping component instance
To run the Ping component instance:
1. Right-click on the PingInstance and select Run from the pop-up
menu.
2. Select No to Build the component? since it is already built.
A second console window appears for the Ping component instance.
3. Press the Start button to execute the model.
Note: The ping and pong reports appear in separate console windows.
The two processes are communicating through Connexis.
Optional: Distribute the model
When a model has been Connexis-enabled, it may be distributed by
simply changing the executable parameters.
The hostname "localhost" was used in previous component instance
specifications. Since this has a different meaning on each host, it must
be replaced with the actual hostname. For this example the machine
"angus" will be used for Ping and "bruce" for Pong.
1. Start Rose RealTime running on angus and bruce. Build the Ping
component on angus and the Pong component on bruce if you have
not already done so.
2. On angus, open the PingInstance specification and change the -
CNXep and -CNXlpep parameters to be:
-CNXep=cdm://angus:7777 -CNXlpep=cdm://bruce:8888
3. On bruce, open the PongInstance specification and change the -
CNXep parameter to be:
-CNXep=cdm://bruce:8888
4. Run the PingInstance on angus and the PongInstance on bruce.
Observe the same behavior that you saw in a single-processor
environment.
Note: To keep this exercise simple, Rose RealTime was run on each
of the target processors. In a normal development situation you will
run Rose RealTime on a single host from which all targets are
observed and controlled.
Chapter 3 Quick Start
82 User Guide - Rational Rose RealTime Connexis
Optional: Complete the HelloWorld Tutorial
Once you have completed the Quick Start, proceed to the HelloWorld
tutorial, provided in the Rose RealTime online help. It provides
information on using the Locator and shows you how to work with
rtbound and rtunbound notifications.
Basic Connexis Development Approach Summary
This section outlines the basic steps to follow to distribute your model
using Connexis.
1. Design your Rose RealTime application.
Although it is very easy to repartition your model and distribute it in a
different manner using Connexis, it is still a good idea to consider
distribution when you are doing your up-front designs. The reason for
this is performance. Many of the performance issues that you
encounter in a distributed application are a direct result of not
partitioning your model properly. Remember, intra-thread messages
are faster than inter-thread messages, which are faster than inter-
process messages, which are faster than inter-node messages.
2. Specify the registration strings and connection parameters on your
unwired ports.
If the nature of your application is such that you know the names of
the endpoints that you want to communicate with (either through the
use of an algorithmic mapping or by reading a configuration file), then
explicit endpoint names can be used in the registration strings of the
unwired ports in the model. For more information refer to External
explicit examples on page 124.
If this is not the case, you may want to make use of the Locator Service.
In either case, each of the unwired ports in your model must be
registered with an appropriate registration string. Once this has been
completed and the connections are being initialized properly, you can
send and receive messages through Connexis-enabled unwired ports
in the same way as with normal Rose RealTime ports.
User Guide - Rational Rose RealTime Connexis 83
Chapter 4
Adding Connexis Support to Your Model
To add Connexis support to a Rose RealTime model complete the
following sections:
Sharing DCS Interfaces into your Model
Configuring Connexis Capsules
Manually Integrating Transports Into a Model
In addition to these steps, there are also general design rules that must
be followed to ensure that the Connexis component in an application
is initialized properly before it is used (see Initializing Your Connexis
Capsule on page 92).
From the perspective of a Rose RealTime model, Connexis is
distributed as a set of Rose RealTime capsules and components. To
make use of Connexis in your Rose RealTime model, you need to share
the appropriate Connexis packages, containing the Connexis capsules
and components.
From a build perspective, Rational Connexis is shipped as an external
library, libDCS. The libDCS library provides support for the CDM and
CRM transports.
Chapter 4 Adding Connexis Support to Your Model
84 User Guide - Rational Rose RealTime Connexis
Sharing DCS Interfaces
Connexis functionality is defined in a set of packages that must be
shared into your model. There are logical packages containing the
capsules that provide Connexis functionality for your application.
There are also component packages representing the external
Connexis libraries needed to build your application.
Hint: If you want to use the CDM or CRM transport, you only need to
add the Distributed Connection Service (DCS).
Note: You must be able to modify your model, specifically the Logical
View and Component View packages. If your model is under source
control, you need to check out these packages first.
Sharing DCS Interfaces into your Model
In order for your application to make use of the Distributed
Communication Services (DCS), you must share the DCS model
interfaces packages into your model.
To share the Connexis packages:
1. From the Tool s menu, select Connexis > Share Connexis Packages.
The Share Connexis Packages dialog appears.
Figure 45 Share Connexis Packages dialog
2. Select DCS (Distributed Connection Service) model interfaces.
Note: Do not select TIF (Transport Integration Framework) model
interfaces unless you are developing a transport integration (see
Using the Transport Integration Framework on page 299).
a. DCS (Distributed Connection Service) model interfaces
Configuring Connexis Capsules
User Guide - Rational Rose RealTime Connexis 85
The DCS model interfaces selection shares the capsules and
components needed to make use of DCS. The RTDInterface
logical package and the RTDComponents component package
are shared into your model.
b. TIF (Transport Integration Framework) model interfaces
Models that make use of DCS do not share this package into the
model. This package is only shared into a model in which a
transport integration is being developed (see Using the
Transport Integration Framework on page 299).
3. Click .
Removing Shared Packages
Rose RealTime lets you remove Connexis packages from your model.
To remove Connexis packages:
1. From the menu select Connexis > .
Connexis packages are removed from your model.
Configuring Connexis Capsules
Once the Connexis packages are shared, you must add a capsule role
for one of the Connexis capsules in the RTDInterface package to one
capsule for each component that will use Connexis. It is suggested that
you add one of these capsules as a fixed capsule role in the top-level
capsule in each component. If the capsule or its containing package is
in source control, check the capsule out of source control before
applying the settings.
To add a capsule role in your model:
1. Right-click a capsule in your model or right-click the structure
diagram of a capsule.
2. Select .
The Configure Connexis Capsule dialog appears, containing the
current Connexis settings of the selected capsule, including the
type of Connexis capsule role added to the capsule.
Chapter 4 Adding Connexis Support to Your Model
86 User Guide - Rational Rose RealTime Connexis
Figure 46 Configure Connexis Capsule dialog
3. Check the include DCS Capsule Role into this capsule check box
if you want to include the DCS Capsule Role into the selected
capsule. If you do not, proceed to instruction five.
Configuring Connexis Capsules
User Guide - Rational Rose RealTime Connexis 87
4. If you checked the include the DCS Capsule Role into this
capsule check box, set the Configuration and Transports options
to your requirements:
5. Select the options that you want to make available to your model.
a. DCS Initialization and Control Port (see Using the
RTDInitStatus Protocol on page 93)
b. DCS Metrics Port (see Using the Connexis Metrics Service on
page 237)
Once you configure the capsule, the Connexis Component
Configuration tool prompts you to configure the capsules that
reference the Connexis-enabled capsule that you configured.
Depending on the options that you selected in the Configure Connexis
Capsule dialog, one of the following capsule roles are included in your
capsule:
Table 4 Configure Connexis Capsule dialog description
Configuration and
Transports Settings
Description
Transport Agent
(Viewer Debugging)
Selecting this option lets you use the Connexis
Viewer to provide debugging support (seeUsing
the Connexis Viewer on page 151). Once you
select this option the CDM transport is enabled. The
Connexis Viewer uses the CDM transport.
Locator Functionality
(Backup Primary)
Selecting this option lets you use the Connexis
Locator that maps endpoint service names to
physical endpoints (see Locator Connections
on page 125 and Using the Connexis Locator
Service on page 135).
CDM (Connexis
Datagram Messaging)
Selecting this transport lets your component use
the CDM transport.
CRM (Connexis
Reliable Messaging)
Selecting this transport lets your component use
the CRM transport.
Chapter 4 Adding Connexis Support to Your Model
88 User Guide - Rational Rose RealTime Connexis
Manually Integrating Transports Into a Model
This section explains how to integrate transports into your model
without using the Configure Connexis Capsules tool.
For a transport to be available for use in a DCS enabled model, the
transport must first register with DCS, prior to the initialization of
DCS. This constraint also applies to the CDM or CRM transports. The
RTDCdm and RTDCrm classes in the RTDInterface logical package
represent the CDM and CRM transports respectively. The constructors
of each of these classes register their respective transport with DCS. As
Table 5 Configuration Descriptions
Configuration Capsule Description
DCS RTDBase This configuration contains the core
Connexis interfaces. With this
component the Connexis Locator is not
linked in with the executable and the
Connexis Viewer is not used with the
model.
DCS with
Target Agent
RTDBase_Agent This configuration contains the Target
Agent which is the interface between
the executable and the Connexis
Viewer. With this component the Viewer
is used with the model but the Locator
is not linked in with the executable.
DCS with
Locator
RTDBase_Locator This configuration contains the
Connexis Locator. With this
component, the Locator is linked in
with the executable but the Viewer is
not used with the model.
DCS with
Target Agent
and Locator
RTDBase_Locator_
Agent
This configuration contains both the
Locator and the Target Agent. With this
component, the Locator is linked into
the executable and the Connexis
Viewer can be used with the model.
Configuring Connexis Capsules
User Guide - Rational Rose RealTime Connexis 89
a result, an instance of the class must be created prior to the
initialization of the DCS. The easiest way to ensure this is to create an
association (composite aggregation) between the capsule containing
the DCS capsule and the classes that represent the transports to be
integrated.
To register the CDM transport for use in the model, create an
association (composite aggregation) of type RTDCdm on the capsule
containing the RTDBase or RTDBase_Locator capsule. The
RTDBase_Agent and RTDBase_Agent_Locator capsules automatically
register the CDM transport, since the viewer uses the CDM transport.
The constructor for RTDCdm accepts an argument of type bool
indicating whether the CDM transport should listen on the
transporter's thread for incoming messages ("true") or on a separate
thread ("false"). Listening for messages on the transporter's thread can
provide better performance. Only one transport can listen on the
transporter's thread for messages. If the argument supplied to the
constructor is "true" and another transport has already registered with
DCS to listen on the transporter's thread, CDM will listen on a separate
thread.
To register the CRM transport for use in the model, create an
association (or attribute + dependency) of type RTDCrm on the capsule
containing the RTDBase, RTDBase_Locator, RTDBase_Agent and
RTDBase_Agent_Locator capsule. The constructor for RTDCrm
accepts a bool indicating whether the CRM transport should listen on
the transporter's thread for incoming messages ("true") or on a
separate thread ("false"). Listening for messages on the transporter's
thread can provide better performance. Only one transport can listen
on the transporter's thread for messages. If the argument supplied to
the constructor is "true" and another transport has already registered
with DCS to listen on the transporter's thread, the CRM will listen on
a separate thread.
If your model is using additional transports that have been integrated
into DCS, they must also be registered with DCS prior to the
initialization of DCS. The designers that developed the transport
integration will be able to provide information on how to register the
transport.
Chapter 4 Adding Connexis Support to Your Model
90 User Guide - Rational Rose RealTime Connexis
Configuring a Component for Connexis
When you configure a component for Connexis, you create a
component dependency to a DCS library. If a DCS dependency already
exists in the selected component, the Configuration tool notifies you of
the existing dependency.
To configure a Component for Connexis:
1. Right-click a component.
2. Select >
The Component Diagram Selection dialog appears.
Note: A DCS capsule role must be in one of the capsules referenced
by the component before you configure the component (see
Configuring Connexis Capsules on page 85).
3. Select how you want the changes to be displayed.
Verifying Connexis Enabled Components
User Guide - Rational Rose RealTime Connexis 91
The dialog lists the display options available for the selected
component.
Note: A component may also be configured from the menu on its view in
a component diagram.
Verifying Connexis Enabled Components
Once you have shared Connexis components in your model, you can
verify the model path and incompatibilities of each component in your
model.
Table 6 Component Diagram Selection options
Options Description
<<none>> creates a component dependency to the DCS
library, without a diagram displaying the changes.
<<new diagram>> creates a new diagram showing the component
dependency to the DCS library.
Existing component
diagram
shows the component dependency to the DCS
library from an existing diagram.
Chapter 4 Adding Connexis Support to Your Model
92 User Guide - Rational Rose RealTime Connexis
To verify a component:
1. Right-click a component.
Note: You can select several components at a time by pressing the
key.
2. Select >
The Component Verification Results dialog appears.
Figure 47 Component Verification Results
3. Select a component from the Components area.
The Model Path information and Incompatibilities information
are displayed.
Initializing Your Connexis Capsule
The Connexis capsule that you are using in your application must be
initialized before any ports can be registered with it.
There are two approaches that can be used to make sure that the
Connexis component is initialized before it is used in the application:
Use the RTDInitStatus protocol. This is the recommended
approach and will work in all configurations.
Initializing Your Connexis Capsule
User Guide - Rational Rose RealTime Connexis 93
Use fixed initialization order. This approach will work in the most
basic configuration, which is when the Connexis component is
fixed and on the main application thread. This approach will not
work when the Connexis component is created on a different
thread.
Using the RTDInitStatus Protocol
The recommended approach for ensuring the Connexis component is
initialized before use is to subscribe to the RTDInitStatus publisher on
the Connexis component and query DCS as to its status. If the
Connexis component is initialized on a thread other than the main
thread, this approach is required because there is no other way to
ensure the Connexis component is initialized before use.
All of the Connexis components publish a port called RTDInitStatus.
This port realizes the RTDInitStatus protocol. When the component is
fully initialized, it sends an rtBound event on this port. When rtBound
is received the DCS initialization was successful.
All of the capsules that are planning to register ports with the Connexis
component must create a subscriber port that realizes the
RTDInitStatus protocol. This port must be registered as RTDInitStatus
and notification must be turned on. Once the Connexis component has
been initialized, it will send an rtBound event on the RTDInitStatus
port.
The code used to register the subscriber port (if application registration
is used) is as shown below:
rTDInitStatus.registerSAP(:RTDInitStatus);
If automatic registration is used, the port must be protected and the
registration override string must be defined as:
:RTDInitStatus
For an example of using the RTDInitStatus protocol, refer to the
HelloWorld model in the examples directory
($ROSERT_HOME/CONNEXIS)/C++/examples.
The RTDInitStatus protocol also defines an interface that provides the
following:
access to the status of the Target Agent and Locator if present
query which port the CDM is listening on
Chapter 4 Adding Connexis Support to Your Model
94 User Guide - Rational Rose RealTime Connexis
access to the DCS Transport thread, and its Virtual Circuit limit
ability to set the primary and backup locator endpoints
dynamically at run-time
This interface is asynchronous, and is defined in more detail in Table
7 and Table 8. Table 7 summarizes the output signals that can be sent
by the application. Table 8 summarizes the input signals that can be
received by the application.
Table 7 RTDInitStatus Out Signals
Out Signal Description
rtdAgentActive Request for Target Agent activation status.
rtdBackup
Endpoint
Used to set the endpoint of the backup locator. The data
is the endpoint string, in the same format as the CNXlbep
command line argument.
e.g., cdm://localhost:4000, or
tcp://192.139.251.2:5000, etc.
rtdCDMport Request for the value of the CDM port assigned.
rtdDCSrunning No longer supported.
rtdLocator
Available
Request for Locator availability status. If the Locator has
been loaded into the system and properly configured it
will be flagged as available.
rtdPrimary
Endpoint
Used to set the endpoint of the primary locator. The data
is the endpoint string, in the same format as the CNXlpep
command line argument.
e.g., cdm://localhost:4000, or
tcp://192.139.251.2:5000, etc.
rtdTransport
Controller
Request for the Transport handle. This handle is required
for high-performance DCS applications that will be
collocated on the same thread as the Transport.
rtdVClimit Request for internal limit on the number of Virtual
Circuits (VCs). This limit is defined by the version of the
library.
Initializing Your Connexis Capsule
User Guide - Rational Rose RealTime Connexis 95
Table 8 RTDInitStatus In Signals
In Signal Description
rtdAgentActiveReply No longer supported.
rtdBackupEndpoint
Reply
Reply to rtdBackupEndpoint containing the status
of setting the backup locator endpoint, returned as
an int.
int result = *rtdata;
The result is one of the following:
0 - success
1 - failed because this process is the backup locator
2 - failed due to an invalid endpoint string
rtdCDMportReply Reply to rtdCDMport containing the CDM port
assigned, returned as an int. The CDM port is
derived either from the value for CNXep, or from a
free port number.
int cdm_port = *rtdata;
A non-zero value indicates a software failure.
rtdDCSrunningReply Reply to rtdDCSRunning containing the status of
DCS, returned as an int.
int dcs_status = *rtdata;
A non-zero value indicates that DCS is running.
Chapter 4 Adding Connexis Support to Your Model
96 User Guide - Rational Rose RealTime Connexis
rtdLocatorAvailable
Reply
Reply to rtdLocatorAvailable containing availability
status, returned as an int.
int locator_available = *rtdata;
A zero value implies that the locator is NOT properly
configured and the registration of global names will
fail:
port-name.registerSAP("dcs:/service-name") //
will fail
port-name.registerSPP("dcs:/service-name") //
will pass since SPPs can also be connected to locally
and explicitly.
A non-zero value indicates that the Locator is
properly configured though a connection may not
exist at this time to a remote Locator. Registration
of global names will pass.
Possible return values:
1 == Primary Locator running locally (this process),
Backup Locator not configured
2 == Primary Locator running locally (this process),
Backup Locator is remote (CNXlbep)
3 == Backup Locator running locally (this process),
Primary Locator is remote (CNXlpep)
4 == Primary Locator is remote (CNXlpep), Backup
locator not configured
5 == Primary Locator is remote (CNXlpep), Backup
locator is remote (CNXlbep)
Table 8 RTDInitStatus In Signals
In Signal Description
Initializing Your Connexis Capsule
User Guide - Rational Rose RealTime Connexis 97
rtdPrimaryEndpoint
Reply
Reply to rtdPrimaryEndpoint containing the status
of setting the primary locator endpoint, returned as
an int.
int result = *rtdata;
The result is one of the following:
0 - success
1 - failed because this process is the primary locator
2 - failed due to an invalid endpoint string
rtdTransportController
Reply
Reply to rtdTransportController containing the
Transport handle, returned as a (RTController *).
This handle is needed to initialize capsules on the
dcs: Transport thread.
RTController * t_thread = (RTController *)*rtdata;
A null pointer is returned if DCS is not running.
rtdVClimitReply Reply to rtdVClimit containing the VC (virtual
circuit) limit, returned as an int.
int vc_limit = *rtdata;
Table 8 RTDInitStatus In Signals
In Signal Description
Chapter 4 Adding Connexis Support to Your Model
98 User Guide - Rational Rose RealTime Connexis
Using Fixed Initialization Order
If the Connexis components capsule role is fixed and is created on the
main application thread, you can ensure that it is initialized before it
is used by other capsules by placing it in the applications top capsule
and putting the Connexis components capsule role at the top of the
initialization order for that capsule.
Note: If the Connexis components capsule role is created on a thread
other than the main thread or is optional and on the main thread, this
approach is not guaranteed to work.
To ensure that the Connexis components capsule role is initialized
before any capsule roles that register with Connexis:
1. Make the Connexis components capsule role fixed and place it in
the top-level capsule of the application.
2. Open the Capsule Specification dialog for the top-level capsule.
3. Select the Capsule Roles tab.
4. Move the Connexis components capsule role so that it is in the list
before any capsule roles that register with Connexis. You can do
this by dragging and dropping the appropriate capsule role to the
top of the list of capsule roles. The resulting dialog is shown in
Figure 48.
Note: If you sort the list of capsule roles by clicking on one of the
column headings, you will not be able to determine the initialization
order until you close and reopen the specification dialog.
Converting Connexis Version 2000.02.10 Models to Connexis 2001A.04.00 Models
User Guide - Rational Rose RealTime Connexis 99
Figure 48 Capsule Role tab of top-level capsule
Converting Connexis Version 2000.02.10 Models to Connexis
2001A.04.00 Models
If you are using the previous version of Connexis (version 2000.02.10),
the Connexis Model Conversion Tool searches your model, identifying
any incompatibilities, and provides a detailed description, explaining
the changes. Table 9, Model Conversion for Connexis 2000.02.10 to
Connexis 2001A.04.00, explains the changes that are made to your
model during the conversion process.
Chapter 4 Adding Connexis Support to Your Model
100 User Guide - Rational Rose RealTime Connexis
Table 9 Model Conversion for Connexis 2000.02.10 to Connexis
2001A.04.00
Condition Change
RTDXBase,
RTDXBase_Agent,
RTDXBase_Locator,
RTDXBase_Agent_Locator
fixed capsule roles are in
the model
Replaces the capsule roles with the
corresponding RTDBase configuration.
Integrates the CDM transport with the capsules
containing the new RTDBase or
RTDBase_Locator capsule roles.
Integrates the CRM transport into the
containing capsule.
RTDBase,
RTDBase_Locator fixed
capsule roles are in the
model but do not have the
CDM transport as an
attribute.
Integrates the CDM transport using a
composite aggregation relationship into the
capsules containing RTDBase or
RTDBase_Locator capsule roles.
RTDXBase optional
capsule role is in the model
Converts to the RTDBase and integrates the
CRM and CDM transports.
RTDXBase_Agent optional
capsule role is in the model
Converts to RTDBase_Agent and integrates the
CRM transport.
RTDXBase_Locator
optional capsule role is in
the model
Converts to RTDBase_Locator and integrates
the CDM and CRM transports
RTDXBase_Locator_Agent
optional capsule role is in
the model
Converts to RTDBase_Locator_Agent and
integrates the CRM transport.
RTDBase or
RTDBase_Locator optional
capsule role is in the model
Users are notified that the CDM transport is
integrated.
RTDBase_Agent or
RTDBase_Locator_Agent
optional capsule role is in
the model
Searches the model identifying any of the
components that reference a dependency. If a
dependency exists, the CRM transport is
integrated.
Converting Connexis Version 2000.02.10 Models to Connexis 2001A.04.00 Models
User Guide - Rational Rose RealTime Connexis 101
To convert your model:
1. Open a model that uses the previous version of Connexis (version
2000.02.10).
2. Select > > .
The Convert Model dialog appears.
Figure 49 Convert Model dialog
3. View more information about incompatible capsules and
components by selecting the capsule or the component from the
dialog and clicking .
A component depends on a
XDCS library component
Changes the component dependency to use the
DCS library component.
The TargetConfiguration
property of a component
references a -CNX-M or a -
CNX- target configuration
Removes the -CNX- or -CNX-M from the
TargetConfiguration name.
Table 9 Model Conversion for Connexis 2000.02.10 to Connexis
2001A.04.00
Condition Change
Chapter 4 Adding Connexis Support to Your Model
102 User Guide - Rational Rose RealTime Connexis
The Element Information dialog appears.
Figure 50 Element Information dialog
The Element Information dialog provides the following
information:
4. Click once you have read the information, and repeat step three
for additional capsules and components that appear in the
Convert Model dialog.
5. Click from the Convert Model dialog.
Table 10 Element Information dialog chart
Information Heading Description
Model Path Shows the path of the selected capsule or
component.
Description of
Incompatibility
Explains the reason for the incompatibility
between version 2000.02.10 and 2001A.04.00.
Suggested Course of Action Explains how the Conversion tool will make the
capsule or component compatible with
Connexis version 2001A.04.00.
Converting Connexis Version 2000.02.10 Models to Connexis 2001A.04.00 Models
User Guide - Rational Rose RealTime Connexis 103
The Conversion Tool converts the incompatible capsules and
components in your model. As the conversion takes place, the
Conversion Tool may prompt you to confirm some conversion
changes.
Note: Only run the Conversion Tool once. If you run the tool a second
time, the information displayed in the Convert Model dialog may not
be accurate.
Verifying Component Compatibility with Connexis Version 2001A.04.00.
The Component Verification Tool verifies that a component is
compatible with Rational Connexis version 2001A.04.00.
To verify that a component is compatible with version 2001A.04.00:
1. Right-click a component.
2. Select > .
The Component Verification Results dialog appears.
Figure 51 Component Verification dialog
3. Select the component from the Components area.
The model path and the incompatibilities for the selected
component appear.
Chapter 4 Adding Connexis Support to Your Model
104 User Guide - Rational Rose RealTime Connexis
4. Open the component from the browser and fix the
incompatibilities.
Note: You do not have to close the Component Verification Results
dialog while fixing the incompatibilities.
5. Click .
RTDErrorType Error Reporting
Connexis reports error types that are defined in the enumerated
RTDErrorType class. To access these errors, define an input signal
named rtdError with data type RTDErrorType, in the protocol class of
the port to be registered with DCS. If any of the following errors occur,
the port receives an rtdError message with the error type as data (see
Table 11).
Table 11 RTDErrorType Error Reporting
Output Description
rtdDCSUninitialized = 1 Registration failed because DCS
was not initialized.
rtdZeroReplication = 2 Registration failed because the
replication factor of the port is
zero.
rtdInvalidSyntax = 3 Registration failed because the
registration string was of invalid
syntax.
rtdInvalidTransport = 4 Registration failed because the
specified transport is not
supported by this component.
rtdCircuitUnavailable = 5 Registration failed because no
virtual circuit is currently
available for the remote binding.
rtdLocatorUnavailable = 6 Global registration failed
because no locator is available.
Converting Connexis Version 2000.02.10 Models to Connexis 2001A.04.00 Models
User Guide - Rational Rose RealTime Connexis 105
Note: The last two errors can occur after a successful registration and
bind. For that reason they are sent at Background priority. All other
errors are sent at General priority.
rtdConnectTimeout = 7 Explicit registration failed
because a connection could not
be established with the remote
endpoint.
rtdEndpointUnavailable = 8 A connection cannot be made at
present with the remote
endpoint because it is currently
unavailable.
rtdEndpointInaccessible = 9 A connection can never be made
with the remote endpoint.
Table 11 RTDErrorType Error Reporting
Output Description
User Guide - Rational Rose RealTime Connexis 107
Chapter 5
Establishing Connections
Establishing Connections provides information to help you decide how
you plan to distribute your application and how you can use Connexis
to set up connections:
General Connection Patterns - provides information about
client/server and peer to peer connection patterns.
Unwired Port Registration - provides information about
registration, automatic versus application registration, and
registration parameters.
Name Resolution - describes how Connexis resolves host names.
Connexis Connection Options - describes how Connexis handles
publisher/subscriber connection patterns. The three methods of
establishing connections: local, explicit endpoint, and Locator
connections are discussed.
Registration Summary - provides several examples explaining how
to use registration strings successfully.
Connection Design Heuristics - provides a summary of connection
design principles and how they are handled by Rose RealTime and
Connexis. Replicated publisher ports, invokes, broadcast sends,
notification, defers and sending data between capsules are
discussed.
Chapter 5 Establishing Connections
108 User Guide - Rational Rose RealTime Connexis
General Connection Patterns
In the broadest sense there are two connection patterns that can be
implemented by an application:
client/server
peer to peer
These two patterns are not mutually exclusive. A capsule that is
participating in one connection as a client is not limited to that role. It
could be participating as a client in one connection and a server in
another. The same capsule may also be involved in several peer to peer
connections with different capsules.
Client/Server
The client/server pattern is used to describe a connection topology in
which there is a service provider that is capable of providing services
to two or more capsules.
In Figure 52, the ServerCapsule supports three connections on its
clientServer port. Each of the client capsules only supports one. In this
example, the distinction between the server and the client is that the
server publishes its service, and the client subscribes to it. In Rational
Rose RealTime, unwired public and protected ports can each play the
role of the publisher or subscriber.
General Connection Patterns
User Guide - Rational Rose RealTime Connexis 109
Figure 52 Client / server pattern
In scenarios where Automatic registration is used, this is configured by
selecting the Publish checkbox in the Port Specification dialog box. For
more information, refer to the Rational Rose RealTime Toolset Guide.
In scenarios where Application registration is used, publishers use the
registerSPP operation and subscribers use the registerSAP operation.
Peer to Peer
With the peer to peer connection pattern, one capsule is connected to
one other capsule and they pass messages back and forth between
each other. Even though the two capsules are peers in the
communication, one of them must be responsible for publishing its
interface and the other for subscribing to the interface.
Chapter 5 Establishing Connections
110 User Guide - Rational Rose RealTime Connexis
In Figure 53, Peer1 is connected to both Peer2 and Peer3 in different
connections through different unwired ports. In both of the
connections, one of the capsules must play the role of the publisher
and the other the role of the subscriber.
Figure 53 Peer to peer connection pattern
Unwired Port Registration
There are three ways to establish a connection using Connexis:
locally - within the same process
external explicit - between processes, using an explicit endpoint
address
locator - within the same process or between processes using a
name lookup service
The registration string that is used when the port is registered with the
Target RSL determines which of these methods is used.
Unwired Port Registration
User Guide - Rational Rose RealTime Connexis 111
What is Registration?
In Rose RealTime, unwired ports must be registered with the Target
RSL. This registration can be accomplished either automatically, or
dynamically through application code. The choice as to which
registration method is to be used is set in the specification dialog for
the unwired port. This setting is illustrated in Figure 54.
Figure 54 Port specification dialog
In Figure 54, the Wired check box is not selected. This means that the
port must be registered using one of the two methods outlined. If the
Automatic registration check box is checked, the port will be registered
automatically using the name provided in the Registration override
field. If no text has been entered into the Registration override field, the
port will be registered under its own name with the ILS. If the Publish
Chapter 5 Establishing Connections
112 User Guide - Rational Rose RealTime Connexis
checkbox is checked, the capsule will publish this interface. If the
Publish checkbox is not checked, the capsule will request to subscribe
to this interface. If the Application registration check box is checked, it
is assumed that the registration of the port will be handled by the
application code. In this case, the Registration override field is ignored.
Port API
To register ports dynamically, you must use the functions that are
provided on the Rose RealTime port objects. The RTProtocol class
implements the concept of a port role in Rose RealTime. At design time,
when you create a port role on a capsule, it corresponds to an instance
of RTProtocol. The API provided by the Rose RealTime port objects to
manage the registration of the ports is implemented on the RTProtocol
class. For more information, refer to the Rational Rose RealTime
Toolset Guide.
The RTProtocol class provides the functions required for registration
and deregistration of unwired ports. Each function along with a brief
description of its responsibilities is presented in the following table.
Table 12 RTProtocol interface
Function Description
registerSAP(serviceName : const
char*) : int
Register a subscriber side port with the
connection service using the supplied
serviceName. The connection service is
either the ILS or DCS. Returns a 1 on
success or a 0 on failure.
deregisterSAP( : void) : int Deregisters a previously registered
subscriber side port. Returns a 1 on
success or a 0 on failure.
registerSPP(serviceName : const
char*) : int
Register a publisher side port with the
connection service, using the supplied
serviceName. The connection service is
either the ILS or DCS. Returns a 1 on
success or a 0 on failure.
deregisterSPP( : void) : int Deregisters a previously registered
publisher side port. Returns a 1 on
success or a 0 on failure.
isRegistered( : void) : int Returns a 1 if the port is registered, or a
0 if the port is not registered.
Unwired Port Registration
User Guide - Rational Rose RealTime Connexis 113
Automatic vs. Application Registration
There are two ways to register a port. The first is to specify that the
registration be completed automatically. This instructs the Target RSL
to register the unwired port with the connection service using the name
that was given to the port or with the specified Registration override.
This approach is illustrated in Figure 55.
getRegisteredName( : void ) :
const char*
Returns the service name that was used
to register the current port. If the port is
not registered, a null pointer is returned.
bindingNotification( on_off : int ) :
void
Sets the binding notification of the port to
either on (1) or off (0). This is used to
programmatically set the notification
property of a port.
bindingNotificationRequested( :
void ) : int
Returns 1 if the port has notification
turned on or returns 0 if the port has
notification turned off.
Table 12 RTProtocol interface
Function Description
Chapter 5 Establishing Connections
114 User Guide - Rational Rose RealTime Connexis
Figure 55 Automatic port registration
In this case, the port is registered using the string that was provided in
the Registration override field (dcs:cdm://host1:14500/init). Since
the Publish checkbox is not checked, it is a subscriber. If no override
had been provided, the port would have been registered using the
ports name (pInitialize).
The second approach is to specify that the registration be completed by
the application, and to then register the port through application code
using the RTProtocol interface described in Port API on page 112. The
port specification for implementing this registration method is shown
in Figure 56.
Unwired Port Registration
User Guide - Rational Rose RealTime Connexis 115
Figure 56 Application port registration
When this registration method is used, a registration string similar to
what is shown in the Registration override: field in Figure 55 must be
specified as the argument to the registerSAP() or registerSPP()
RTProtocol API function, somewhere in the state machine of the
capsule. For example, code similar to the following could be written in
the initial transition.
pInitialize.registerSAP(dcs:cdm://host1:14500/init);
Registration Parameters
There are often cases where extra information may be required when
registering a port with the connection service. Connexis supports
passing parameters as part of the registration string. These parameters
take the form of tagged-value pairs. The specification string is enclosed
in a pair of delimiters. Each tag-value pair is also enclosed in a pair of
delimiters. For example:
Chapter 5 Establishing Connections
116 User Guide - Rational Rose RealTime Connexis
((tag1,value1)(tag2,value2))
The ( and ) characters are used as tag-value pair delimiters, and
also as delimiters to the entire parameter list. The , is used to
separate the tag and the value in a tag-value pair.
Supported parameters
For subscribing, Connexis provides registration options to set the
transport for global registrations and to specify the quality of service
parameters for a connection setup. For publishers, Connexis provides
a registrations option to assign a rank to a publisher. The details of
these registration parameters are outlined in Table 13.
Unwired Port Registration
User Guide - Rational Rose RealTime Connexis 117
Table 13 Supported registration parameters
Parameter Name Description
locator_transport This parameter specifies the transport that is to be used
by the subscriber to connect to a publisher.
Type: string
Possible values: cdm, crm and any integrated
transports
locator_rank This parameter specifies the rank of the publisher that
is being registered. This parameter only works for ports
that are publishers. The higher the number, the higher
the rank.
If the rank is not specified, the default rank is zero.
Type: integer
Possible values: any integer >= 0
connect_retries This parameter specifies the maximum number of times
that DCS attempts to send a connect message to a
remote endpoint to establish a connection. The default,
without the option, is infinity.
The maximum connect timeout interval is equal to (1 +
connect_retries) * CNXdcrd.
If connect_retries equals zero, then the maximum
timeout is therefore CNXdcrd.
If connect_retries equals one, then the maximum
timeout is therefore 2 * CNXdcrd, etc.
If no connect acknowledgment is received within this
timeout interval, a rtdError message with enumerated
data rtdConnectTimeout is sent to the application.
If the transport timeout interval is shorter than the
maximum connect retry interval, a rtdError message
with enumerated data rtdEndpointUnavailable may be
sent to the application instead.
Chapter 5 Establishing Connections
118 User Guide - Rational Rose RealTime Connexis
Registration parameter examples
The first example registers a subscriber port with cdm as the
preferred protocol.
port1.registerSAP(dcs:/service1 ((locator_transport, cdm)));
This example registers a publisher port with the specified rank.
port2.registerSPP(dcs:/service1 ((locator_rank, 1)));
Name Resolution
Whenever an endpoint is registered using a host name instead of an IP
address, Connexis will translate the host name into a valid IP address.
On development workstations this will typically be done through a
Domain Name Service (DNS). Since the call to the DNS is blocking,
Connexis performs this operation using a separate thread, called a
helper thread. The following points describe the algorithm that is used
by Connexis to resolve host names:
1. An attempt is made to resolve the host name.
2. If the host name cannot be resolved, the name resolution will be
retried periodically until it is resolved successfully.
Host names that have been resolved are cached for a number of
seconds. This means that if a resolution request is made for a host
name that had just been looked up, the result from the last lookup will
be returned.
Connexis Connection Options
Connexis is able to handle the connection patterns listed in General
Connection Patterns, as well as other connection topologies common
in distributed systems. It does this using the publisher/subscriber
pattern. With this pattern, every virtual circuit in a Connexis model
has a publisher at one end of the communication channel and a
subscriber at the other end. The publisher publishes its interface with
the connection service (or the locator) and the subscriber subscribes to
that interface.
At the highest level, there are three different ways that connections can
be established using Connexis:
locally - connect to another object within the same executable
Connexis Connection Options
User Guide - Rational Rose RealTime Connexis 119
external using an explicit endpoint - connect to an object in
another executable using an explicit endpoint
using the locator service - connect to an object using the Locator
service to resolve the endpoint address
Local Connections
Rose RealTime has a built-in connection service called the Internal
Layer Service (ILS). The ILS is used to connect unwired ports within the
same executable, or to be more precise, within the same instance of the
Rose RealTime Run-time Service Library (Target RSL).
The ILS establishes the connection between two local unwired ports.
Registering ports locally is the simplest of the three registration types
but it is also the least flexible. When a port is registered with the ILS,
it cannot send or receive messages to or from ports in another
executable model.
In addition to establishing local connections using the ILS, you may
also use Connexis to accomplish the same thing. Using Connexis to
establish local connections has the following advantages:
Connexis supports multiple publishers with the same registration
name (the ILS does not)
Connexis allows you to establish loopbacks that can be used to
fully trace the message flow between the connected ports. This can
be very useful for debugging an application.
Local connection examples
This section presents two examples:
local connection with DCS using automatic registration
local connection with DCS using application registration
Chapter 5 Establishing Connections
120 User Guide - Rational Rose RealTime Connexis
Example 1: Local connection, ILS, automatic registration and
override
This example illustrates how to register an unwired client side port and
a corresponding server side port using automatic registration.
This example implements a simple initialization controller. The
controller is responsible for making sure that the components of an
application are initialized in a predetermined order.
The structure for the initialization controller is shown in Figure 57.
Figure 57 Class diagram of initialization controller
Connexis Connection Options
User Guide - Rational Rose RealTime Connexis 121
In this structure, the initialization controller capsule requires a
connection to each of the capsules in the application. These
connections are required so that it can send initialization messages to
each of the capsules. If this application exists completely in a single
executable, the initialization controller could connect to each
component through a wired port. This implementation may cause the
following problems:
The structure is unnecessarily complex as a result of having to
show all of the physical connections between the different
capsules.
The structure is not as flexible. More effort is required to separate
some of the components out into separate applications.
For these reasons, the pattern is better modeled using unwired ports.
To automatically register the ports in this example for each
initialization port:
1. Select the port and open its specification dialog.
2. Uncheck the Wired option.
3. If the port is being published (that is, server in a client/server
distribution pattern), check the Publish checkbox.
4. Select the Automatic registration option.
5. If notification is being used, check the Notification check box.
6. Type in a DCS Registration string in the Registration override field.
Chapter 5 Establishing Connections
122 User Guide - Rational Rose RealTime Connexis
Figure 58 Specifying automatic registration
As mentioned in the Connexis Quick Start, the convention usually
followed is to conjugate the port that is being published (this would
correspond to the server in the client/server distribution pattern). The
reason for this is twofold:
By following a convention, the naming of protocols and signals will
be consistent throughout the model.
It requires fewer steps in a client/server pattern because only the
one server port needs be conjugated (instead of all of the clients).
In this case, the registration name is overridden by entering dcs:init
in the Registration override field. This means that this port is registered
with the DCS with the name init. Since the Publish option is selected,
the port is published. If nothing is entered in the Registration override
field, the port name, pInitialize, is used and is registered with the ILS.
Automatic registration using the DCS requires registration override;
otherwise, it defaults to the ILS
Connexis Connection Options
User Guide - Rational Rose RealTime Connexis 123
If you register your ports with the DCS (instead of the built-in ILS) and
you are making use of the Locator service, you will not have to make
changes to the registration string if one side of the connection is moved
to a different process.
Example 2: Local connection and application registration
This example illustrates registering an unwired client port and a
corresponding server port using application registration. This example
uses the same sample capsules as the previous example. In this case,
the ports are defined as application registration as shown in Figure 59.
Figure 59 Specifying application registration
When a port is registered using application registration, the
Registration override field is ignored and the functions described in the
port API must be used to register the port with the connection service.
Chapter 5 Establishing Connections
124 User Guide - Rational Rose RealTime Connexis
The code required to register the port with the DCS is written as
follows:
pInitialize.registerSPP(dcs:init);
The above line of code registers the pInitialize port with the DCS using
the init service name.
External Explicit Connections
External explicit connections are connections that:
are made with capsules that are running in another process, either
on the same processor or a different processor on the network
the name of the endpoint is known at design time or can be
specified at run-time through a configuration file or command line
argument
Explicit connections are typically used in a fixed network environment
where the network configuration is known and rarely changes.
Using explicit connections is less flexible than making use of a Locator
service, but in cases where the network addresses and endpoint names
are known, it is a smaller (memory wise) and faster approach. The
decision to use either the Locator service or explicit connections
depends mostly on the requirements of the application and the
network configuration that it will be running in.
External explicit examples
With explicit connections, more information must be known by the
applications about the other side of the connection. Each subscriber
must know or be able to find out the explicit endpoint addresses of all
of the other objects that it wants to subscribe to.
Registering the publisher side of the connection is similar to the local
and Locator cases. The connection service and the service name are all
that is required. When starting the publisher component instance, you
usually specify endpoints on which it will be listening.
The subscriber side of the connection is quite a bit different. In this
case, you must know the endpoint address of the publisher and specify
it in the registration string.
Connexis Connection Options
User Guide - Rational Rose RealTime Connexis 125
Queueing of Subscriptions
If a subscriber registers before a transport connection has been
established to the remote endpoint, the DCS repeatedly attempts to
establish a connection to the remote endpoint. If the "conn_retries"
registration option has not been specified in the registration string, the
DCS will try to establish the connection until the port is deregistered.
If a connection to the remote endpoint is established, but the
registration takes place before the service is published at the remote
endpoint, the registration is left pending until a service is published or
the subscribing port is deregistered.
Using the CDM transport protocol
The publisher application would perform the following:
<port_name>.registerSPP(dcs:myService);
Assuming that the myService publisher is started on node host2, and
is listening on port 45678, the following registration string is used by
the subscriber:
<port_name>.registerSAP(dcs:cdm://host2:45678/myService);
This tells Connexis to try to connect to port 45678 on host2 to get to
the desired publisher. The format of the string is defined by the BNF
Registration String Grammar. For more information, see Registration
String Grammar on page 245.
For this example to work properly, the application in which the
publisher is running must be started using the following CNXep
command line parameter:
<app_name> -CNXep=45678
Locator Connections
The most flexible way of registering unwired ports is to use the Locator
service. The Locator service maps endpoint service names to physical
endpoints on the network. This enables applications to not be
intimately aware of the network topology, which also means that they
do not have to change when the network topology changes.
Chapter 5 Establishing Connections
126 User Guide - Rational Rose RealTime Connexis
The Connexis Locator is implemented as a Rose RealTime Connexis
component. Unwired ports register (subscribe or publish) themselves
with the Locator instead of the connection service. The Locator is then
responsible for finding the appropriate endpoints and insuring that
they are bound together.
Using the Locator is similar in nature to using local connections, you
register a service name for the port with the Locator and the rest is
handled for you. The key differences between using the Locator and
using local connections are:
A Locator component (RTDBase_Locator, or
RTDBase_Locator_Agent) must be included in the executables that
are implementing the Locator (either primary or backup).
The Locator service must be started when the Locator is being
used.
This means that a primary Locator must have been configured
using the -CNXlp configuration option on the Locator process, and
the client processes must be started with the -CNXlpep
configuration option, which specifies the address of the primary
Locator.
The registration string is slightly different. Instead of using a string
with the syntax, dcs:<service_name> you must use a string with
the syntax, dcs:/<service_name>. This registration string registers
the port with the DCS and with the Locator.
When a subscriber is registered using this registration string
syntax, it first looks for a local publisher to which to connect. If it
finds a local publisher with the service it is looking for, it will
connect to it. If no local publisher is found, it subscribes to the
Locator service.
Locator examples
To register a publisher named QueryState using the Locator, the
following registration string would be used:
port1.registerSPP(dcs:/QueryState);
To register a subscriber that subscribes to the same QueryState
service, the following registration string is used:
port2.registerSAP(dcs:/QueryState);
Registration Summary
User Guide - Rational Rose RealTime Connexis 127
Note that this example assumes that the applications have been
started using the appropriate command line arguments and the
RTDBase_Locator capsule has been dragged into the application
providing locator services.
Registration Summary
This section presents several registration scenarios and explains what
registrations strings will succeed and fail in each. The important points
to realize about Connexis registration are:
Ports that are registered with the ILS are registered in a different
namespace than those that are registered with the DCS. This
means that a subscriber port registered as:test1 will not bind with
a publisher registered as dcs:test1.
Ports that are registered with the Locator are also implicitly
registered with the DCS. This means that they will bind with locally
registered DCS ports and also explicit DCS ports with the same
service name.
Ports that are registered with the registration string servicename
(as opposed to :servicename or dcs:servicename) share the
same namespace as ports that are registered with the ILS
(:servicename). This type of registration is present for backwards
compatibility reasons only, and as a result, is not discussed in this
section.
All of these examples assume that the publisher is replicated, that is,
it can support the number of subscribers that are trying to connect to
it.
Scenario 1: Publisher Registered with the ILS
In this scenario, a publisher (port2) is registered with the ILS and two
subscribers (port1 and port3) attempt to make connections to the
publisher.
Chapter 5 Establishing Connections
128 User Guide - Rational Rose RealTime Connexis
Figure 60 Scenario 1: Registering ports with the ILS
In this scenario, port1 will connect to port2 but port3 will not. This is
because port2 has been registered with the ILS which is only capable
of connecting ports locally. Port2 would also not be capable of receiving
explicit or locator connections from a different process.
Scenario 2: Publisher Registered with the DCS
In this scenario, the publisher is registered with the DCS. Several
subscribers, each registered using different methods, attempt to
establish connections to the subscriber.
Registration Summary
User Guide - Rational Rose RealTime Connexis 129
Figure 61 Publisher registered with DCS
Note: In this scenario the location of the Locator Service is not relevant
to the outcome of the registrations.
In this scenario, port2 registers with the DCS. Also, port1 connects to
port2 by forming a local DCS connection. Port3 and port4 also connect
because, by registering with the DCS, port2 is capable of receiving both
local DCS connections and explicit connections (whether they are
internal or external). In this scenario, the only registration string that
will not result in a successful connection being established is the one
that is used to register port5. This registration string is looking to the
Locator to resolve the endpoint name. Since port2 did not register with
the Locator, no compatible publisher will be found for port5.
Note: A local DCS connection is an intra-process connection that is using
the DCS instead of the ILS. As with ILS connections, local DCS
connections, once bound, have the same run-time performance as
connections that are bound at design time.
Chapter 5 Establishing Connections
130 User Guide - Rational Rose RealTime Connexis
Scenario 3: Publisher Registered with the Locator
In this scenario, the publisher (port1) registers with the Locator
Service. Several subscribers, each using a different registration string,
attempt to establish connections to the publisher.
Figure 62 Publisher registered with the Locator
Note: In this scenario, the location of the Locator Service is not relevant
to the outcome of the registrations.
In this scenario, the publisher (port1) is registered with the Locator
Service. The interesting aspect of this type of registration is that
registering with the Locator Service implicitly registers the port with
the DCS. This means that subscribers can make explicit (either local
or remote) connections to a publisher that was registered with the
Locator Service. Port2 and port3 will both successfully connect to port1
since they use the Locator. port4 will also connect because it is
specifying the endpoint explicitly. Port5 will not be connected, since it
is registering locally with the DCS.
Connection Design Heuristics
User Guide - Rational Rose RealTime Connexis 131
Multiple Publishers
Unlike the ILS, Connexis supports multiple publishers with the same
registration name. The ILS restricts the naming of unwired ports that
are publishing themselves, so that each published unwired port must
be named uniquely. The port can be replicated but two capsules cannot
have published ports with the same name.
This restriction is removed when using Connexis. Multiple capsules
can have published unwired ports that use the same registration
string. This can be very useful for distributing the load in a distributed
system.
For example, if the application being built has a service provider that
offers a database lookup service, Connexis could be used to distribute
this service between two or more capsules running on separate
processors in the network. This can also be modeled locally without
having to change any code when the distributed version is released.
This can be accomplished by using the Locator service or by reading a
configuration file that contains the endpoints of the different
components.
Connection Design Heuristics
When to Use Replicated Publisher Ports
This is a common design pattern. It is very common in real-time and
non-real-time systems, for a single software element to provide services
to multiple others. A very common example of this is a web server.
When you connect to a website, like www.rational.com, you are
connecting to a server process that is running on the host machine.
The server process is listening on a particular TCP/IP port and when a
request comes in, it spawns a task to handle that particular client
interaction. Multiple clients can connect to www.rational.com at the
same time.
One thing to be careful of when using replicated publishers (or multiple
publishers with the same name) is to make sure that the number of
publishers is appropriate for servicing the number of subscribers. If
the number of subscribers is significantly greater than the number of
publishers thrashing could occur.
Chapter 5 Establishing Connections
132 User Guide - Rational Rose RealTime Connexis
Use of Invokes
Invokes in Rose RealTime are the equivalent of synchronous messages.
Remember that the normal method of communication in a Rose
RealTime model is through asynchronous message sends. In contrast,
invokes are very similar to regular function calls on objects in a system.
The issue that can arise with invokes is that they bypass the normal
message queuing structure that is in place in Rose RealTime. The
calling capsule is blocked until the receiving capsule completes the
transition code that has been called and returns. In addition, the
receiving capsule must know to reply to the invoke.
Rose RealTime invokes cannot be used across thread or processor
boundaries. This means that if invokes are used in a particular
situation, you will not be able to separate the two capsules involved in
that connection into separate threads or processes without changes to
the code. Since Connexis is used specifically to send inter-process
messages, invokes cannot be used with Connexis-enabled
connections.
Use of Broadcast Sends
A broadcast send is a send that is performed on a replicated port
without specifying an index. Broadcast sends result in a message being
sent to each of the capsules that are connected on the other side of the
port.
There are many cases where broadcast sends are a useful and
appropriate technique. For example, when initializing capsules in an
application, it may be necessary to send all of the capsules of a
particular class an initialize message. If the order of the initialize
messages is not important, a broadcast send may be used.
The consequences of using a broadcast send are performance-related.
A broadcast send on a port that has a multiplicity of n results in n
individual message sends. This can impose a significant amount of
overhead on your system, especially in cases where n is large and the
messages are sent between processes.
Connection Design Heuristics
User Guide - Rational Rose RealTime Connexis 133
Use of Notification
Notification is used to instruct the run-time libraries to send a message
on a port whenever the port has been connected or disconnected from
its peer on the other side of the connection. The rtBound message is
sent when a connection is established and the rtUnbound message is
sent when a connection is removed. In general the use of notification
simplifies the job of the developer.
There is one rule that must be followed when notification is being used
on a port: when you deregister the port, and plan to register it again
later, you must wait to receive the rtUnbound event before reregistering
the port.
This is required because the priority of the rtBound message is higher
than that of the rtUnbound message. This means that if you deregister
a port and then immediately register it again, the rtBound message
could arrive first followed by an rtUnbound message. This could result
in an unexpected message or it could cause the capsule to go into an
incorrect state.
Use of Defers
Message deferral is a Rose RealTime feature that allows you to defer
messages that are received when a capsules state machine is not ready
to process them. Messages that have been deferred can be recalled at
a later time for processing. Although message deferral is a useful, and
in some cases, a necessary design technique, it does complicate the
state machine design of your model. For this reason, defers should be
used judiciously in Rose RealTime models.
In some cases, defers are used to get around the asynchronous
implementation of a part of the design that is logically sequential. For
example, if you are starting a service by asynchronously requesting an
object from an object factory, you may receive messages destined for
the new object before it has been created and returned by the object
factory. There are two solutions to this problem. The first is to defer the
incoming messages. The second is to request the object synchronously
using an invoke.
Chapter 5 Establishing Connections
134 User Guide - Rational Rose RealTime Connexis
Both of these solutions have trade-offs to consider. If you go the defer
route, the state machine of the capsule becomes more complicated.
There is also a greater probability of maintenance problems because
state machine changes may require additional recalls to be placed in
the code. If this is not done properly, errors may be introduced into the
model.
With the invoke solution, an entirely different set of issues results.
There are no longer any message order issues, and the state machine
is typically cleaner, but the connector that the invoke is being called on
is required to remain in the same thread.
Sending Data
There are many performance issues to consider when sending data
between capsules. The first thing to keep in mind is the relative
performance of different kinds of message sends. In general, the types
of message sends can be listed in order of relative performance (from
fastest to slowest) as in the following list:
1. intra-thread
2. inter-thread
3. inter-process (same node)
4. inter-process (over network)
In addition, messages with little or no data associated with them are
typically faster than messages with a large payload. This would lead
you to believe that it is better to send small messages between
capsules, especially when the messages are sent between processes.
This is true in general but the decision is a little more complicated than
that. The other factor that comes into play is the frequency of the
messages that are being sent. If you are sending small pieces of data
between two capsules hundreds of times a second, it would typically be
faster to buffer this data on the sending side and send a few larger
messages. These are some of the decisions that must be made when
designing a distributed application.
Sending Data Classes by Value
In order to send a data class by value across processes, it must be
marshallable. Refer to the Data Classes that are Marshallable in the
Rational Rose RealTime C++ Guide.
User Guide - Rational Rose RealTime Connexis 135
Chapter 6
Using the Connexis Locator Service
The Connexis Locator Service fulfills the role of the name server in a
Connexis application. The Locator does not have to be configured or
used in a Connexis application, but depending on the applications
requirements, it can be very convenient.
The Connexis Locator Service supports both a primary and a backup
locator. In this way, a distributed application can be made more robust
by ensuring that the name server is not a single point of failure.
By using the Locator, the location of endpoints to which an application
is sending messages can remain totally transparent to the application.
The application uses service names to refer to the endpoints that are
being connected. The physical address of these endpoints never has to
be revealed to the application. This makes creating a network topology
that can be dynamically changed without affecting currently executing
software, much easier than if physical endpoints are used. This
strategy also allows load sharing topologies to be created much more
easily than if physical endpoints are used.
This chapter discusses:
Adding Locator Support to a Model - describes the capsule roles
required to add Locator service.
Publication and Subscription - describes how the Locator handles
publishers and subscribers. It provides information about ranking
published ports and load-sharing publishers.
Chapter 6 Using the Connexis Locator Service
136 User Guide - Rational Rose RealTime Connexis
Locator Dynamics - describes how the Locator operates when a
publisher becomes fully subsribed, a subscriber loses its
connection to a publisher, the primary Locator fails, or a
subscriber is unconnected. It also discusses Locator race
conditions.
Locator Configuration - describes the Locator configuration
parameters and provides examples of how to start your application
using a primary locator and backup locator.
Creating your Own Name Service - provides guidelines on using a
custom name service in place of the Connexis Locator.
Adding Locator Support to a Model
To add the Locator to your application you must add a capsule role for
either the RTDBase_Locator or the RTDBase_Locator_Agent capsules
to a capsule in your application. Each node that is going to have a
Locator configured to run with it (either backup or primary) must have
one of these capsule roles contained in it (see Sharing DCS Interfaces
on page 84).
The RTDBase_Locator capsule only adds support for the Locator
(primary or backup). The RTDBase_Locator_Agent adds support for
both the Locator and for the Target Agent which is needed to run the
Connexis Viewer.
Publication and Subscription
In Connexis, one endpoint in every distributed connection is the
publisher and the other is the subscriber. The publisher posts (or
publishes) its interface, making it available for another endpoint to
connect to it. The subscriber connects to an endpoint that has been
published. This pattern can be used to implement any kind of
distributed connection topology. For example, client/server, peer to
peer, etc.
Publication
A port is published with the locator by providing its service name and
the endpoints where it can be reached. Multiple ports can be published
with the same server name from the same endpoint, or different
endpoints.
Publication and Subscription
User Guide - Rational Rose RealTime Connexis 137
The registerSPP() port function is used to publish a port. Deregistration
of a published port (using the ports deregisterSPP() function) causes it
to be unpublished from the locator and severs any connections that are
using that port.
Subscription
A port subscribes to the locator by providing its endpoint and the name
of the service to which it wants to connect. If no port has previously
been published with that service name, the subscription remains
pending. Once one or more ports are published with that service name,
the Locator returns the publisher with the highest rank using the
preferred protocol, to the subscriber endpoint. If the subscriber has
specified a protocol (locator_transport), the highest-ranked publisher
which supports that protocol is returned. The DCS then makes an
explicit registration on behalf of the subscriber port with the returned
publisher.
The registerSAP() port function is used to subscribe a port to a service.
Ranking Published Ports
The Locator supports the ranking of publishers. The default ranking of
published ports is dependent on the following factors:
the rank that the publisher is given
the protocol that the publisher is using
The rank of a publisher is specified by the designer through the use of
a registration parameter. For example:
<port_name>.registerSPP(dcs:/service1 ((locator_rank, 1)));
Chapter 6 Using the Connexis Locator Service
138 User Guide - Rational Rose RealTime Connexis
When the locator searches for an endpoint to return, it follows this
algorithm. If a subscriber has specified a preferred transport, using the
locator-transport parameter when the SAP is registered, the locator
returns an endpoint published on that transport.
If the subscriber has not specified a preferred transport, but the locator
has been started with the -CNXlpt=<transport> command line
argument, it will return an endpoint published on the transport
specified. This is the case if a publisher exists and if the subscriber has
the transport available. If no endpoint has been found, the locator
returns the first endpoint published on any transport the client has
available. There is no default preferred transport version 2001.03.00 of
Connexis.
In all cases, the locator respects the rank, if any, that the publisher
specified using the locator-rank registration parameter. The highest
ranking endpoint will always be returned. The selection of an endpoint
from among many of the highest rank is arbitrary. The default rank is
zero.
Load-sharing of Publishers
Publishers of equal rank are load-shared among subscribers using a
simple round-robin algorithm. As the publishers are load-shared, the
assignment of a publisher to a subscriber is non-deterministic.
Examples
Ports publish themselves using the registerSPP() function call on an
unwired end port and subscribe to a published port using the
registerSAP() function call on an unwired end port. This section
presents several examples of registration strings that could be used
with these functions to publish or subscribe to interfaces using the
Locator service.
Example 1: Basic Locator registration
Publish:
<port_name>.registerSPP(dcs:/service1);
Subscribe:
<port_name>.registerSAP(dcs:/service1);
Publication and Subscription
User Guide - Rational Rose RealTime Connexis 139
Example 2: Locator registration using custom ranking
Publish:
<port_name>.registerSPP(dcs:/service1((locator_rank, 1)));
Subscribe:
This parameter only applies to the publish side of a
connection.
Example 3: Specifying the protocol
<port_name>.registerSAP(dcs:/service1((locator_transport,
crm)));
Notice that in the simple cases (where a custom ranking or protocol is
not being used), the registration string for both the publisher and the
subscriber is the same and neither side of the connection has any
knowledge of the value of the other sides physical endpoint address.
If a subscriber is registered using the Locator
(registerSAP(dcs:/service1)) and no Locator is available (meaning the
application was not launched with a -CNXlp or -CNXlpep parameter),
then the registration will fail. If the same scenario exists for a
publisher, the port will still be registered with the DCS and will be able
to accept local and explicit connections.
Chapter 6 Using the Connexis Locator Service
140 User Guide - Rational Rose RealTime Connexis
Locator Dynamics
Figure 63 is a sequence diagram that illustrates the basic publication
and subscription operations of a Locator.
Figure 63 Basic publication and subscription
Locator Dynamics
User Guide - Rational Rose RealTime Connexis 141
From the user application perspective, the publication and
subscription is accomplished through the registerSPP() and
registerSAP() function calls on the port objects. The rest of the
messages shown on the sequence diagram in Figure 63 are internal
messages that occur as the result of a registerSAP() or registerSPP()
function call.
The Locator can be configured to execute on any node in the
distributed application. This configuration is accomplished through
command line parameters that are discussed later in this section.
Fully Subscribed Publishers
When a publisher becomes fully subscribed (meaning that all of the
ports on the publisher have been subscribed to), the publisher
unpublishes itself from the locator. At a later time, if a subscriber
deregisters itself from that publisher, the publisher republishes itself
with the locator. This sequence of events is illustrated in the sequence
diagram shown in Figure 64.
Figure 64 Fully subscribed publishers
Chapter 6 Using the Connexis Locator Service
142 User Guide - Rational Rose RealTime Connexis
Subscriber Losing Connection to a Publisher
If a subscriber that has successfully connected to a published endpoint
later loses that connection (through deregistration of the publisher,
failure of the publishers host, etc.), and this is detected by the
underlying transport, then the subscriber port is automatically
resubscribed to the locator. If the underlying transport does not
provide this quality of service, then it is up to the user application to
implement a failure detection mechanism in the protocol to detect
messaging failures and reregister as necessary.
One possible solution to this problem is to set up a timer on the
subscriber that periodically sends a message to the publisher. If the
publisher does not respond to this message within a specified amount
of time, the subscriber resubscribes to the service.
Locator Failure
If the primary Locator has been configured with a backup, and the
primary Locator goes down, the backup Locator automatically takes
over the role of primary Locator. When this primary/backup strategy is
used, the primary and backup Locators should be placed on different
nodes in the network. This ensures that there is not a single point of
failure in your distributed application.
Figure 65 illustrates the basic fail-over scenario of a primary/backup
Locator.
The backup continually polls the primary, and restarts the election
protocol should the primary fail to respond. The backup assumes the
role of the primary when the primary continues to fail to respond to the
election protocol. When the backup takes over, it broadcasts a message
to all endpoints stating that it is now the primary locator. The
endpoints acknowledge this and republish all global publisher ports
and pending subscription ports with the newly elected primary Locator.
Should the original primary locator become available again, it assumes
the role of the backup locator.
During the time that it takes for the transition from primary to backup
locator to take place, new publish or subscribe requests will be delayed
until the backup locator takes over.
Locator Dynamics
User Guide - Rational Rose RealTime Connexis 143
Figure 65 Primary to backup switchover
Chapter 6 Using the Connexis Locator Service
144 User Guide - Rational Rose RealTime Connexis
Locator Race Condition
There may be cases where the publisher becomes unavailable in
between the time that its endpoint is received from the locator and the
time when the explicit registration is attempted. One scenario that
would cause this to happen is illustrated in the sequence diagram in
Figure 66.
Figure 66 Locator race condition
In this case, subscriber2 got the endpoint from the locator and bound
to the last available port on the publisher. Meanwhile, subscriber1 got
the endpoint from the locator (before the publisher had unpublished
with the locator), and attempted to bind to it. This bind fails because
there are no ports left on the publisher. This scenario causes
subscriber1 to resubscribe with the Locator.
Locator Configuration
User Guide - Rational Rose RealTime Connexis 145
Unconnected Subscribers
If no unbound publishers are available, the subscriber remains
pending at the locator forever. Deregistration of a subscriber port that
has a pending subscription causes it to be unsubscribed from the
Locator.
Locator Configuration
The Locator service is an optional service that provides subscribers
with an endpoint that will be used on a first-come, first-served basis
when trying to connect to a publisher. The Locator service can be
initialized with both a primary and a backup server.
The initial Connexis release only supports a single backup server. This
limits the level of fault-tolerance to a single processor failure. This is
not a fundamental restriction of the primary/backup approach and
support for multiple backup servers may be added in future releases.
It is possible to operate with a single Locator for test purposes or if
fault-tolerance is not required in the product.
Locator Parameters
There are several configuration options that can be used to set up the
Locator for specific environments. These are listed in Table 14.
Table 14 Locator command line options
Command Line Option Description
CNXlocator_primary
(CNXlp)
Specifies that this process should be made
the primary locator.
Argument Type: none
Default Value: none
CNXlocator_backup
(CNXlb)
Specifies that this process should be made
the backup locator.
Argument Type: none
Default Value: none
Chapter 6 Using the Connexis Locator Service
146 User Guide - Rational Rose RealTime Connexis
CNXlocator_primary_
endpoint (CNXlpep)
Specifies the endpoint of the primary locator
(if this process is not the primary locator).
Argument Type: string
Default Value: none
CNXlocator_backup_
endpoint (CNXlbep)
Specifies the endpoint of the backup locator
(if this process is not the backup locator).
Argument Type: string
Default Value: none
CNXlocator_retry_delay
(CNXlrd)
Specifies the amount of time, in ms, to wait
before retries. The value must be >50.
Argument Type: integer
Default Value: 2000
CNXlocator_audit_delay
(CNXlad)
Specifies the amount of time, in ms, to wait
between audits of the primary and backup
locators. The value must be >50.
Argument Type: integer
Default Value: 2000
CNXlocator_audits_oos
(CNXlao)
Specifies the number of failed audits required
to take the primary locator out of service.
Using the default of 3, the primary locator
would be taken out of service after the third
consecutive audit had failed.
Argument Type: integer
Default Value: 3
CNXlocator_preferred_
transport (CNXlpt)
Specifies that the first protocol to be chosen.
This option can only be set at the primary or
backup locators.
Argument Type: string
Default Value: none
Table 14 Locator command line options
Command Line Option Description
Locator Configuration
User Guide - Rational Rose RealTime Connexis 147
A locator is configured as the primary by starting the application with
the -CNXlp command line option. When the locator starts up it
publishes a port with the DCS. The backup locator will later connect to
this port for the purpose of monitoring the primary locator. If the
primary locator fails, future locator requests will be routed directly to
the backup locator. If a backup is present, the CNXlbep option must
also be specified when the primary is started so that collocated clients
can use the locator if the backup takes over.
A locator is configured as the backup by informing the Connexis library
that the application is acting as the backup locator and by specifying
the explicit endpoint of the primary locator. This is done using the
-CNXlb command line option (to specify that this application is the
backup locator) and the -CNXlpep command line option (to inform
Connexis of the address of the primary locator).
The backup locator subscribes to the port that is published by the
primary locator. The backup uses this port to periodically poll the
primary locator. If the primary fails to respond to the polling messages,
the backup bids to takeover as the primary.
Client Connexis applications in this fault-tolerant configuration must
be configured with the endpoints of both the primary and the backup.
Each Connexis client explicitly subscribes to a port on both the
primary and the backup locators. Registrations are only sent to the
locator which has identified itself as the primary.
Figure 15 outlines the common Locator configurations and the
parameter combinations that are required to support them.
Chapter 6 Using the Connexis Locator Service
148 User Guide - Rational Rose RealTime Connexis
Table 15 Common Locator configurations and required parameters
Configuration Required Options Description
When starting a client that is
collocated with the primary
locator and no backup is being
used.
CNXlp The CNXlp option is required to
establish the process as the primary
locator.
When starting a client that is
collocated with the primary
locator and a backup is being
used.
CNXlp, CNXlbep The CNXlp option is required to
establish the process as the primary
locator.
The CNXlbep options is required so
that the primary locator and the client
know about the backup.
When starting a client that is
collocated with the backup.
CNXlb, CNXlpep The CNXlb option is required to
establish the process as the backup
locator.
The CNXlpep option is required to
inform the backup and the client of
the primary locator.
When starting a client that is
using a primary locator with no
backup.
CNXlpep The CNXlpep option is required to
inform the client of the location of the
primary locator.
When starting a client that is
using a primary locator with a
backup.
CNXlpep, CNXlbep The CNXlpep and CNXlbep options are
required to inform the client of the
location of the primary and the
backup locators respectively.
Locator Configuration
User Guide - Rational Rose RealTime Connexis 149
Locator Parameter Examples
This section presents several examples of starting different
components that are part of a distributed application that is using the
Connexis Locator service.
Example 1: Two node application with no backup locator
To start the application that acts as the primary locator:
<app_name> -CNXep=cdm://host1:9999 -CNXlp
The other application is started using the following command line
syntax:
<app_name> -CNXep=cdm://host2:9991 -CNXlpep=cdm://host1:9999
Example 2: Three node application with primary and backup
locator
To start the application that acts as the primary locator:
<app_name> -CNXep=cdm://host2:9999 -CNXlp -
CNXlbep=cdm://host3:9999
To start the application that will be acting as the backup locator:
<app_name> -CNXep=cdm://host3:9999 -CNXlb -
CNXlpep=cdm://host2:9999
To start the other application:
<app_name> -CNXep=cdm://host2:9991 -CNXlpep=cdm://host2:9999 -
CNXlbep=cdm://host3:9999
Chapter 6 Using the Connexis Locator Service
150 User Guide - Rational Rose RealTime Connexis
Creating your Own Name Service
The Locator service that is provided with Connexis is designed in a very
general fashion. It should satisfy most of the requirements for this type
of service, but there may be cases where a different level of
functionality is required by a specific application. In these cases, it may
be desirable to design and use your own name service instead of using
the Connexis Locator.
If you do this, there are several key differences between the Connexis
Locator and a simple name service that you should be aware of. The
Connexis Locator does more than simply translate a supplied service
name into a physical endpoint. The Connexis Locator also provides the
following features:
allows for arbitration between several identically named publishers
performs prioritized endpoint lookup on these publishers based on
rank and protocol priority
allows pending subscriptions which are automatically connected to
publishers that are registered at a later time
provides automatic re-subscription when publishers fail
provides a fault-tolerant (no single point of failure) name service
provides load-sharing of multiple publishers
A simple name service will typically only do a one-to-one mapping
between an endpoint service name and the endpoint physical address.
If your application does not require the additional features provided by
the Connexis Locator, you may want to create a custom name service.
An example, where this may be desirable, is if all of the nodes in your
distributed application can be determined by some kind of algorithmic
mapping of a service name (for example, tributaryPort03) to an
explicit endpoint. Another example, where this may be desirable, is in
a static network environment where all of the endpoint mappings could
be read from a configuration file at system start-up time.
In either of these cases, a Connexis connection could be used by all of
the nodes in the distributed application to connect to a known
nameservice port. This nameservice port returns an explicit
endpoint given a service name that was passed in to it.
User Guide - Rational Rose RealTime Connexis 151
Chapter 7
Using the Connexis Viewer
Debugging the data flow between embedded component instances in a
distributed network can be a very difficult task. For distributed
systems that have been designed and generated using Rational Rose
RealTime and Rational Connexis, the Connexis Viewer can be used to
provide real-time insight and feedback to aid in the debugging process.
The Connexis Viewer consists of a workstation component that is
provided for user interaction. The workstation component is launched
from within a Rose RealTime session and consists of a target agent
which monitors the DCS port registration process and collects trace
events.
The Connexis Viewer provides the following information about an
executing model:
the status of unwired end ports that are registered with the DCS
an indication of which DCS unwired end ports are bound to each-
other
traces of user data sent from or received at a DCS registered port
traces of DCS Locator and DCS Transport events -
transport connection establishment and failure
DCS locator switchover
synchronization of naming tables between the active and the
standby DCS locators
Chapter 7 Using the Connexis Viewer
152 User Guide - Rational Rose RealTime Connexis
The circuit tracing functionality provided with the Connexis Viewer
offers features that are similar to the Rose RealTimes Target
Observability with the following exceptions:
Traces can be enabled and controlled independently of the Rose
RealTime toolset.
The output of trace information is handled on a separate (low
priority) thread and is minimally intrusive to the running
application.
Note: The Connexis Viewer can be used at the same time as Rose
RealTimes Target Observability feature. In fact, the easiest way to
start viewing a distributed model is to launch the different
applications directly from Rose RealTime.
The metrics collecting functionality provided with the Connexis Viewer
lets you control and view the metrics collection results of a component
instance. It provides the following features:
Controls start and stop function for metrics collection
Displays metrics data for any registered transports
Displays aggregate data for all registered transports
Displays controller metrics
Saves data in a format that allows for further analysis
Viewer Architecture
User Guide - Rational Rose RealTime Connexis 153
Viewer Architecture
The Viewer communicates with the executing model through the Target
Agent as shown in Figure 67. The Target Agent component must be
contained in every Rose RealTime executable to which the Viewer
connects. The Target Agent operates on a low priority thread and relays
information about the executing model back to the Viewer where it can
be seen.
Figure 67 High-level architecture
Adding Viewer Support to a Model
To add Viewer support to your application, you must add a capsule role
from the RTDBase_Agent or the RTDBase_Locator_Agent capsule, to a
capsule in your application. Each node requiring Viewer support, must
have one of these capsule roles contained in it.
The RTDBase_Agent capsule only adds support for the Target Agent,
which is needed to run the Connexis Viewer. The
RTDBase_Locator_Agent adds support for both the Target Agent and
the Locator.
For more information on Connexis-enabling a Rose RealTime
application refer to Adding Connexis Support to Your Model on
page 83.
Chapter 7 Using the Connexis Viewer
154 User Guide - Rational Rose RealTime Connexis
Before starting the Viewer, there are two command line options that
you should specify for your Rose RealTime component instances:
CNXep - Used to specify the Connexis endpoint. The Viewer must
know the Connexis endpoint of the executing model to be able to
connect to the running application. This is a required parameter.
CNXui - Used to specify a unique identifier for the endpoint. If this
option is not specified, Connexis assigns a default identifier for the
endpoint. The default is a hex code and does not easily identify the
endpoint in the Viewer. For this reason, it is recommended that you
define your own unique, descriptive identifier.
If the CNXep option is not specified on the component instance (in Rose
RealTime), you can specify it using the Viewer. The CNXui option can
only be modified in the Viewer on user-defined component instances.
This means that if the component instance was read in from Rose
RealTime, you cannot modify it in the Viewer.
Adding Metrics Support to a Model
Like tracing, metrics gathering is done on the target itself and is
reported to the Viewer. This capability is enabled by default in the DCS
libraries that ship with Connexis, but it can be enabled or disabled
when the DCS library is recompiled by the user. Like tracing, the model
must contain either the RTDBase_Agent or the
RTDBase_Locator_Agent capsule. When the Viewer connects to the
Target Agent in the component instance, it asks if metrics gathering is
enabled on the target. If it is not, a warning message is displayed in the
log of the viewer and no metrics reporting can be done.
Starting the Connexis Viewer
User Guide - Rational Rose RealTime Connexis 155
Starting the Connexis Viewer
You can start the Connexis Viewer from the Rose RealTime main menu,
from a deployment diagram or from a deployment package.
To start the Connexis Viewer from the main menu:
1. Open the Connexis-enabled Rose RealTime model that you want to
view.
2. Select Tools > Connexis Viewer.
If you have a deployment diagram active when you start the Viewer, it
uses the processor and component instances from that diagram. If no
deployment diagram is active, it uses the processors and component
instances in the model.
To start the Connexis Viewer from a deployment diagram or a
deployment diagram icon:
1. Right-click the deployment diagram or the deployment diagram
icon. A popup menu appears.
2. Select from the popup menu. The Connexis Viewer
appears.
The Connexis Viewer uses the processor and component instances
from the deployment diagram icon that you have selected.
To start the Connexis Viewer from a deployment package:
1. Right-click the deployment package. A popup menu appears.
2. Select for the popup menu. The Connexis Viewer
appears.
The Connexis Viewer uses the processor and component instances
from the deployment package.
Chapter 7 Using the Connexis Viewer
156 User Guide - Rational Rose RealTime Connexis
Duplicate CNX Unique Identifiers
The Duplicate CNXui dialog box indicates that there are multiple
component instances that use the same CNXui. This may cause
confusing information to be displayed when using Connexis Viewer
features that rely on the CNXui. When this occurs, operations that
involve displaying information about the remote end of a connection
may not function correctly. The recommendation is that CNX unique
identifiers be unique amongst all component instances in the Connexis
Viewer session.
Figure 68 Duplicate CNXuis dialog box
Viewer Main Window
The Viewer main window contains the following:
Main menu - is used to access application-specific operations
Tree view - is the main interface to the user and is used to display
and configure information about the executing application as well
as to open trace windows
Trace pane - is used to manage all of the trace windows that are
currently open
Viewer Main Window
User Guide - Rational Rose RealTime Connexis 157
Log window - is used to log connection information
Status bar - is used to display information about the state of the
application
Figure 69 shows the Viewer main window with the HelloWorld model
being viewed.
Figure 69 The Viewer main window
Chapter 7 Using the Connexis Viewer
158 User Guide - Rational Rose RealTime Connexis
Viewer Menus
The main menu, as shown in Figure 70, consists of a File, View, Tools,
Window and Help menu.
Figure 70 Connexis Viewer Main menu
File Menu
Import
Selecting File > Import displays a standard open dialog box that allows
you to import a previously-saved Viewer configuration file.
Use the Import command when you want to view a model in addition to
the one against which you launched the Connexis Viewer. The result of
importing the other model's information is the same as manually
adding each of the model's Processor and component instance
definitions.
Note: Before you import, you must generate the .CVMInfo file for the
model to be imported. This file is generated automatically when you use
the Connexis Viewer with a model.
Exit
Selecting File > Exit exits the application.
View Menu
Status bar
The View menu allows you to toggle the visibility of the Status Bar. A check
mark appears beside the menu item when it is visible.
Viewer Menus
User Guide - Rational Rose RealTime Connexis 159
Tools Menu
Options
Selecting displays a Preferences dialog (see Figure 71)
that lets you select Session defaults, Component Instance defaults and
Tracing defaults for the Connexis Viewer (see Table 16, Preference
dialog settings, on page 160).
Figure 71 Preferences dialog
.
Chapter 7 Using the Connexis Viewer
160 User Guide - Rational Rose RealTime Connexis
Table 16 Preference dialog settings
Option Description
Check for duplicate
CUIDs
Checking this field lets Connexis identify, on
startup, any duplicate CUIDs in a model. This
occurs if you have the same logical CUID value
(specified using the 'CNXui' parameter) for
components that are being deployed on different
configurations.
Connect to target
agents on load
Checking this box lets all new Component
Instances connect to target agents.
Auto-expand Tree Checking this box lets all new Component
Instances function with the Auto-expand tree
feature.
Connection Timeout Typing the number of seconds in this field sets
the timeout period for all new Component
Instances.
Refresh Mode Refresh Mode lets you select the way component
instances are refreshed (Auto, Manual or Timed).
For the Viewer to refresh component instances
automatically, select Auto from the list. Select
Manual if you want to refresh the component
instance manually or select Timed and set your
desired refresh period in seconds.
Trace Limit Setting the value of this field determines the
initial size of the tracing buffer. This specifies the
number of trace events stored for all trace
windows, including Component Instances, Ports
and Circuit traces.
Circuit Trace Level Selecting the level from this list determines the
initial setting (Disabled, Activity, Signal or Signal
and Data) for Port and Circuit tracing. When you
open a trace window onto a Publisher, Subscriber
or Circuit without performing a 'Define...,' the
default trace level is the one defined in this field.
Viewer Menus
User Guide - Rational Rose RealTime Connexis 161
Windows Menu
Tile
Selecting Window > Tile causes all non-iconified Trace windows to be
arranged in a format in which the trace windows do not overlap.
Cascade
Selecting Window > Cascade causes all non-iconified Trace windows to be
arranged in a 'stack' which allows the captions of each window to be
visible.
Trace Windows List
Selecting one of the entries in the Trace Windows List (the numbered
entries) causes that window to become the active Trace Window. The
window is brought to the top, and if it had been previously iconified, it
is restored to its normal state.
Help Menu
Contents
Selecting Help > Contents... launches the main help for Connexis and the
Viewer.
About Connexis Viewer
Selecting Help > About Connexis Viewer, displays the Viewers about dialog.
The about dialog contains information about the version of the
Connexis Viewer that is being used and also contains information
about how to contact Connexis support.
Chapter 7 Using the Connexis Viewer
162 User Guide - Rational Rose RealTime Connexis
Explorer Tree View
The primary way of configuring a Viewer session is through the tree
view. Most of the objects on the tree view have popup menus that allow
you to configure the object and to control the information that is
displayed for the object when the application is executing.
Figure 72 shows the tree view while the HelloWorld model is executing.
Every item in the tree view belongs to the session. The session contains
zero or more processors. Processors contain zero or more component
instances. Component instances contain zero or more named services.
Named services contain zero or more registered end ports and
registered end ports contain zero or more virtual circuit endpoints.
The processor and component instance information can be derived
directly from a Rose RealTime model. The Viewer captures the
information that is contained in the deployment view of the model that
was open when the Viewer was launched. Additionally, you can add
processors and component instances manually inside the Viewer. This
is useful if you also want to monitor Connexis-enabled Rose RealTime
executables that are not contained in the model from which the Viewer
was launched.
Figure 72 The Explorer tree view
Explorer Tree View
User Guide - Rational Rose RealTime Connexis 163
Processor Icons
Processors that have been added automatically by launching the
Viewer are illustrated using the same processor icon as is used in Rose
RealTime (see the ClientProcessor_VC60@127.0.0.1 processor in
Figure 72 and Table 17). Processors that are added manually in the
Viewer are illustrated using the processor icon with a downward
pointing arrow inside (see the Workstation1@127.0.0.1 processor in
Figure 72 and Table 17). Processors that are added manually will be
reloaded the next time the Viewer is opened from the same model.
Component Instance Icons
Component instances, that have been added automatically by
launching the Viewer, are illustrated using the same component
instance icon as is used in Rose RealTime (refer to the
Client_VC60Instance (10010) component instance in Figure 72).
Component instances that are added manually are illustrated using
the component instance icon with a downward pointing arrow inside
(refer to the TestComponentInstance (9999) component instance in
Figure 72). Component instances that are added manually will be
reloaded the next time the Viewer is opened from the same model.
Table 17 Processor icons
Icons Meaning
automatically-added processor
manually-added processor
Table 18 Component instance icons
Icons Meaning
automatically-added component instances
manually-added component instances
Chapter 7 Using the Connexis Viewer
164 User Guide - Rational Rose RealTime Connexis
Filter Icons
A Filter icon lets you add, select or remove a trace filter specification
from the Explorer tree view. Clicking the plus symbol to the left of the
Filter icon expands the tree and reveals the trace filter specifications
that are available for use. If there are no trace filter specifications
available, right-clicking the Filter icon lets you add a new trace filter
specification. (seeDefining a Trace Filter for a Component Instance on
page 182).
Figure 73 Filter Icon
Component Instance Status
Component instance status is indicated in the tree view by varying the
gear icon shown in Figure 74.
Figure 74 Gear icon
When a target agent connection is established, the tree refresh mode
(that is, manual, automatic, or timed) is reflected through the gear
spin. Feedback is summarized in Table 19.
When the Viewer has lost contact with the target (red), is manually
disconnected (gray), or is connecting (yellow), there is no feedback for
the refresh mode (since there is no active refresh in these states).
Table 19 Gear spin and status
Icon behavior Meaning
green, continuous spinning Automatic refresh mode
green, intermittent spinning Timed refresh mode
green, with no spin Manual refresh mode
Explorer Tree View
User Guide - Rational Rose RealTime Connexis 165
Named Services Icons
Named services appear in the tree view as folders (see Figure 75) that
are contained in component instances. Named services are identified
using the name that they were registered as with the DCS. Inside each
named service are zero or more registered end ports. The registered end
ports are referred to by the names that they were given in the Rose
RealTime model (this may or may not be the same as the name that
they were registered as), followed by the Rose RealTime model path to
the end port, the number of the end port instance, and the total
number of instances.
Figure 75 Named service icon
Port Icons
Publisher ports appear in the tree view with a red port icon beside them
(refer to the EnglishServer:greeting(1/1) port in Figure 72 and
Table 21). Subscriber ports appear with a yellow port icon if the port is
not bound, or a green port icon if the port is bound.
Table 20 Gear color and status
Icon appearance Meaning
No Gears The Target Agent has not been connected to this
component instance in this Viewer session.
Yellow Gears The user has requested a connection to the Target Agent
but the connection has not yet been established.
Green Gears The Target Agent is connected to the component
instance. If the component instance is in Auto Refresh
mode, the gears will be spinning. (See Table 19)
Red Gears The Viewer has determined that it has lost the
connection with the Target Agent. This is most likely an
indication that the component instance has stopped
running or is hung. The Viewer maintains the last
known state in the tree until the component instance is
Reset.
Gray Gears There is currently no connection established between the
component instance and the Target Agent.
Chapter 7 Using the Connexis Viewer
166 User Guide - Rational Rose RealTime Connexis
Virtual Circuit Icons
The last items that appear on the left hand side of the tree view are the
virtual circuits. Virtual circuits are contained inside of end port objects
in the tree view and appear with a green protocol icon beside them
(refer to (Client, 2) --> (Server1, 2) EnglishServer:greeting in Figure 72
and Figure 76).
Figure 76 Virtual circuit icon
Virtual circuits represent the Connexis connections that are currently
established in the running model as of the last time the Viewer was
refreshed. The information that is displayed in the tree view about a
virtual connection contains the following:
the unique identifier for the local component instance followed by
the virtual circuit ID for that side of the connection
the unique identifier for the remote component instance followed
by the virtual circuit ID for that side of the connection
the name and Rose RealTime model path of the end port on the
other side of the connection enclosed in quotation marks
The virtual circuit illustrates why it is important to specify the CNXui
command line option on your component instances. If usable
identifiers had not been used in this model, the Client and Server1
identifiers would have appeared as numbers that were generated by
Connexis.
Table 21 Port icons
Icons Meaning
Publisher port icon
Subscriber port icon
Explorer Tree View
User Guide - Rational Rose RealTime Connexis 167
This would have caused the information for the virtual circuit
contained in the EnglishServer:greeting (1/1) end port in Figure 72 to
be something similar to the following:
(76f95d83,2) --> (76f98e45,2) Client:greeting
This information is much more difficult to keep track of when you are
viewing an executing model.
Object Information Column
The Object Information column is on the right-hand side of the tree
view and is shown in Figure 77. It is used to display additional
information about each of the objects in the tree view.
Figure 77 The Object Information column
Table 22 explains what information is displayed in the Object
Information column for each object type.
Chapter 7 Using the Connexis Viewer
168 User Guide - Rational Rose RealTime Connexis
Popup Menus
Most operations in the Connexis Viewer are performed by selecting an
element and using the popup menu. Clicking the right mouse button
on an element in the Explorer Tree View enables you to perform
operations such as adding a processor or component instance, defining
trace parameters, opening a trace window, and so on.
Session Popup Menu
The session object in the tree view has a popup menu associated with
it. This menu is shown in Figure 78. The only option available from this
menu is to add a new processor to the session.
Table 22 Object Information description
Object type Information displayed
Processor Operating system and hardware architecture.
Component
Instance
Connexis Unique Identifier. This displays the string that
was specified using the CNXui command line option. If
the user did not specify an identifier, the Connexis-
generated identifier is not displayed until you connect to
that component instance. This field also displays the
locator configuration and status.
Named service Number of publishers and subscribers that are
currently registered, and in the case of publishers, the
sum of the replication factors of the named service for
the component instance.
Registered end
port
The Connexis Registration string that was used to
register the port.
Virtual circuit This field indicates which transport protocol is used to
establish the connection. This field also indicates the
type of connection that has been established by
Connexis.
Popup Menus
User Guide - Rational Rose RealTime Connexis 169
Figure 78 The session popup menu
Add Processor
The Add Processor command allows you to add a processor to the tree
view. See also Adding a Processor on page 175.
Processor Popup Menu
All processors in the tree view have a popup menu associated with
them as shown in Figure 79.
Figure 79 The processor popup menu
Open Specification
The Open Specification command allows you to modify a processors
properties. See also Changing the Properties of a Processor on
page 176.
Chapter 7 Using the Connexis Viewer
170 User Guide - Rational Rose RealTime Connexis
Remove
The Remove command allows you to remove a processor that you have
manually added to the model. This command appears grayed out if the
processor was read in from a Rose RealTime model.
Add Component Instance
The Add Component Instance command allows you to add a new component
instance to the tree view. See also Adding a Component Instance on
page 177.
Component Instance Popup Menu
The component instance popup menu is context-sensitive and is
shown in Figure 80. Slightly different options will appear in this menu
depending on the state of the component instance. Figure 80 shows
what is displayed if the menu is opened from a component instance
that was read in from a Rose RealTime model and where the Target
Agent has been started on the component during the active session.
Figure 80 The component instance popup menu
Popup Menus
User Guide - Rational Rose RealTime Connexis 171
Open Specification
The Open Specification command allows you to modify a component
instances properties. See also Changing the Properties of a
Component Instance on page 180.
Remove
The Remove command allows you to remove a component instance that
you have manually added to the model. This command appears grayed
out if the processor was read in from a Rose RealTime model.
Connect to Target Agent on load
The Connect to Target Agent on load command changes context depending
on the current Target State as summarized in Table 23.
Refresh
The Refresh command allows you to manually refresh the information
that is being displayed about the component instance and all of the
objects under it in the tree view. This option is available even if the
Timed or Auto refresh methods are selected for the component
instance. See also Changing the Properties of a Component Instance
on page 180.
Table 23 Connect to Target Agent
Target State Command text Action
Not Connected
(Gray gears)
Connect to Target
Agent
Attempts to connect to this
component instance's Target
Agent
Waiting for
Connection
(Yellow gears)
Cancel Target Agent
Connection
Cancels the attempt to connect
Connected
(Green gears)
Disconnect from
Target Agent
Disconnects from the Target
Agent
Disconnected
(Red gears)
Reset Target Agent
Connection
Clears the tree information and
returns to the Not Connected
Target state
Chapter 7 Using the Connexis Viewer
172 User Guide - Rational Rose RealTime Connexis
Apply Filter
The Apply Filter command lets you select a previously-defined trace filter
for a component instance. A popup menu appears, listing all available
filters.
Define Trace
The Define Trace command allows you to define trace settings for a
component instance. See also Defining a Trace Filter for a Component
Instance on page 182.
Open Trace Window
The command lets you open a trace window from
a component instance. Once the trace window appears, you can right-
click on the window to define or apply a trace filter to the component
instance (see Trace Window Popup Menu on page 196).
Open Metrics Window
The command opens a metrics window on the
component instance. The Viewer does not have to be connected to the
component instance, but the component instance must be running for
the metrics connection to work.
Reset Metrics
The command restarts the target metrics counter and
resets the collection and reporting of metrics from the selected
component instance. The component instance must be running for this
menu item to be available.
Popup Menus
User Guide - Rational Rose RealTime Connexis 173
Port Reference Popup Menu
The Port reference popup menu is shown in Figure 81.
Figure 81 The Port Reference popup menu
Define Trace
The Define Trace command allows you to define trace settings for a port
reference. See also Defining a Port Reference Trace on page 188.
Open Trace Window
The Open Trace Window command opens a trace window on the port
reference. This trace window uses the filters that were defined in the
Define Trace dialog.
Chapter 7 Using the Connexis Viewer
174 User Guide - Rational Rose RealTime Connexis
Virtual Circuit Popup Menu
The Virtual circuit popup menu is shown in Figure 82.
Figure 82 The virtual circuit popup menu
Show other end
The Show other end command allows you to highlight the virtual circuit
endpoint that is at the other end of the connection.
Define Trace
The Define Trace command allows you to define trace levels for a virtual
circuit. See also Defining a Virtual Circuit Trace on page 192.
Open Trace Window
The Open Trace Window menu item opens a trace window on the virtual
circuit. This trace window will use the filters that were defined in the
Define Trace dialog.
Creating Processors and Component Instances
User Guide - Rational Rose RealTime Connexis 175
Creating Processors and Component Instances
The Connexis Viewer lets you create processors and component
instances that are not part of the current model. This is useful when
you wish to perform traces on distributed systems that are composed
of several models. Using the Import command to import all information
from another model may be undesirable depending on the size and
complexity of the model. The ability to add processors and component
instances from another model allows you to:
see information for a single component instance in a complex
model without burdening your session with unnecessary
information
perform a trace when the model for the other component instances
is not available (for example, the model was developed off-site)
New processor and component instances are stored in.CVEInfo file.
Once defined, they will always appear when you open the model.
Adding a Processor
You can add a processor that is not part of the current model to the
tree view.
To add a processor:
1. Select New Session in the tree view.
2. Right-click and select Add Processor from the popup menu.
The dialog shown in Figure 83 appears.
Figure 83 Add Processor dialog
Chapter 7 Using the Connexis Viewer
176 User Guide - Rational Rose RealTime Connexis
3. Enter a processor name.
Note: Letters, numbers, and underscores are permitted in the name.
Spaces are prohibited.
4. Enter the IP address of the processor.
5. Enter the CPU type.
6. Enter the operating system.
7. Click the OK button.
If you need to modify a processors properties after you have created it,
see Changing the Properties of a Processor on page 176.
Changing the Properties of a Processor
The Connexis Viewer allows you to edit a processors properties after
you have created it.
To change a processors properties:
1. Select the processor.
2. Right-click and select Open Specification from the popup menu.
The dialog box shown in Figure 84 appears.
Figure 84 Processor Specification dialog
3. Edit the fields as desired.
4. Click the OK button.
Creating Processors and Component Instances
User Guide - Rational Rose RealTime Connexis 177
Removing a Processor
You can remove a processor that you manually added to the model
from the Connexis Viewer. Processors that have been read in from a
Rose RealTime model cannot be removed, and as a result, appear
grayed out on the menu.
To remove a processor:
1. Select the processor.
2. Right-click and select Remove from the popup menu.
Adding a Component Instance
You can add a component instance that is not part of the current model
to the tree view.
To add a component instance:
1. Select the processor to which you want to add a new component
instance.
2. Right-click and select Add Component Instance from the popup menu.
The dialog box shown in Figure 85 appears.
Chapter 7 Using the Connexis Viewer
178 User Guide - Rational Rose RealTime Connexis
Figure 85 Add Component Instance dialog
3. Enter a name for the component instance.
Note: Letters, numbers, and underscores are permitted in the name.
Spaces are prohibited.
4. Enter the CNX endpoint (CNXep). This must be a valid Connexis
endpoint. Specifying just a port number translates into the
endpoint cdm://<IPAddr>:portnumber where <IPAddr> is obtained
from the processor containing this component instance.
5. Enter the CNXui field if you created the component instance
manually.
Note: You cannot edit this field if the component instance was read
in from a Rose RealTime model.
6. Click to enable Connect to Target Agent on load.
When this option is enabled, the Viewer:
Creating Processors and Component Instances
User Guide - Rational Rose RealTime Connexis 179
attempts to connect to the component instances target agent on
startup
automatically attempts to reconnect to a Target Agent when it
becomes 'Disconnected' (that is, unexpectedly loses its
connection). This is useful in situations such as when the target
is reset, rerun, or the communication link between the target
and the Viewer is broken and re-established. All component
instance trace filters established before the reset are
maintained.
If this option is not selected, the Target Agent must be started
manually.
7. Click to enable Auto expand tree.
When this option is enabled, the tree view is automatically
expanded to show new objects underneath the component instance
such as named services, publishers and subscribers, and
connections.
8. Enter a Connection timeout value in seconds.
This is the amount of time that the Viewer will wait for a reply from
the target agent before it assumes the connection has been
terminated. This value is used in two situations:
When the Viewer attempts to attach to a target agent, the value
in the connection timeout field is used to decide how long the
Viewer waits for the target agent to handshake with the Viewer.
If the handshake is not received within the specified interval,
the target agent must be reset and another connection attempt
must be initiated. A value of 0 indicates that the Viewer should
wait forever.
After the connection has been established (during normal
communication), the value in the connection timeout field is
used to determine how long the Viewer should wait for a
response from the target agent. Once a request for information
is sent by the Viewer to the target agent, the target agent is
expected to reply within the time specified in the connection
timeout field. The target agent is given three attempts to
respond within this interval. If it does not, the Viewer sends it a
status query. If no response is received for the status query
within the connection timeout period, the connection is
assumed to have timed out and the target agent must be reset
and reconnected. If the connection timeout is set to 0, the
default connection timeout period of 30 seconds is used.
Chapter 7 Using the Connexis Viewer
180 User Guide - Rational Rose RealTime Connexis
9. Choose a Refresh mode from the drop-down list:
Manual - All refreshes of the data that is displayed in the tree
view must be done by selecting Refresh from the component
instances popup menu.
Auto - Refreshes the model in real-time. This causes the Viewer
to refresh the display whenever a modification causes the
information that is displayed in the Viewer to change. This
operation may not be desirable for highly active models since a
constantly-changing model will cause the tree display to
fluctuate as it attempts to keep up-to-date.
Timed - If this option is selected, the refresh will occur every n
seconds where n is the value entered in the seconds field.
10. Enter the rate (milliseconds) at which you want metrics data to be
reported to the Viewer, in the Preferred Rate text box.
If the rate you request is more frequent than the rate at which the
component instance audits its circuits, the rate you request will
not be supported by the component instance. In such a case,
metrics uses the auditing rate of the component instance.
For example, if the component instance "Client" uses the default
audit period of 250 ms, and you set the Preferred Rate to 100 ms,
metrics will be reported at an audit period of 250 ms.
Changing the Properties of a Component Instance
The Connexis Viewer lets you edit a component instances properties
after you have created it.
To change a component instances properties:
1. Select the component instance you wish to modify.
2. Right-click and select Open Specification.
The dialog box shown in Figure 86 appears.
Creating Processors and Component Instances
User Guide - Rational Rose RealTime Connexis 181
Figure 86 Component Instance Properties dialog
3. Edit the fields as desired.
Note: You cannot edit the CNXep field if the component instance was
read in from a Rose RealTime model. You can only edit this field if the
component instance was created manually.
4. Click the OK button.
Chapter 7 Using the Connexis Viewer
182 User Guide - Rational Rose RealTime Connexis
Performing Event Tracing
The Connexis Viewer lets you perform event tracing on component
instances, port references and virtual circuits.
The options available vary depending on the type of element selected
for tracing and are described in detail in the following sections:
Defining a Trace Filter for a Component Instance
Defining a Port Reference Trace
Defining a Virtual Circuit Trace
Defining a Trace Filter for a Component Instance
Trace filters let you trace messages and event types from a distributed
model. You can define a trace filter from a Component Instance icon or
a Filter icon. Right-clicking either icon lets you access a dialog box that
allows you to set the filter levels for different trace groups and trace
types.
The component instance trace levels that are available for the trace
groups and trace types are:
Disabled - no tracing for the group/type
Basic - events that are related to the static operation of a group or
type. This includes start-up events, connect events and shutdown
events
Operational - events that are related to the dynamic behavior of a
group. This is the trace level that is used to trace data transport
Advanced - enables all tracing for a group. This is typically very
detailed and includes all events from the other trace levels as well
as audit information
Note: When setting the trace levels for the different types and groups,
keep in mind that the more tracing being performed, the more data is
being sent to the Viewer. This can have a negative impact on the
performance of the executing model.
To define a trace filter from a Component Instance icon:
1. Right-click the Component Instance icon that you want to trace.
2. Select Define Trace from the popup menu.
The Set Component Instance Trace Levels dialog appears.
Performing Event Tracing
User Guide - Rational Rose RealTime Connexis 183
Figure 87 Set Component Instance Traces Levels dialog
3. Define the trace filter according to your requirements (see
Table 24, Table 25 and Table 26, for an explanation of the trace
filter options).
4. Type the number of events that you want written to the trace buffer
in the text field.
5. Click to trace the component instance.
6. Click to save your trace options. This is only necessary if
you want to reuse the same trace filter that you have created.
Chapter 7 Using the Connexis Viewer
184 User Guide - Rational Rose RealTime Connexis
To define a trace filter from the Filter icon:
1. Right-click the Filter icon from the Explorer tree view.
2. Select Add Filter.
The Filter Spec Sheet dialog appears.
Figure 88 Filter Spec Sheet dialog
3. Type a descriptive name to identify the filter in the Filter text box.
4. Define the trace filter according to your requirements (see
Table 24, Table 25 and Table 26, for an explanation of the trace
filter options).
5. Click to implement your changes and close the dialog.
Performing Event Tracing
User Guide - Rational Rose RealTime Connexis 185
Setting trace filters
The Set Component Instance Trace Levels dialog and the Filter Spec
Sheet dialog contain the trace groups and trace types that let you set
your define your trace filter. Trace groups refer to a functional area
where messages can be traced in the distributed model and trace types
refer to event types that can be traced. The settings for the trace groups
and trace types determine what messages are traced in the executing
model.
When connecting to target agents in the minimal configuration, only
error and warning type events for all trace groups are available. A
description of how to configure the following trace groups is explained
in Table 24, Table 25 and Table 26:
DCS Trace Options
Audit Trace Options
Protocol Messages Trace Options
Chapter 7 Using the Connexis Viewer
186 User Guide - Rational Rose RealTime Connexis
Table 24 DCS Trace Options
DCS Tracing Filters Trace Options
Controller Basic
Controller initialization status
Basic Errors: Failure to initialize the DCS
components (for example, transporter)
Operational
Subscriber and publisher registration
Binding and unbinding of end ports
Connection establishment progress
Local binding indication
Transport failure and recovery indications
Operational Warnings: Registration failures due to
configuration (for example, global registration with
no locator configured)
Operational Errors: Subscriber and publisher
registration errors and failures
Advanced
End port proxy creation and removal
Auditing of end port proxies
Viewer/Target Agent service and connection
information queries
Transporter Basic
Encoder/decoder mismatch between transport
end points
Data type lookup error
Basic Warnings:
Local/remote virtual circuit mismatches
Unknown control messages
Basic Errors:
Encode/decode errors
Unknown control messages
Performing Event Tracing
User Guide - Rational Rose RealTime Connexis 187
Operational
Connection establishment and teardown
Advanced
An indication that a message was sent over the
wire and the message size in bytes
Locator Basic
Locator configuration (as primary or basic)
Basic Errors:
Encode/decode errors
Operational
Service publish and subscribe events
Service registration and binding status
Operational Errors:
Encode/decode errors
Advanced
Primary and backup locator election process
DCS Configuration Basic
Used to indicate that user configuration settings
have been overridden
Operational
Displays the same information as basic
Advanced
Displays the same information as basic
Datagram Messaging There are currently no trace events defined for
Datagram Messaging.
Table 24 DCS Trace Options
DCS Tracing Filters Trace Options
Chapter 7 Using the Connexis Viewer
188 User Guide - Rational Rose RealTime Connexis
Defining a Port Reference Trace
When performing a trace on a port reference, you can specify where the
messages are traced, set the trace level, and set the buffer size. You can
also refine your trace to use only selected component instances
(identified by the CNXui). This is useful when you want to focus your
trace on a particular component instance that may be experiencing
errors (for example, an encode/decode error).
Table 25 Audit Trace Options
Audit Trace Filters Trace Options
Controller Audit Basic
None
Operational
Circuit audit status
Circuit audit timeouts
Unbinding of publishers or subscribers as a
result of a circuit audit
Advanced
Displays same information as Operational
Transporter Audit Basic
None
Operational
Transport endpoint failure recovery
Advanced
Audit messages
Locator Audit There are currently no trace events defined for
Locator Audits.
Target Agent Basic
None
Operational
Viewer Operations
Advanced
Trace filter configuration operations
Performing Event Tracing
User Guide - Rational Rose RealTime Connexis 189
To define a port reference trace:
1. Select the port reference you wish to trace.
2. Right-click and select Define Trace from the popup menu.
The dialog box shown in Figure 89 appears.
Table 26 Protocol Messages Trace Options
Protocol Messages
Trace option
Trace Options
User Data In/Out Basic
Enables component instance wide tracing of all
circuit data that is injected into the model or
sent by the model. User Data In trace events are
collected after the users data has been decoded.
User Data Out trace events are collected before
the user's data has been encoded.
Operational
Displays same information as basic
Advanced
Displays same information as basic
Network Data In/Out Basic
Enables component instance wide tracing of all
circuit data that is received from or sent to the
network. Network Data In trace events are
collected before the data from a user is decoded.
Network Data Out trace events are collected
after the data of a user is encoded.
Operational
Displays same information as basic
Advanced
Displays same information as basic
Chapter 7 Using the Connexis Viewer
190 User Guide - Rational Rose RealTime Connexis
Figure 89 Define Trace Dialog (Port reference)
3. Configure the trace reference settings according to Table 27.
Table 27 Trace location settings
Option Description
User data in Causes the tracing of incoming messages to occur after
the message data has been decoded.
Performing Event Tracing
User Guide - Rational Rose RealTime Connexis 191
Figure 90 shows what reference point is used for each of the four
options. If you encounter problems that you think may have been
caused by encoding or decoding, you can use tracing on user and
network data to ensure their accuracy.
Figure 90 User and Network data designations
Any combination of these checkboxes can be selected. Selecting all four
causes the messages to be traced before and after encoding for
outgoing messages, and before and after decoding for incoming
messages.
4. Configure the Trace Level setting according to Table 28.
5. Enter a number to specify the number of events that can be written
to the trace buffer in the Trace buffer size field.
6. Click the Trace Active box to apply the filter settings when you click
Apply or OK.
7. Click the Open Trace Window to open a trace window for this port
reference.
User data out Causes the tracing of outgoing messages to occur before
the message data has been encoded.
Network data in Causes the tracing of incoming messages to occur
before the message data has been decoded.
Network data out Causes the tracing of outgoing messages to occur after
the message data has been encoded.
Table 27 Trace location settings
Option Description
Chapter 7 Using the Connexis Viewer
192 User Guide - Rational Rose RealTime Connexis
8. Click the Filter Trace by Remote CNXui box if you want to specify the
remote component instances to be included in the trace. In the list
box, click on each component instance you wish to include.
Note: When disabled, trace data is gathered for all remote
component instances.
9. Click the OK button.
Defining a Virtual Circuit Trace
When performing a trace on a virtual circuit, you can specify where the
messages are traced, set the trace level, and the buffer size.
To define a virtual circuit trace:
1. Select the virtual circuit you wish to trace.
2. Right-click and select Define Trace from the popup menu.
The dialog box shown in Figure 91 appears.
Table 28 Trace location settings
Option Description
Disabled No tracing will be performed.
Activity Only traces that messages are being sent. The trace
event indicates both the local virtual circuit identifier
and the remote virtual circuit identifier but the actual
signal and message data are not traced.
Signal Only the message signal will be traced.
Signal and data Both the message signal and the message data will be
traced.
Performing Event Tracing
User Guide - Rational Rose RealTime Connexis 193
Figure 91 Define Trace Dialog (Virtual circuit)
3. Configure the trace reference settings according to Table 29.
For information on these trace reference points, refer to Figure 90.
Any combination of these checkboxes can be selected. Selecting all
four causes the messages to be traced before and after encoding for
outgoing messages, and before and after decoding for incoming
messages.
4. Configure the Trace Level setting according to Table 28.
5. Enter a number to specify the number of events that can be written
to the trace buffer in the Trace buffer size field.
Table 29 Trace location settings
Option Description
User data in Causes the tracing of incoming messages to occur after
the message data has been decoded.
User data out Causes the tracing of outgoing messages to occur before
the message data has been encoded.
Network data in Causes the tracing of incoming messages to occur
before the message data has been decoded.
Network data out Causes the tracing of outgoing messages to occur after
the message data has been encoded.
Chapter 7 Using the Connexis Viewer
194 User Guide - Rational Rose RealTime Connexis
6. Click the Trace Active box apply to the filter settings when you click
Apply or OK.
7. Click the Open Trace Window to open a trace window for this virtual
circuit.
8. Click the OK button.
Trace Window
The Trace window presents trace events formatted into columns. The
Trace Window automatically scrolls to show new trace events as they
arrive unless the scroll bar is not at the bottom. To pause scrolling,
click anywhere in the scroll region but the bottom. To resume scrolling,
drag the scroll bar to the bottom of the scroll region.
There are two types of trace windows available in the Connexis Viewer:
Component instance trace windows.
Virtual circuit trace windows.
Both types of trace windows provide the same function. They differ in
the type of information that is displayed in them.
Component Instance Trace Window
The component instance trace window is shown in Figure 92. It
contains four fields of information:
Time - contains a timestamp of when the message was traced.
Event - this is the trace type for this trace event.
Table 30 Trace location settings
Option Description
Disabled No tracing will be performed.
Activity Only traces that messages are being sent. The trace
event indicates both the local virtual circuit identifier
and the remote virtual circuit identifier but the actual
signal and message data are not traced.
Signal Only the message signal will be traced.
Signal and data Both the message signal and the message data will be
traced.
Trace Window
User Guide - Rational Rose RealTime Connexis 195
Level - this is the level of the trace message.
Data - this field contains the data that is associated with the trace.
Figure 92 The component instance trace window
Virtual Circuit Trace Window
The virtual circuit trace window is shown in Figure 93. It contains
seven fields of information:
Time - contains a timestamp of when the message was traced
Local Path - contains the Rose RealTime model path for the local
side of the virtual circuit
<-> - contains either a --> or a <-- symbol, indicating the direction
in which the message was sent
Remote Path - contains the Rose RealTime model path for the far
side of the virtual circuit if the Target Agent is running at the far
end; otherwise, the CNXui and the VCID are displayed
Priority - corresponds to the message priority
Signal - contains the message signal name if the Signal or Signal and
data trace level is specified
Data - contains the message data if the Signal and data trace level is
specified
Chapter 7 Using the Connexis Viewer
196 User Guide - Rational Rose RealTime Connexis
Figure 93 The virtual circuit trace window
Trace Window Popup Menu
The Trace window has a popup menu associated with it as shown in
Figure 94.
Trace Window
User Guide - Rational Rose RealTime Connexis 197
Figure 94 Trace window popup menu
Show trace data
This opens a trace data window onto the trace data field of the selected
event. The format of this window depends on whether the trace event
is a network or user-side trace event. Figure 95 shows an example of
the Trace Data window for ASCII data. Figure 96 shows an example of
the Trace Data window for binary (network) data.
Chapter 7 Using the Connexis Viewer
198 User Guide - Rational Rose RealTime Connexis
Figure 95 The Trace Data Window with ASCII data
Figure 96 The Trace Data Window with binary data
Trace Window
User Guide - Rational Rose RealTime Connexis 199
Define trace
Selecting the Define Trace command opens the Define Trace Levels dialog
box. The content of this dialog box varies depending on the object being
traced. Table 31 lists the types of traces that can be performed in
Connexis and references the figures that display the Define Trace
options.
Trace active
The Trace Active command toggles on and off and is used to select
whether the Trace Data window should capture any new trace events.
If an inactive trace is set to active, it will reuse the values that were set
in the Define Trace dialog box.
Select in tree
Selecting the Select in Tree command causes the object being traced to
become active in the Explorer Tree View.
Clear
Selecting the Clear command clears the contents of the trace window.
Save trace
Selecting the Save Trace command brings up a Save As dialog which
allows you to save the current contents of the Trace window to a file.
There are two available 'formats' of trace output available. They are:
Comma Delimited Trace (.cdTrace) which produces a simple
comma delimited line for each trace event
Formatted Trace (.fmtTrace) which produces a (tag : value) multi-
line output for each trace event
Table 31 Types of Traces
Trace Type Figure
Component instance Figure 87, Set Component Instance
Traces Levels dialog, on page 183
Port reference Figure 89, Define Trace Dialog (Port
reference), on page 190
Virtual circuit Figure 91, Define Trace Dialog (Virtual
circuit), on page 193
Chapter 7 Using the Connexis Viewer
200 User Guide - Rational Rose RealTime Connexis
Figure 97 shows a sample trace output for a virtual circuit. The top
portion shows the information when Comma Delimited is selected. The
bottom portion shows an example of the output when the Formatted
Trace option is selected.
Figure 97 Sample component trace output - Comma Delimited and
Formatted Record
Trace Window
User Guide - Rational Rose RealTime Connexis 201
Trace Header Context Menu
There are times when it is desirable to define a custom layout for the
Trace Window columns. Connexis Viewer allows you to perform these
operations through a context menu that appears when you right-click
on the header control (see Figure 98) of a Trace Window.
When a new Trace Window is opened, it uses the current system
default information to determine the layout of the columns and the size
of the window. If you change the layout of an open Trace Window, this
information is saved and used the next time that the window is opened.
Figure 98 Trace Header Context menu
Selecting the Restore to default entry causes the Trace Window to revert
to the current default layout.
Selecting the Set as default causes the Trace Window's current layout to
become the new 'default' layout. Note that this will not affect windows
that are already open but will cause all newly-opened trace windows to
use this layout (unless they have been previously opened and modified
by the user).
Selecting the Hide column will cause the column the cursor is on to
become hidden (for example, in the image above, the Remote Path
column would become hidden. Note that you cannot hide the Data
column.
At the end of the menu, any currently hidden columns show up in the
format Show <column name> Column. Selecting one of these entries
will cause the (previously hidden) column to become visible again. The
column will re-appear at its previously defined width.
Chapter 7 Using the Connexis Viewer
202 User Guide - Rational Rose RealTime Connexis
Generating Interaction Diagrams from Trace Output Files
With Connexis, you can create interaction diagrams from trace output
files, generated from traces on a port reference or a virtual circuit. The
trace output files can be imported into a Rose RealTime model and
rendered into collaboration and sequence diagrams.
Before you generate interaction diagrams, use the Connexis Viewer to
perform an event trace on a port reference (see Defining a Port
Reference Trace on page 188) or a virtual circuit (see Defining a
Virtual Circuit Trace on page 192) and save the trace output to a file
(see Save trace on page 199).
To generate interaction diagrams:
1. Perform an event trace on a port reference or on a virtual circuit.
Ensure that the trace level is set to Signal or Signal and data.
2. Save the event trace information to file. The trace file can be
formatted or comma-delimited.
3. From the tree browser of the Rose RealTime application, right-click
the folder in which you want to save the collaboration and
sequence diagrams that will be generated.
Generating Interaction Diagrams from Trace Output Files
User Guide - Rational Rose RealTime Connexis 203
Figure 99 Tree browser in Rose RealTime
4. Click Import Connexis Viewer Trace.
The Import Interaction Diagram dialog appears.
Chapter 7 Using the Connexis Viewer
204 User Guide - Rational Rose RealTime Connexis
Figure 100 Import Interaction Diagrams dialog
5. Complete the Import Interaction Diagrams dialog according to the
following table:
Table 32 Description of Import Interaction Diagrams dialog
Option Description
Trace file name Browse for the trace file that you stored.
This is the file that you will use to
generate your collaboration and
sequence diagrams.
Collaboration diagram
name
Type or select the name of the
collaboration diagram that you want to
generate.
Generate sequence
diagram
If you want to generate a sequence
diagram, ensure that this check box is
checked.
Sequence diagram name Type the name of the sequence diagram
that you want to create.
Generating Interaction Diagrams from Trace Output Files
User Guide - Rational Rose RealTime Connexis 205
6. Click the Import button.
The collaboration diagram and the sequence diagram (if enabled)
are generated. Once the generation process is complete, the
diagrams appear in the display area of Rose RealTime.
Note: If an error message occurs, see Reporting of error messages for
a detailed description of the message.
Maximum number of
trace events to
Type the maximum number of trace
events that you want represented in your
sequence diagrams. A maximum number
of 256 can be selected.
Include location tagged
values as notes
If you want to include location tagged
values as notes on the collaboration
diagram, ensure that this check box is
selected.
Include service name as
association role stereotype
If you want to include the service name
that was used to establish the binding as
the association roles stereotype, ensure
that this check box is checked.
Table 32 Description of Import Interaction Diagrams dialog
Option Description
Chapter 7 Using the Connexis Viewer
206 User Guide - Rational Rose RealTime Connexis
Reporting of error messages
While generating interaction diagrams, you may receive an error
message that provides feedback about the process. The following chart
lists and explains the error messages:
Log Window
The log window displays the status of the connections in the executing
model.
Each message is preceded by a timestamp in square brackets. This
timestamp indicates the time that the message was received by the
Viewer. Icons indicate the type of message as summarized in Table 33.
A sample log window output is shown in Figure 101.
Error Message Description
Unknown file format The file specified in the Trace file name
text field is not an acceptable file format.
Acceptable file formats are .cdTrace
(comma delimited) or .fmtTrace
(formatted). The file formats with the
.cdTrace and the .fmtTrace extensions,
identify the type of trace file to be
processed.
Unable to process trace
file because it is
incompatible with the
current version of the
toolset add-in
The imported trace file has been
generated by an earlier version of the
Rational Connexis Viewer. The file format
is incompatible with the format accepted
by the toolset add-in. Import trace files
must be generated by Rational Connexis
version 2001A.04.00 or newer.
Invalid file format The user has modified the file or an error
occurred while the Connexis Viewer was
attempting to write the file.
Cannot process more than
256 trace events
An attempt has been made to configure
the tool to import more trace events than
the feature can support.
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 207
Figure 101 The log window
Displaying the Metrics Collection
Metrics is a Connexis Viewer function that lets you start, display and
save statistics collected on a component instance. Once metrics
gathering is enabled on a Connexis library, statistics are collected on
internal run-time operations and registered transports, active in the
model.
A Connexis library that is enabled to gather metrics, collects statistics
on its internal run-time operations and on any registered transport
that are active in the model.
Internal run-time operations include:
Creating and auditing circuits
Encoding and decoding messages
Publishing and subscribing to services
Transport statistics include:
Totals on the number and the size of message sent and received
Minimum and maximum sizes of the message payloads
Number of messages sent with and without data
Breakdown of application-level versus control message sent
Table 33 Log window icons
Icons Meaning
normal messages
warning messages
error messages
Chapter 7 Using the Connexis Viewer
208 User Guide - Rational Rose RealTime Connexis
Note: All transports supplied with Connexis reports these statistics.
Transports built using the Transport Integration Framework must use
the API supplied by Connexis to gather transport-specific statistics at
run-time. For a complete discussion of this topic, see Using the
Transport Integration Framework on page 299.
Starting Metrics Collection
Metrics gathering is designed to have the smallest possible impact on
performance. The Viewer connects to the component instance and
request statistics on a running model that has metrics enabled in the
DCS library, and the CDM transport registered.
When the Viewer connects to the component instance, it sends a
request to start gathering metrics and requests a reporting rate (see
Adding a Component Instance on page 177). The component instance
tells the Viewer what reporting rate it supports, describes the
registered transports, and reports statistics at the appropriate interval.
To collect metrics on a component instance:
1. Right-click the component instance on which you want to collect
statistics. A popup window appears.
2. Select from the list. The Metrics window
appears with the name of the component instance in the title bar.
3. Select the tab containing the information that you require (see
Using the Metrics Window on page 208).
Using the Metrics Window
The Metrics window displays statistics collected on the internal run-
time operations and registered transports of a component instance.
You can access metrics information from the following window tabs.
Table 34 Metrics Window tabs
Metrics window tabs Description
Summary Summary metrics collection on
page 210
Detailed Detailed metrics collection on page 214
Messages Messages metrics collection on
page 216
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 209
Audits Stopping Metrics Collection on page 234
Engineering DCS errors metrics collection on
page 225
DCS Errors DCS errors metrics collection on
page 225
App Errors Application errors metrics collection on
page 228
App Incompatibility Application incompatibility metrics
collection on page 232
Table 34 Metrics Window tabs
Metrics window tabs Description
Chapter 7 Using the Connexis Viewer
210 User Guide - Rational Rose RealTime Connexis
Summary metrics collection
Figure 102 Metrics Window: Summary Information
Table 35 Subscriptions/Publications
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 211
Defining Messages/Sec and Bytes/Sec
From the Summary page of the Metrics dialog, you can set the way
strip chart information is displayed in the Messages/Sec and the
Bytes/Sec area. The Messages/Sec area displays the number of
messages sent from the component instance per second. The
Bytes/Sec area displays the number of bytes sent from the component
instance per second.
Message Type Description
Number of Subscriptions The total number of subscriptions that
have been registered locally, registered
explicitly, registered globally through the
locator, and the number of remote
subscriptions that have been registered to
publications in the Component Instance.
Number of Publications The total number of local and global
publications registrations.
Number of Remote
Subscriptions
The number of registrations from remote
subscriptions.
Table 36 Messages
Message Type Description
Messages Sent Successfully sent user application
messages with signal and data, including
message data. These messages require a
buffer to be send.
Messages Received User application messages with signal
and data received. These messages may
or may not be passed to the application
successfully and the application was
unable to decode the message.
Bytes Sent Total number of bytes sent on the
transport. Includes audit, control and
user messages.
Bytes Received Total number of bytes received on the
transport. Includes audit, control and
user messages.
Chapter 7 Using the Connexis Viewer
212 User Guide - Rational Rose RealTime Connexis
To change the way chart settings are presented:
1. Click the button in the Messages/Sec or the Bytes/Sec area.
The Strip Chart Settings dialog appears.
Figure 103 Strip Chart Settings dialog
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 213
Table 37 Strip Chart Settings
Settings Description
Compute Scale Clicking analyses the
strip chart and determines the
minimum and the maximum values.
Note: To manually set the Compute Scale
values without have them overridden, set
to zero.
Min Auto-scale Transport Lets you set the transport that you want
the strip chart to use for the minimum
auto-scale value. Before setting the
minimum auto-scale value, select the
transport from the selection
area.
Max Auto-scale
Transport
Lets you set the transport that you want
the strip chart to use for the maximum
auto-scale value. Before setting the
maximum auto-scale value, select the
transport from the selection
area.
Auto-scale every This sets the number of samples
received from the transport before the
script chart calculates the result and
presents the information.
Using the previous values This sets the number of previous values
that the strip chart uses to calculate the
result.
Transports This area displays the transports
available for use.
Chapter 7 Using the Connexis Viewer
214 User Guide - Rational Rose RealTime Connexis
Detailed metrics collection
Figure 104 Metrics Window: Detailed Information
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 215
Table 38 Publications/Subscriptions
Message Type Description
Number of Publications Total number of Publications.
Number of Global
Publications
Total number of global SPP registrations.
Number of Local
Publications
Total number of local SPP registrations.
Number of Subscriptions Total number of Subscriptions.
Number of Explicit
Subscriptions
Total number of explicit SAP
registrations.
Number of Global
Subscriptions
Total number of global SAP registrations.
Number of Local
Subscriptions
Total number of local SAP registrations.
Table 39 Connections/Bindings
Message Type Description
DCS Controller Bindings Total number of SAP/SPP bindings.
DCS Transport reported
Bindings
Number of ports successfully bound. This
includes both SAP and SPP ports. This
count may include duplicate binds if the
underlying transport is lost and control
messages have to be resent.
Table 40 Transporter
Message Type Description
Successful Endpoint
Bindings
Number of successful transport binds.
Failed Endpoint Bindings Number of transport bind failures.
Successful Endpoint
Resolves
Number of addresses resolved
successfully.
Failed Endpoint Resolves Number of address resolve failures.
Chapter 7 Using the Connexis Viewer
216 User Guide - Rational Rose RealTime Connexis
Messages metrics collection
Figure 105 Metrics Window: Messages
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 217
Table 41 Messages
Message Type Description
Messages Sent Connect, register registered, etc.
Messages Received Connect, register registered, etc.
Application Messages
Sent
The total number of message sent by the
application. This count includes those
messages sent with data and with signal
only.
Application Messages
Received
The total number of message received by
the application. This count includes those
messages received with data and with
signal only.
Audit Messages Sent Are You Alive, I Am Alive and You Are Not
Responsive messages sent.
Audit Messages Received Are You Alive, I Am Alive and You Are Not
Responsive messages received.
Control Messages Sent Connect, register registered, etc.
Control Messages
Received
Connect, register registered, etc.
Signal Only Messages
Sent
User application messages consisting
only of a successfully sent signal.
Signal Only Messages
Received
User application messages consisting
only of a signal that was received. These
messages may or may not be passed to
the application successfully (for example,
incompatible with protocol).
Messages with Data Sent Successfully sent user application
messages with signal and data, including
message data. These messages require a
buffer to be send.
Messages with Data
Received
User application messages with signal
and data received. These messages may
or may not be passed to the application
successfully and the application was
unable to decode the message.
Chapter 7 Using the Connexis Viewer
218 User Guide - Rational Rose RealTime Connexis
Maximum Data Size Sent Size of the largest encoded data object
successfully sent. This information in
conjunction with EncodeExceedsMaxSize
helps you engineer the size of the larger
buffers in the buffer pool.
Maximum Data Size
Received
Size of the largest encoded data object
received.
Minimum Data Size Sent Size of the smallest encoded data object
successfully sent. This helps you engineer
what is the size of the smaller buffers
needed in the buffer pool. It also helps
you decide setting of CNXtfms.
Minimum Data Size
Received
Size of the smallest encoded data object
successfully received.
Table 41 Messages
Message Type Description
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 219
Audits metrics collection
Figure 106 Metrics Window: Audits Information
Chapter 7 Using the Connexis Viewer
220 User Guide - Rational Rose RealTime Connexis
Table 42 Circuits
Message Type Description
Virtual Circuit Audits
Sent
Total number of virtual circuit audits
sent.
Virtual Circuit Audits
Received
Total number of virtual circuit audits
received.
Virtual Circuit Audit
Failures
Total number of virtual circuits removed
due to unacknowledged audits.
Circuit Errors Detected by
Audit
Total number of invalid virtual circuits
removed due to audits.
Table 43 Messages
Message Type Description
Out of Service (Audit
Failure)
Number of times an endpoint went out of
service (CDM did not get IAA responses).
In Service (Audit Failure) Number of times an endpoint went back
into service after an Audit unresponsive
failure.
Audit Resets Detected Number of times an endpoint went out of
service and then back into service after
detecting that the other side has gone
away and come back. Applies to CDM
only.
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 221
Engineering metrics collection
Figure 107 Metrics Window: Engineering Information
Chapter 7 Using the Connexis Viewer
222 User Guide - Rational Rose RealTime Connexis
Table 44 Subscription/Publications
Message Type Description
No Ports Published for
Service
Number of times SAPs could not bind to
an SPP because no SPP was registered for
that service.
Publications over
Subscribed
Number of times SAPs could not bind to
an SPP because the SPPs were all fully
bound.
Table 45 Retransmissions
Message Type Description
Connection Attempt
Timeout
Total number of virtual circuit
establishment retries.
Global Subscription
Attempt Timeout
Total number of global SAP locator
registration retries.
Global Publication
Attempt Timeout
Total number of global SPP locator
registration retries.
Rejected Connection
Requests
The number of times retrying a connect
request resulted in more than one virtual
circuit being setup. The ConnectSuccess
received is rejected, allowing the other
side to terminate the additional circuit.
Table 46 Circuit Binding Failures
Message Type Description
Insufficient Virtual
Circuits (Local)
Total number of times a SAP failed to
register because a free virtual circuit was
not available on the client-side of a
connection.
Insufficient Virtual
Circuits (Remote)
Total number of times a SAP failed to
register because a free virtual circuit was
not available on the server-side of a
connection.
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 223
Table 47 Parameters Exceeded
Message Type Description
Encoding Exceeds Buffer
Size
Number of times encoding an outgoing
message failed. This occurs because a
large enough buffer is not available. If any
overridden encode function on one of the
classes that describes the type being sent
(i.e. attribute classes) returns 0, this
results in a failure as well. Message is not
sent.
Encode Buffer
Unavailable
Number of times a buffer, of a suitable
size to encode the message, was
unavailable. All messages are encoded to
a buffer before sending. This error may
occur if the message is very large and
there is no buffer available that can
accept the payload. Blocking transports
such as CRM also use this pool to buffer
message sends while the transport is
busy. If the transport becomes
overloaded, message sends are buffered
until there are no further buffers in the
pool. Consider increasing the number of
buffers in the transport pool using the -
CNXtbp parameter. Message is not sent.
Chapter 7 Using the Connexis Viewer
224 User Guide - Rational Rose RealTime Connexis
CNXtoql Exceeded The number of times the output queue
limit is exceeded. Examine the CNXtoql
parameter setting. The setting needed
dependent on CNXtepql and the number
of endpoints in use and number of host
names being resolved (for CDM). If this
only occurs during connection
establishment and you also see the
Connections rejected later, increase the
retry delay. It could be due to retrying
connects before the hostname can be
resolved. If you have a highly replicated
non-published unwired port doing
automatic registration (i.e. a large
number of SAP registrations going on at
once), consider staggering the startup
load on the system. Message is not sent.
CNXtepql Exceeded The number of times the endpoint queue
limit is exceeded. Examine the CNXtepql
parameter setting. The setting needed is
dependent on the maximum number of
messages to be queued for an end point.
If you increase this, examine the CNXtoql
parameter setting as well. If this occurs
during connection establishment, see the
CNXtoqlExceeded description as well.
Message is not sent.
CNXtiql Exceeded The number of times the input queue
limit is exceeded. Examine the CNXtiql
parameter. It can be used to prevent
Connexis from being swamped. Message
is not received.
Table 47 Parameters Exceeded
Message Type Description
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 225
DCS errors metrics collection
Figure 108 Metrics Window: DCS Errors Information
Chapter 7 Using the Connexis Viewer
226 User Guide - Rational Rose RealTime Connexis
Table 48 Transport Errors
Message Type Description
Failed Write Attempts Number of times the send of a message
failed on the write (CDM failed on the
write). Message not sent.
Failed Endpoints Resolves Number of host name resolve failures.
Failed Endpoints Bindings Number of transport bind failures.
Transport Recoveries Number of times a transport is brought
back into service after an audit has failed.
Messages Dropped
(Transport OOS)
Number of queued messages sent to an
endpoint after the audit has determined
that it has gone out of service.
Transport Error Messages Number of times the controller sent the
transport error message.
Table 49 Connections/Bindings
Message Type Description
Unavailable Transports The number of times an attempt to use an
unavailable transport was made. Message
is not sent/received.
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 227
VC Mismatches Number of times the virtual circuit
information contained in a request does
not match the current virtual circuit
setup. Typically occurs during transport
failures or after user applications have
failed and restarted. The SAP or SPP that
was previously being communicated
which is no longer available (may be
participating in another connection or is
released). The Circuit Audit cleans up
these situations. Message not
sent/received.
Connect Failures Sent Number of ConnectFailure responses sent
in response to connect messages received.
No virtual circuit is established. The
reason for failing such a request is due to
no further virtual circuits being available.
Connect Failures Received Number of ConnectFailures received in
response to connect messages sent. A
virtual circuit could not be setup on the
other endpoint.
Table 50 Ports
Message Type Description
Bound Ports Number of ports successfully bound. This
includes both SPP and SAP ports and
may include duplicate binds. For
example, a bind may occur twice for the
same port if dealing with a lost transport
(control messages are re-sent), or if user
data messages over-take control
messages.
Port Binding Failures Number of times binding a port failed.
User messages are not be able to be
exchanged through the port.
Table 49 Connections/Bindings
Message Type Description
Chapter 7 Using the Connexis Viewer
228 User Guide - Rational Rose RealTime Connexis
Application errors metrics collection
Figure 109 Metrics Window: Application Errors Information
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 229
Table 51 Subscriber/Publisher Registrations
Message Type Description
Subscriber Registration
Syntax Errors
Number of times a SAP failed to register
because its registration string had invalid
syntax.
Publisher Registration
Syntax Errors
.Number of times a SPP failed to register
because its registration string had invalid
syntax.
Subscriber Replication
Errors
Number of times a SAP failed to register
because its replication factor was zero.
Publisher Replication
Errors
Number of times a SAP failed to register
because its replication factor was zero.
Table 52 Subscription/Publications
Message Type Description
Subscription Errors (DCS
config)
Number of times a SAP failed to register
because DCS was not configured
correctly.
PublicationErrors (DCS
config)
Number of times a SPP failed to register
because DCS was not configured
correctly.
Subscription Errors
(Locator config)
Number of times a SAP failed to register
globally because the locator was not
configured.
Publication Errors
(Locator config)
Number of times a SPP failed to register
globally because the locator was not
configured.
Explicit Subscription
Errors (Transport spec)
Number of times an SAP failed to register
explicitly (for example,
registerSAP(dcs:<transport>//<host>:<p
ort>/<service>)) using a transport
protocol because the transport was not
properly configured.
Global Subscription
Errors (Transport spec)
Number of times a SAP failed to register
globally (for example,
registerSAP(dcs:/<service>)) using a
transport protocol because the transport
was not properly configured.
Chapter 7 Using the Connexis Viewer
230 User Guide - Rational Rose RealTime Connexis
Table 53 General
Message Type Description
Transport Registration
Failures
The number of times an attempt to use an
unavailable transport was made. Message
is not sent or received.
Encode Failures Number of times the encoding of an
outgoing message failed. This can occur
when there was no buffer large enough to
encode the payload, or the overridden
encode function returned 0. Message is
not sent.
Decode Failures Number of times the decoding of an
incoming message failed.
Type Descriptor Version
Mismatch
Number of times the version of the
senders class does not match the version
expected in the receiver. You can specify
the version of a class in its C++
TargetRTS property tab. Only the version
of the class being sent is considered. The
version(s) of its attributes are not.
Message is not received.
Unknown Types Received Number of times the senders class is not
known in the receivers application. This
can occur if the sender and receiver are in
two different models (different .rtmdl
files). If so, then the protocol and class
being sent must be shared between the
models. This failure can also occur if the
class is not referenced anywhere in the
receivers model, and so is not compiled.
Message not received.
Class Instantiation
Failures
The number of times the receiver failed to
create the class to be received. There may
be a problem with the default or
overridden allocation method for the type
descriptor of the class. Message not
received
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 231
Decodes Past Buffer End Number of times Connexis read past the
end of the encoded data while decoding
an incoming message. Check that the
encode and decode methods in the type
descriptors match exactly on the sender
and receiver side. Message not received
Unrecognized Signals Number of times the signal received is not
recognized as valid on the receivers
protocol. Verify that the protocols used in
the sender and receiver are compatible,
and properly conjugated. Message not
received.
Incompatible Classes The number of times the data type
received with a signal is not a compatible
subclass of the type that has been defined
by the protocol. Verify that the protocols
used in the sender and receiver are
compatible and properly conjugated.
Message not received.
Table 53 General
Message Type Description
Chapter 7 Using the Connexis Viewer
232 User Guide - Rational Rose RealTime Connexis
Application incompatibility metrics collection
Figure 110 Metrics Window: Application Incompatibility Information
Displaying the Metrics Collection
User Guide - Rational Rose RealTime Connexis 233
Table 54 Incompatibilities
Message Type Description
Unknown Decoding
Formats
Number of times the data received was
encoded in an unknown format.
Internal Errors Number of times Connexis internal
processes cannot process the message
(can be user message or control message).
Message is not sent.
Incompatible Requests Number of times unknown control
messages were received.
This will not happen if all applications are
running with Connexis release 6.1.1.
Future Connexis releases may support
additional control requests not supported
by Connexis 6.1.1. Connexis informs the
message sender so that a common
request interface can be used. See your
user guide for that Connexis release.
Connexis 6.1.1 can not inter-operate with
applications using an earlier Connexis
release. Message is not received.
Incompatible Encoding This will not happen if all applications are
running with Connexis release 6.1.1.
Future Connexis releases may support
enhanced existing encoding formats that
are not supported by Connexis 6.1.1.
Connexis informs the message sender so
that a common version of encoding can be
used. See your user guide for that
Connexis release. Connexis 6.1.1 can not
inter-operate with applications using an
earlier Connexis release. Message is not
received.
Unknown Incoming
Message Types
The number of times the incoming
message was of an unknown type.
Chapter 7 Using the Connexis Viewer
234 User Guide - Rational Rose RealTime Connexis
Stopping Metrics Collection
Closing the metrics collection window stops metrics reporting on the
selected component instance.
To stop collecting Metrics:
1. Click the button on the top right corner of the window.
Saving Collected Metrics
Once you start collecting metrics on a component instance, you could
save the statistics for further analysis. Metrics statistics are saved in a
tab-separated format that can be imported directly into popular
spreadsheet programs.
To save collected metrics:
1. Click the button.
2. Type the name of the file you want to save in the Save Metrics As
dialog box. The file is saved as a ComponentInstanceMetrics
(CIMetrics) file. You can open this file a spreadsheet application
like Microsoft Excel or in any text application.
Viewer Tips and Usage Notes
This section provides some tips and usage notes to make it easier to
use the Connexis Viewer:
Capturing Pre-Viewer Session Messages
Error and Warning Tracing
Maximizing Viewer Responsiveness
Capturing Pre-Viewer Session Messages
It is possible to capture traces before a target session is established.
The CNXaas parameter will enable the following trace events:
controller
locator
transporter
component-wide tracing for all data sent to, and received from, all
unwired DCS ports
Viewer Tips and Usage Notes
User Guide - Rational Rose RealTime Connexis 235
any errors or warnings
Note: In this mode, only the signal, data, and virtual circuit are
indicated.
Error and Warning Tracing
Connexis Viewer provides capabilities for tracing and filtering software
errors and warnings.
Software errors
Software errors are used to indicate anomalous conditions that prevent
user data from being transported. Software errors are filtered on a
component instance basis, that is, across all functional groups.
There are many causes of software errors. These include:
Resource depletion, for example, running out of virtual circuits
Application registration errors, for example, syntax errors in
registration string
Internal Connexis errors, for example, unexpected message type
processed by a DCS Capsule, initialization errors
messages being discarded due to type mismatches (on input)
Software warnings
Software warnings are used to indicate conditions that will prevent
Connexis from operating as configured or that can potentially lead to
user data being lost. For example, an unexpected message or an
unknown message type may cause a software warning.
Maximizing Viewer Responsiveness
Under heavy load, you may sometimes notice that the Viewer becomes
unresponsive, that is, right-clicking does not immediately bring up the
context menu. This occurs especially if there are many components
running 'locally', on the same CPU as the Viewer.
To remedy this situation, use the Task Manager to set the Priority of the
Viewer to High as follows:
1. Right click on the Taskbar and select Task Manager.
Chapter 7 Using the Connexis Viewer
236 User Guide - Rational Rose RealTime Connexis
2. In the Processes tab of the Task Manager, right click on the
ConnexisViewer entry.
3. Use the Set Priority menu item to set the Viewer's priority to High.
Note: If the Viewer is still unresponsive, you can try to reduce the
Viewer load by closing trace windows that you do not need to have
open.
User Guide - Rational Rose RealTime Connexis 237
Chapter 8
Using the Connexis Metrics Service
Rational Connexis provides capabilities to collect real-time DCS
metrics information within an executing Rose RealTime model. You can
collect and report metrics on each running component instance. The
DCS performance information that is collected by the DCS metrics
service can be used to tune the DCS command line options.
Metrics services are only available within DCS library components that
have been compiled with metrics collection capabilities enabled. At
run-time, metrics data can be obtained from within a Connexis
enabled model by subscribing to the metrics service. Although you can
subscribe to the metrics service at anytime, you will not be connected
to the metrics service until the service is published within the DCS
layer.
Obtaining Metrics Data with a Metrics Service
The following sections explain how to collect metrics from a Connexis
component instance at runtime.
Enabling Metrics in the DCS library
Adding a Metrics Port
Subscribing to the Metrics Service
Collecting and Processing Metrics
Chapter 8 Using the Connexis Metrics Service
238 User Guide - Rational Rose RealTime Connexis
Enabling Metrics in the DCS library
The DCS libraries installed with Connexis are metrics-enabled by
default. If you re-build your DCS library, make sure that the metrics
service is enabled. For more information on how to configure your
libraries, see Customizing and Porting DCS Libraries on page 289.
Adding a Metrics Port
Before you can interact with the Connexis metrics service, you must
add a metrics port to the capsule in your model. You can add a metrics
port manually or a the Connexis Capsule Configuration Tool.
To add a metrics port manually:
1. Open your model and ensure that the DCS model interface
packages are shared (see Sharing DCS Interfaces on page 84).
2. Open the package Logical View::RTDInterface.
3. Drag a port from the RTDMetrics protocol into your model capsule
and make the port non-wired with notification enabled.
To add a metrics port with the Connexis Capsule Configuration Tool:
1. Use the Connexis Capsule Configuration Tool to configure the
newly created port (see Configuring Connexis Capsules on
page 85).
The newly created and configured port is used to subscribe to the
metrics service.
Subscribing to the Metrics Service
All of the capsules that are subscribing to the Connexis metrics service
must create a registration port that realizes the RTDMetrics protocol.
The following list defines the syntax used to register the subscriber port
under various circumstances.
rTDMetrics.registerSAP("dcs:RTDMetrics");
This form is used in detailed code to register the subscriber port to
the metrics service of the local component instance.
Note: There is no "/" in the registration string after the colon.
Obtaining Metrics Data with a Metrics Service
User Guide - Rational Rose RealTime Connexis 239
rTDMetrics.registerSAP("dcs://<host>:<port>/RTDMetrics");
This form is used in detailed code to register the subscriber port to
the metrics service of another component instance.
dcs:RTDMetrics
This form is used in the Registeration Override field of the port
Specification Sheet. It is used to protect the port when automatic
registration is used.
Once the port is bound, you can send the appropriate signals to obtain
metrics data as described in the following section, Collecting and
Processing Metrics.
Collecting and Processing Metrics
To obtain metrics from inside your application, you must subscribe to
the metrics service. This service is accessible through the RTDMetrics
protocol. The interface defined by the the RTDMetrics protocol provides
the following functions:
Turns on/off gathering of raw metrics data
Obtains metrics data constantly or periodically
Clears collected metrics data
This interface is asynchronous, and is defined in more detail in
Table 55 and Table 56. Table 55 summarizes the output signals sent
by the application. Table 56 summarizes the input signals received by
the application.
Table 55 RTDMetrics Out Signals
Signals Description
rtdMetricsCollectOn Sent by the user application to turn
metrics collection on for this session.
rtdMetricsCollectOff Sent by the user application to turn
metrics collection off for this session.
Chapter 8 Using the Connexis Metrics Service
240 User Guide - Rational Rose RealTime Connexis
By default, the DCS does not collect metrics. If you want to collect
metrics during your application (for example, collect metrics on
activities taking place prior to binding to the metrics service and
turning collection on), use command line parameter -CNXm=1. This
will turn on metrics collection when the DCS starts up. This should be
set on the component instance with metrics that you want to collect.
rtdMetricsClear Sent by the user application to clear the
metrics counter values for all metrics
sessions.
rtdMetricsInterval Sent by the user application to set the
time interval at which collected metrics
are sent to this session.
rtdMetricsGet Sent by the user application to request
the collection of metrics to this point.
Table 56 RTDMetrics In Signals
Signals Description
rtdMetricsCollectOnConfirm
rtdMetricsCollectOnFail
Response sent by DCS to the user
application to confirm/deny turning
metrics collection on for this session.
rtdMetricsCollectOffConfirm
rtdMetricsCollectOffFail
Response sent by DCS to the user
application to confirm/deny turning
metrics collection off for this session
rtdMetricsClearConfirm
rtdMetricsClearFail
Response sent by DCS to the user
application to confirm/deny clearing the
metrics storage for all metrics sessions.
rtdMetricsIntervalConfirm
rtdMetricsIntervalFail
Response sent by DCS to the user
application to confirm/deny setting a
time interval at which collected metrics
will be sent to this session.
rtdMetricsGetConfirm
rtdMetricsGetFail
Response sent by DCS to the user
application to confirm/deny request for
the collected metrics data.
Table 55 RTDMetrics Out Signals
Signals Description
Obtaining Metrics Data with a Metrics Service
User Guide - Rational Rose RealTime Connexis 241
The RTDStats and RTDTransportStats classes (see package Logical
View::RTDInterface in your Connexis model) are used to define the
metrics data provided by the metrics service. The following diagrams,
Class diagram of the metrics classes and Class diagram of the metrics
classes illustrate the relationship between the RTDStats and
RTDTransportStats class and displays the corresponding methods and
attributes.
Chapter 8 Using the Connexis Metrics Service
242 User Guide - Rational Rose RealTime Connexis
Figure 111 Class diagram of the metrics classes
Using Metrics and the Connexis Viewer
User Guide - Rational Rose RealTime Connexis 243
The class diagram Figure 111 continues on Figure 112, showing the
attributes of the RTDTransportStats class.
Figure 112 Class diagram of the metrics classes
Note: An example of the usage of metrics can be seen in the model
metricsCollector in the $RoseRT_Home/CONNEXIS/C++/examples
directory.
Using Metrics and the Connexis Viewer
Another way of obtaining metrics information on a component instance
is by using the Connexis Viewer. Metrics collection is turned on when
the metrics window opens. If you want information on metrics collected
prior to the opening of the metrics window, specify the -CNXm=1
command line argument on the component instance being monitored.
This turns metrics collection on as soon as DCS starts.
Chapter 8 Using the Connexis Metrics Service
244 User Guide - Rational Rose RealTime Connexis
The Viewer can be used at the same time as the metrics service that
you registered. You can obtain metrics data from the metrics service
and from the Viewer.
Note: All the metrics sessions are updated when the metrics counters
are reset from the Viewer or via the port interfaces.
User Guide - Rational Rose RealTime Connexis 245
Chapter 9
Registration String Grammar
Registration String Grammar provides information on the Backus-
Naur Form (BNF) Grammar for the registerSAP and registerSPP
commands.
You can use the grammar below to validate your registration strings
Registration String Grammar for DCS Registrations
<dcs registration string> ::= dcs:[[<endpoint>]/]<service
name>[(<option list>)]
<option list> ::= <option> [ <option list> ]
<option> ::= (locator_rank, integer)
| (locator_transport, transport)
| (connect_retries, integer)
<endpoint> ::= <cdm endpoint> | <custom endpoint>
<cdm endpoint> ::= cdm://<host>:<port>
<crm endpoint> ::= crm://<host>:<port>
<host> ::= host name | ip address
<custom endpoint> ::= <protocol name>://<address>
<service name> ::= <name>
<protocol name> ::= <name>
<address> ::= <restricted string>
Chapter 9 Registration String Grammar
246 User Guide - Rational Rose RealTime Connexis
<port> ::= integer between 0 and 65535
<name> ::= alphanumeric string with optional underscores ("_")
<restricted string> ::= string without
- comma ","
- parenthesis "(" or ")"
- white space
User Guide - Rational Rose RealTime Connexis 247
Chapter 10
Connexis Command Line Options
Command Line Options provides information about commonly-used
combinations for specifying endpoints and locator options. Those
combinations are:
Component Instance with Fixed Endpoints (no locator service)
Component Instance using CDM Endpoint, Locator using CDM
Component Instance using CDM and CRM Endpoints, Primary
Locator using CDM, Backup Locator using CRM
Component Instance with CDM and CRM, CRM is Preferred
Transport
Miscellaneous Command Line Options
Component Instance with Fixed Endpoints (no locator service)
How do I configure my Connexis-enabled component instance so
that it is using a single transport for a given component instance?
CDM:
-CNXep=cdm://<host>:<port> (recommended)
For example: -CNXep=cdm://alpha:3000
-OR-
-CNXep=cdm:<port>
For example: -CNXep=cdm:3000
Chapter 10 Connexis Command Line Options
248 User Guide - Rational Rose RealTime Connexis
CRM:
-CNXep=crm://<host>:<port>
For example: -CNXep=crm://alpha:4000
-OR-
-CNXep=CRM://100.200.250.50:4000
Note: You need to specify the corresponding registration string in the
registerSAP and registerSPP in your application.
How do I configure my Connexis-enabled component instance so
that it is using multiple transports for a given component
instance, for example, CDM + CRM and so on?
Note: CDM and CRM can only listen on one port each.
CDM & CRM:
-CNXep=cdm://<host>:<port> -CNXep=crm://<host>:<port>
For example: -CNXep=cdm://beta:10020 -CNXep=crm://beta:12200
Component Instance using CDM Endpoint, Locator using CDM
How do I configure my Connexis-enabled application so that it is
using CDM or CRM for a given component instance and a single
locator using the same transport?
Component instance with the locator:
-CNXep=cdm://<host>:<port> -CNXlp
For example: -CNXep=cdm://gamma:11000 -CNXlp
Component instance using the locator:
In the example below, it is not mandatory to specify the -CNXep
parameter when using CDM (for example, -CNXep=cdm); however, it is
an example of good practice. You must specify this option when using
explicit connections or if you wish to use the Connexis Viewer for
tracing events and debugging.
-CNXep=cdm://<host>:<port1> -CNXlpep=cdm://<locator_host>:<port2>
For example: -CNXep=cdm://theta:12000 -CNXlpep=cdm://gamma:11000
Component Instance using CDM and CRM Endpoints, Primary Locator using CDM,
User Guide - Rational Rose RealTime Connexis 249
Note: For CRM, replace CNXep=cdm with CNXep=crm, and -
CNXlpep=cdm with -CNXlpep=crm in the examples above.
Component Instance using CDM and CRM Endpoints, Primary
Locator using CDM, Backup Locator using CRM
How do I configure my Connexis enabled application so that it is
using multiple transports and primary and backup locators?
Component instance with the primary locator:
-CNXep=cdm://<host>:<port1> -CNXep=crm://<host>:<port2> -CNXlp
-CNXlbep=crm://<backup_loc_host>:<port3>
For example:
-CNXep=cdm://alpha:8000 -CNXep=crm://alpha:8500 -CNXlp
-CNXlbep=crm://beta:9500
Component instance with the backup locator:
-CNXep=cdm://<host>:<port4> -CNXep=crm://<host>:<port3> -CNXlb
-CNXlpep=cdm://<primary_loc_host>:<port1>
For example:
-CNXep=cdm://beta:9000 -CNXep=crm://beta:9500 -CNXlb
-CNXlpep=cdm://alpha:8000
Component instance using the primary and backup locator:
In the example below, it is not mandatory to specify the -CNXep
parameter when using CDM (for example, -CNXep=cdm); however, it is
an example of good practice. You must specify this option when using
explicit connections or if you wish to use the Connexis Viewer for
tracing events and debugging.
-CNXep=cdm://<host>:<port5> -CNXep=crm://<host>:<port6>
-CNXlpep=cdm://<primary_locator_host>:<port1> -CNXlbep
=crm://<backup_loc_host>:<port3>
For example:
-CNXep=cdm://gamma:10000 -CNXep=crm://gamma:10500
-CNXlpep=cdm://alpha:8000 -CNXlbep=crm://beta:9500
Chapter 10 Connexis Command Line Options
250 User Guide - Rational Rose RealTime Connexis
Component Instance with CDM and CRM, CRM is Preferred
Transport
How do I configure my Connexis enabled application so that CRM
is the preferred transport?
To make crm-based connections when other transports are also
available, you can specify CNXlpt=crm at the primary and backup
locators. The default is CNXlpt=cdm.
Component instance with the primary locator:
-CNXep=cdm://<host>:<port1> -CNXep=crm://<host>:<port2>
-CNXlpt=crm -CNXlp -CNXlbep=crm://<backup_loc_host>:<port3>
For example:
-CNXep=cdm://alpha:8000 -CNXep=crm://alpha:8500 -CNXlpt=crm
-CNXlp -CNXlbep=crm://beta:9500
Component instance with the backup locator:
-CNXep=cdm://<host>:<port4> -CNXep=crm://<host>:<port3>
-CNXlpt=crm -CNXlb -CNXlpep=cdm://<primary_loc_host>:<port1>
For example:
-CNXep=cdm://beta:9000 -CNXep=crm://beta:9500 -CNXlpt=crm
-CNXlb -CNXlpep=cdm://alpha:8000
Note: If you wanted an crm-based connection (for example: crm) for a
specific port, you can specify (locator_transport, crm) as part of the
registration string in the RegisterSAP call.
Miscellaneous Command Line Options
Can I specify different encoding, for example, CDR or ASCII, for
different transports?
No. Encoding applies to a component instance, and not per transport
or per end point. As such, it is possible for component instance A to
specify CDR encoding, and component instance B to specify ASCII
encoding. In essence, the two component instances can talk to each
other using two different encoding schemes. Each component instance
can receive either format but send only the configured one.
Miscellaneous Command Line Options
User Guide - Rational Rose RealTime Connexis 251
Each encoding scheme has its advantages and disadvantages. For
example, CDR is faster than ASCII. On the other hand, ASCII is easier
to debug.
To indicate encoding preference, use the following:
CDR:
-CNXtde=2 (this is the default)
ASCII:
-CNXtde=1
For example:
-CNXep=10020 -CNXep=crm://localhost:13000
-CNXlpep=cdm://alpha:10000 -CNXlbep=crm://beta:11000 -CNXtde=1
Chapter 10 Connexis Command Line Options
252 User Guide - Rational Rose RealTime Connexis
When do I need to supply a CNXep?
You need to supply a CNXep when you want to listen at a pre-
determined CDM port, for example:
when you want to provide a service using the CDM transport, and
clients of your service are not using the locator to resolve your
location. In this case, when you start your component instance
that provides the service, you need to supply the endpoint. That is,
it will be listening at a pre-determined CDM port, for example, -
CNXep=9000. You can then have the clients register for it
specifying the pre-determined location of the service. For example,
consider Application A, which provides service foo, it is started with
a -CNXep=9000 and does registerSPP(dcs:foo). Now another
application B wants to use this service. When B does the
registerSAP, it uses dcs:cdm://<host>:<port>/foo. By having
Application A listen at a pre-determined port (9000), it is easier to
provide that information to Application B, such as via a command
line argument, in a config file, and so on
when a component instance provides locator services for other
component instances (-CNXlp) which use the CDM protocol. You
want to have it listen at a specific CDM port so that when you start
those other component instances, you will know the port number
to supply in the -CNXlpep and -CNXlbep parameters. You can also
specify "-CNXep, -CNXep=0, -CNXep=1. All of these result in a
free port being selected. As well, if the port number you have
provided is non-numeric, or outside the range of 0..65535, it is
ignored and a free port is selected
when you want to use the Viewer against that component instance
Miscellaneous Command Line Options
User Guide - Rational Rose RealTime Connexis 253
Can I use localhost or 127.0.0.1 for specifying endpoints? Are
there any side effects?
On Windows NT, localhost (defined in
C:\WINNT\system32\drivers\etc\Hosts) is set by default to 127.0.0.1,
and refers to the machine on which the application is executing.
localhost provides a convenient shorthand for referring to the host
machine, while maintaining portability across Windows NT. You can
use localhost in Connexis registration strings locally, that is,
between subscribers and publishers residing on the same Windows NT
machine. You cannot use localhost or 127.0.0.1 for registration
across node boundaries, for example, for registering a subscriber on
VxWorks against a publisher on a Windows NT target.
Explicit SAP registration for CDM with address localhost or 127.0.0.1
(for example, "dcs:cdm://127.0.0.1:12345/foo") always results in a
local loopback connection, regardless of whether or not the CNXtluc
flag is set. It will never result in a direct local bind to the SPP.
User Guide - Rational Rose RealTime Connexis 255
Chapter 11
Connexis Messages, Errors, and
Warnings
Where possible, Connexis provides detailed informational messages,
errors, and warnings to make your development and debugging tasks
easier. Three groups of messages are:
Initialization Messages
Initialization Errors
Parameter Errors
Initialization Messages
The following provides a description of some of the more common
informational messages displayed by Connexis on startup.
Table 57 Connexis informational messages
Output Description
dcs: transport listening at [endpoint]
Note: The transport could be cdm, crm
or your own customized transport.
This is output once the transport
starts up and begins listening at the
endpoint. If it does not appear, your
transport was probably not included.
dcs:CNXcmrs set to [size] CDM maximum receive size specified
was larger than the largest buffer
available. Check your use of CNXtbp.
dcs:CNXtfms set to [size] Transmit first message size was
larger than the largest buffer
available or the max message size.
Check your use of CNXtmts and
CNXtbp.
Chapter 11 Connexis Messages, Errors, and Warnings
256 User Guide - Rational Rose RealTime Connexis
dcs:***** CNX endpoint port not
specified - free port will be selected
*****
Connexis will choose an unused port
on which the CDM transport will
listen.
dcs: target agent enabled Indicates that the target agent is
running. The target agent must be
running if you want to use the
Connexis Viewer.
dcs: locator running as primary Confirmation that the locator was
linked into the executable and is
configured as primary.
dcs: locator running as backup Confirmation that the locator was
linked into the executable and
configured as backup.
dcs: local locator not running (CNXlp
or CNXlb required)
You are using one of
RTDBase_Locator or
RTDBase_Locator_Agent in your
model. The locator was linked into
the executable but has not been
configured.
dcs: locator service not available The locator is not available based on
configuration parameters.
dcs: metric service enabled This indicates that the metrics
service is enabled.
dcs: connecting to primary locator at
[endpoint]
dcs: connecting to backup locator at
[endpoint]
These two lines are output as a pair
and indicate that the primary locator
is remote (CNXlpep) and the backup
locator is remote as well (CNXlbep).
dcs: ***** Parameter [<old parameter
name>] not supported. Please use
[<parameter name>=<value>] *****
Indicates that a parameter that is not
supported with the current release
has been used. When the DCS
encounters a command line
argument that is no longer
supported, the DCS internally
converts the parameter to the new
format and indicates the new usage
to the user.
Table 57 Connexis informational messages
Output Description
Parameter Errors
User Guide - Rational Rose RealTime Connexis 257
Initialization Errors
The following banner is output in case of initialization failure:
dcs: *********************************************************
dcs: ***** initialization failure - dcs not available *****
dcs: *********************************************************
dcs: ***** banner provided for diagnosis purposes ****
dcs: ***** use CNXd to display configuration *****
dcs: *********************************************************
dcs: !!!!! system failure when initializing the : <step> (<error>) !!!!!
where <step> is one of
configuration: problem in parsing parameters
target agent: refers to target agent for Viewer
transport-capsule: refers to transport router
transport-callback: refers to the transport callback thread
(input)
transport-helpers: refers to the transport helper thread (output)
controller: refers to registration control
locator: refers to the Connexis locator service
system: any other general error
CDM failed during initialization - check port number
The error is caused by an inaccurate specification of the CNXep=<port>
command line parameter. Check your CNXep specification.
Technically descriptive error messages have been added at points at
which the initialization of the DCS could fail. These would most likely
only be encountered if the system resources were not sufficient to
handle the demands of the DCS system. Another use would be to
quickly narrow down and pinpoint a startup error while performing a
port of the DCS libraries to another platform.
Parameter Errors
The following errors may be reported in case of a misconfiguration of
the command line parameters.
Chapter 11 Connexis Messages, Errors, and Warnings
258 User Guide - Rational Rose RealTime Connexis
Table 58 Command line parameters misconfiguration errors
Output Description
dcs: ***** multiply defined parameter
[<name>=<value>] ignored *****
The following error is reported if you
try to use a command line parameter
multiple times with a component
instance.
dcs: ***** unknown parameter
[<name>=<value>] ignored *****
The parameter you have specified is
not a valid parameter. This check is
performed for all parameters starting
with CNX. For more information, see
Command Line Options Reference
on page 274. You can also output the
list at runtime by specifying CNXhelp
as a command line option.
dcs: ***** CNXendpoint invalid port
[<value>] *****
The port number specified for CNXep
is invalid (non-numeric).
***** CNXendpoint (CNXep) invalid
port [port #] - freeport will be selected
****
The end port specification contains a
syntax error. Connexis will choose
the port on which to listen.
dcs: ***** # of mblks less than # of
buffers in buffer pool *****
The Connexis Transport buffer pool
is not setup properly. Check your use
of CNXtbp.
dcs: ***** Not enough buffers in
buffer pool specified *****
The Connexis Transport buffer pool
is not setup properly. Check your use
of CNXtbp.
dcs: ***** invalid buffer pool specified
*****
The Connexis Transport buffer pool
is not setup properly. Check your use
of CNXtbp.
dcs: ***** CNXcurs = UDP system
receive buffer size must be > max
receive msg size - using target default
*****
UDP buffers are not properly
engineered.
dcs: ***** CNXcuts - UDP system Tx
buffer size smaller than max buffer
size defined in buffer pool - using
system default *****
UDP buffers are not properly
engineered.
Parameter Errors
User Guide - Rational Rose RealTime Connexis 259
dcs: ***** CNXlpep ignored (CNXlp
takes precedence over CNXlpep) *****
You are trying to specify a component
instance as a primary locator, and at
the same time, trying to tell it where
to find the primary locator.
dcs: ***** CNXlb ignored (CNXlp
takes precedence over CNXlb) *****
A component instance can either be a
primary locator or a backup locator
but not both.
dcs: ***** CNXlbep ignored (CNXlb
takes precedence over CNXlbep) *****
You are trying to designate the
component instance as the backup
locator, and at the same time trying
to point it to where the backup
locator is located.
dcs: ***** CNXlp ignored (locator not
present) *****
You are not using RTDBase_Locator
or RTDBase_Locator_Agent in your
model. One of these must be used to
avail the locator capabilities.
dcs: ***** CNXlb ignored (locator not
present) *****
You are not using RTDBase_Locator
or RTDBase_Locator_Agent in your
model. One of these must be used to
avail the locator capabilities.
dcs: ***** CNXlpep missing (CNXlpep
mandatory at backup locator) *****
You must specify a primary locator
for the component instance with the
backup locator.
dcs: ***** CNXlpep missing (CNXlpep
mandatory when using backup
locator) *****
You must specify a primary locator
when using the backup locator
capabilities.
Table 58 Command line parameters misconfiguration errors
Output Description
User Guide - Rational Rose RealTime Connexis 261
Chapter 12
Connexis Customization Reference
Connexis is a general purpose communication tool that can be
customized to suit your needs. To make Connexis as adaptable as
possible, multiple configuration parameters are provided and are
described herein:
Engineering Rules Overview - outlines the high-level configuration
of the Connexis tool and describes the different components that
can be configured. References are made to the detailed options that
are presented in later sections.
Command Line Options Reference - details the command line
options that are available for configuring Connexis.
A summary of the parameters, outlining what behavioral aspects are
affected by which parameters, is presented in the Engineering Rules
Overview topic. For example, to find out what parameters can be used
to reduce the memory used by the application, refer to the Engineering
Rules Overview topic.
Chapter 12 Connexis Customization Reference
262 User Guide - Rational Rose RealTime Connexis
Engineering Rules Overview
This section presents the high-level design of the Connexis tool and
outlines aspects of the tool that can be configured using the options
that are presented later in this chapter. Figure 113, illustrates the
high-level architecture of a Connexis application. The following
sections detail the aspects of the Connexis design that can be
configured.
Figure 113 DCS high-level design
Thread Configuration
The thread design of your application can have a significant impact on
performance and on the resources that are required by your
application. The following sections describe the thread usage in each
of the layers:
Engineering Rules Overview
User Guide - Rational Rose RealTime Connexis 263
Process view of a Connexis application
The application layer
Process view of a Connexis application
This section describes the overall process view of a Connexis
application.
The process view shown in Figure 114 illustrates the thread
configuration for every Connexis component in a distributed
application. If a distributed application had five Connexis components,
each individual node would have a process view similar to that shown
in Figure 114. The Controller_Locator capsule runs on the thread on
which the Connexis capsules that you are using (for example,
RTDBase, RTDBase_Agent, RTDBase_Locator, or
RTDBase_Locator_Agent) are incarnated.
Chapter 12 Connexis Customization Reference
264 User Guide - Rational Rose RealTime Connexis
Figure 114 Connexis process view
Default number of threads
The number of user threads that exist in a particular Connexis
component is determined by the requirements and design of the
component. The number of helper threads associated with the
Transport component is configurable but defaults to five. When the
CDM or CRM transports are enabled, but are not configured to run on
the tread of the transporter, additional threads are incarnated for each
transport.
Engineering Rules Overview
User Guide - Rational Rose RealTime Connexis 265
The application layer
The Application layer consists of the threads that are used by the Rose
RealTime Target RSL and the threads that are part of the design of the
application. This configuration is illustrated in the following class
diagram.
Figure 115 Thread configuration of Application layer
By default, there are only three threads created in a Rose RealTime
model: the TimingService thread, the TargetRSLDebug thread, and the
Main thread. The Main thread is where all application code is executed
by default. The user model may contain any number of user threads.
This is dependent on the design that has been created.
DCS and transport Layer
The thread priorities for the threads in the DCS and Transport layers
can be specified by using the following configuration options:
Transporter - The priority of the main Transport thread is
configured using the CNXtran_thread_priority (CNXttp) option.
TargetAgent - The priority of the TargetAgent thread is configured
using the CNXagent_thread_priority (CNXatp) option.
helper thread priority - The priority of the helper threads is
configured using the CNXtran_helper_thread_priority (CNXthtp)
option. This defaults to a priority that is higher than the transport
thread.
Chapter 12 Connexis Customization Reference
266 User Guide - Rational Rose RealTime Connexis
Note: The Callback thread does not run and has no thread priority
associated with it. It is provided so that the transport integration
callback operations can send messages to the transporter capsule.
The thread priorities of the built-in transports (ex.: CDM and CRM) can
be configured using the CNXtran_priority (CNXtp) option. When
applicable, user integrated transports are also be configured using the
CNXtran_priority option. If this option is not specified, the default
value is the thread priority of the transporter
(CNXtran_thread_priority).
The DCS Controller and Locator components are on the same thread
and run on the thread that the DCS top-level capsule is incarnated.
The Transport Capsule contains a number of threads that are referred
to as helper threads. The helper threads are used to handle any
transport operations that are potentially blocking. The CDM and CRM
transports use the helper threads to resolve host names supplied in
explicit registrations. The CRM transport uses the helper threads when
writing data to an endpoint.
The number of helper threads is configured using the
CNXtran_helper_threads command line option. The default value for
this option is 5. The maximum number of helper threads that can be
configured is 100. Setting CNXtht to a number greater than 100 results
in only 100 helper threads being created.
Buffer Configuration
In addition to the threads that are being used by Connexis, there are
areas of the design where buffers are being used. These buffers are
typically being used to buffer data that is either being sent or received
from different processes in the distributed application. The size and
number of many of these buffers is configurable. This section
illustrates Connexis buffer usage and details where optimizations can
be made by using configuration options.
Overall buffer configuration of a Connexis application
This section describes the overall buffer usage of a Connexis-enabled
application. Specific options that can be used to configure these
buffers are presented in the following sections. A class diagram
showing the overall buffer usage is presented in Figure 116.
Engineering Rules Overview
User Guide - Rational Rose RealTime Connexis 267
Figure 116 Buffer usage in Connexis application
Application layer
All of the message buffering that occurs in the Application layer is
using the built-in Rose RealTime queuing mechanism. In this queuing
scheme each thread in a Rose RealTime model has a priority queue.
This queue maintains all of the messages that are destined for the
capsules that are running on the thread and that have not been
delivered yet. Connexis does not add any extra buffers in these cases.
Chapter 12 Connexis Customization Reference
268 User Guide - Rational Rose RealTime Connexis
DCS layer
Most of the messaging that occurs in the DCS layer uses the built-in
Rose RealTime message queues. The Transport capsule also maintains
a transport buffer pool, and an Operation Queue. The transport buffer
queue and the Operation Queue are used to buffer data and control
messages that are being transmitted or received over a transport.
The buffers used for encoding and decoding are obtained from the
buffer pool. The default buffer sizes that are allocated from the buffer
pool for encoding and decoding are configured using the
CNXtran_first_msg_size (CNXtfms) and the
CNXtran_max_transmit_size (CNXtmts) of the transport. In the case of
CDM, a decode buffer is reserved from the buffer pool and its size is
configured using the CNXcdm_message_receive_size (CNXcmrs)
option.
The design of the Operation Queue is illustrated in Figure 117.
Figure 117 Operation Queue design
The Operation Queue is used to buffer transport operations that are
received while an endpoint is binding or being resolved. The size of the
Operation Queue is specified using the CNXtran_out_queue_limit
(CNXtoql).
Engineering Rules Overview
User Guide - Rational Rose RealTime Connexis 269
The transport commands that are queued are bind commands, which
do not require a buffer and write commands. Some of the write
commands require message buffers to hold the message payload.
Specifically, if the message has data that is not sent using send scalar,
a message buffer is required. The message buffer is retrieved from the
transport buffer pool. The design of the transport buffer pool is shown
in Figure 118.
Figure 118 Transport Buffer Pool design
The Transport Buffer Pool maintains a set of buffers of varying sizes.
When an transport integration write requires a buffer, the Transport
Integration encodes the data into a buffer that it obtains from the
Transport Buffer Pool. The encode is done in a buffer that most closely
matches the size of the encoded data. This means that the encode is
using a best fit algorithm to find the appropriate buffer.
The size and number of the different buffers in the buffer pool is
configurable using the CNXtran_buffer_pool (CNXtpb) configuration
option. The default value of this option is
64:1,600:10,4200:10,17000:2,32860:2,33000:2. This means that, by
default, the buffer pool creates:
1, 64 byte buffer
10, 600 byte buffers
10, 4200 byte buffers
Chapter 12 Connexis Customization Reference
270 User Guide - Rational Rose RealTime Connexis
2, 17000 byte buffer
2, 32860 byte buffer
2, 33000 byte buffers
If the buffer size is not double word aligned, Connexis rounds up to the
next double word boundary. In addition, each buffer has an overhead
of 24 bytes associated with it due to its buffer control block. This
means that the total amount of memory that is consumed by this
configuration is:
(64 + 24) x 1 = 88
(600 + 24) x 10 = 6240
(4200 + 24) x 10 = 42240
(17000 + 24) x 2 = 34048
(32864 + 24) x 2 = 65776
(33000 + 24) x 2 = 66048
For a total of 214440 bytes.
Connexis buffer usage
This section describes the strategies that are used by CDM Transport
Integration to select buffers from the transport buffer pool for the
different types of messages that can be sent. Table 59presents the
different types of messages that Connexis sends and their
corresponding starting buffer sizes and maximum buffer sizes. Table
59also indicates if the Operation Queue is used for a particular
message type. The general algorithm that is used for all message types
is that Connexis starts by trying to get a buffer that satisfies the criteria
listed in the Starting buffer size column. If a free buffer of that size is
not available, the next largest buffer available is used as long as its size
is not greater than the value listed in the Maximum buffer size column.
If a buffer of that size cannot be found, Connexis looks for a larger
buffer. This continues until the size of the buffer being requested is
greater than the value listed in the Maximum buffer size column.
If your application is only using CDM, configure Connexis according to
the following information:
There is one decode buffer large enough to hold the biggest
message that your application will receive. Use the CNXcmrs
command line option to configure the receive buffer.
Engineering Rules Overview
User Guide - Rational Rose RealTime Connexis 271
There is one encode buffer large enough to hold the biggest
message that your application will send. Use the CNXtmts
command line option to configure the transmit buffer.
There are a number of buffers that are approximately 400 bytes in
size that can be used to hold queued connection requests. This is
only required if host names are being used. If your application uses
IP addresses these buffers are not required.
Configuring the Number of Virtual Circuits
The pre-built Connexis library has a fixed number of virtual circuits
which a Connexis-enabled model can use at run-time. The fixed
number (200) is suitable for most applications and reduces the
memory footprint of the run-time application.
If your application uses more than 200 connections, you must increase
the number of connections, re-build your Connexis library and re-link
your application.
To increase the number of virtual circuits:
1. Open the DCS model
($ROSERT_HOME/CONNEXIS/Model/DCS.rtmdl).
2. Open the specification for the Logical
View::DCSComponents::DCSSysConfig::RTDConstants class.
3. Open the specification for the attribute rtdMaxCircuits.
Table 59 Buffer sizes used by different message types
Message Type Queue
Used?
Starting buffer size Maximum buffer size
CDM Audit No 40 bytes not applicable
CDM data No CNXcmtsa,c CNXcmts
CDM Control No CNXcmtsaCNXcmts
aIf a free buffer that is >= CNXtmts is not available and CNXtfms is < CNXtmts, Connexis
re-attempts to obtain a buffer using the CNXtfms as the starting buffer size.
cConnexis encoding starts with a buffer that is >= the size specified in the Starting buffer
size column. If the encoded data exceeds the buffer size, a buffer twice as large is
obtained (subject to the maximum buffer limit dictated) and the smaller buffer is
released. Encoding continues with this process until a buffer cannot be obtained, or the
encoded size exceeds the maximum encoded data size, or all of the data is encoded.
Chapter 12 Connexis Customization Reference
272 User Guide - Rational Rose RealTime Connexis
4. Change the constant's default value from 200 to a number
appropriate for your requirements.
5. Rebuild the Connexis library from the changed DCS model and link
your application with the newly built library.
Verifying Connections
The Audit functionality verifies that the connection is up and that the
connection is in a state that allows it to go back into service. There are
three types of periodic audits (handshake, connection, and none) and
a reset audit available. The transport can also report when it has failed
and when it has recovered.
With periodic audits the length of the audit period of a connection
depends upon the current state of the connection. It is a function of the
auditISGranularity, the auditOOSGranularity audit configuration
options and the length of the CNXtap. The length of the CNXtap is the
multiple of CNXtap >= the granularity depending on the state.
Handshake audit
This audit determines when a transport has gone out of service. The
handshake audit is usually used when the transport can not notify you
that it has gone out of service through send return code or
asynchronous notification of a failure.
Once a transport goes out of service, messages are sent until it goes
back into service. The audit can be configured so that a re-resolve is
triggered when out of service. If the address was originally unresolved
then it will be reresolved and rebound.
Are You Alive (AYA) messages are sent and I Am Alive (IAA) response
messages are expected in return. A handshake exchanges between two
end points. If piggyBackEnabled is on, messages that are received
count as IAA responses as well. The response must be received before
the next audit period of the connection is over. If it is not received, the
audit period is considered failed. The auditsFailedForOOS identifies
the number of consecutive failed audit periods that may occur before
the connection is considered failed. When a connection has failed
auditsPassedForIS identifies the number of consecutive success audit
periods needed for the connection to resume service. A successful
audit period is one in which an IAA response is received for an AYA
message.
Engineering Rules Overview
User Guide - Rational Rose RealTime Connexis 273
AYA messages are sent only when messages have not been received
from the other side during the last audit period. If messages have been
received, during the period, but no messages were sent, IAA message
are sent. This is an optimization to prevent the other side from having
to send an AYA message in order to trigger this side to send a message.
YANTxEnabled identifies whether You Are Not Responsive (YAN)
messages should be sent when a transport is going out of service.
YANRxForceOOS indicates whether a received YAN message should
trigger the current connection to go out of service. These are useful for
keeping both ends of a connection in sync. It allows one side to notify
the other that it considers the connection to be down, allowing the
other side to release its resources.
Connection audit
Connection audit generates messages during quiet periods, to monitor
the status (up or down) of the transport.
During an audit period, if the connection is in service and no messages
are sent or received, then an IAAnoise audit message is sent. If the
transport is experiencing a failure, the message sends fails and the
connection transitions to out of service. The recovery configuration
defines how to put the transport back into service. When the transport
has failed, the connection audit does not run.
Reset audit
The Reset audit is used primarily in situations where the endpoint goes
up and down faster than the audit can detect. When an application
starts up it assigns itself a unique ID based on the clock and its IP
address. This value is sent in all messages and to all destinations. If
the reset audit is enabled and a message arrives from the sender with
a different ID, it is decided that the sender has failed and has been
restarted. All SPPs are released and all SAPs will rebind to an SPP. To
use the Reset Audit with a connection-oriented transport, the
transport needs to have the ability to release and then re-establish a
connection to the same endpoint. If your network does store and
forward messages, you may not want to use the reset audit either. In a
store and forward network, it is possible old messages turn up with the
old id and result in a working connection being taken down and
restarted unnecessarily.
Chapter 12 Connexis Customization Reference
274 User Guide - Rational Rose RealTime Connexis
A reset audit check takes place when connection establishment
messages are exchanged and when audit messages are exchanged. It
is recommended that you use reset audit with handshake audits.
If your network does store and forward messages, you may not want to
use the reset audit either. In a store and forward network, it is possible
old messages turn up with the old id and result in a working
connection being taken down and restarted unnecessarily.
Command Line Options Reference
There are several areas where the performance and behavior of
Connexis can be modified. The key areas are:
System wide - options that do not apply to a specific component
DCS - options that apply to the DCS
Transporter options that apply to the transporter sub-system and
affect all registered transports.
Transport specific parameters -options that apply to a particular
transport
Target RSL - options that apply to the Rose RealTime Target RSL
Locator - options that apply to the Connexis Locator
Connexis Viewer / Target Agent - options that apply to the
Connexis Viewer application and its target component
Options applying to each of these components are discussed in the
following tables. Background information that is necessary for making
the design trade-off decisions is also presented. Each set of
configuration parameters is presented in a table format that outlines
the name of the option, the argument type, a description of what the
option does, and a default value.
Setting Command Line Options
The general approach for using all of the mentioned command line
options is to specify them on the command line. If this is not possible
on your target platform, you must set the values of argv and argc using
a supported method.
All of the global command line options that have arguments are set
using the following syntax:
Command Line Options Reference
User Guide - Rational Rose RealTime Connexis 275
<appname> -<command_line_option>=<value>
The transport specific command line options that have arguments are
set using the following syntax:
<appname> -<command_line_option>=<transport name>:<value>
The command line options that do not have arguments are set using
the following syntax:
<appname> -<command_line_option>
Note: The command line options are case sensitive (even on Windows
NT).
System wide
Table 60 lists the options that apply to Connexis as a whole, not to a
specific component.
Table 60 System wide command line options
Command Line
Option
Description
CNXunique_id
| CNXui
This option is used to set a unique identifier for a
Connexis endpoint. If this option is not specified by the
user, Connexis generates a random pattern to use as
the unique identifier.
It is good practice to assign a logical name to the unique
identifier because it makes recognizing the endpoints in
the Viewer easier. For example, -CNXui=service1.
Argument Type: string
Default Value: a random pattern
CNXhelp | CNXh This option causes a brief output of help and default
values for user parameters to be printed to the console.
Argument Type: none
Default Value: none
CNXdump | CNXd This option outputs the final configuration of both the
global and transport specific configuration options once
DCS has been initialized.
Argument Type: none
Default Value: none
Chapter 12 Connexis Customization Reference
276 User Guide - Rational Rose RealTime Connexis
CNXnobanner
| CNXnb
If this option is specified, the Connexis banner is not
displayed on start up.
Argument Type: none
Default Value: none
CNXmetrics |
CNXm
This option allows you to start metrics collection as
soon as DCS starts. This lets you collect metrics on
activities which take place prior to turning metrics on in
the Viewer or programmatically.
Argument Type: bool
Default Value: 0 (false)
CNXpsos_node |
CNXpn
This option only applies to the pSOS operating system.
The pSOS software architecture allows for an
application to be distributed across multiple nodes,
each with a unique ID. This option is used by the DCS
to identify the node ID on which a component instance
is running. The default value assumes that the DCS is
running in a single node configuration.
Argument Type: integer
Default Value: 0
Table 60 System wide command line options
Command Line
Option
Description
Command Line Options Reference
User Guide - Rational Rose RealTime Connexis 277
DCS options
The options contained in Table 61 are related to the DCS controller.
Table 61 DCS command line options
Command Line
Option
Description
CNXdcs_audit_delay
| CNXdad
The minimum time between audits for a given
virtual circuit in milliseconds.
Argument Type: integer
Default Value: 1000
CNXdcs_audit_interval
| CNXdai
Minimum interval between auditing virtual circuits
in seconds.
Argument Type: integer
Default Value: 100
CNXdcs_audit_enabled
| CNXdae
Enables or disables the DCS audit feature. If set to
non-zero the DCS audit is enabled.
Argument Type: BOOL
Default Value: 1
CNXdcs_conn_retry_
delay | CNXdcrd
The retry timeout for transport connect messages.
The transport name is qualified since this option is
transport specific (ex.: -CNXdcrd=cdm:2000).
Time is specified in milliseconds.
Argument Type: integer
Default Value: 5000
Chapter 12 Connexis Customization Reference
278 User Guide - Rational Rose RealTime Connexis
Transporter options
Table 62 describes the command line options that are available for
modifying the global DCS Transporter configuration settings.
CNXdcs_retry_delay |
CNXdrd
The retry timeout for transport control messages.
The transport name must be qualified since this
option is transport specific (ex.: -
CNXdrd=cdm:2000).
Time is specified in milliseconds.
Argument Type: integer
Default Value: 5000
CNXdcs_locator_retry_
delay | CNXdlrd
Specifies the retry delay for locator control
messages. This value is expressed in milliseconds.
Argument Type: integer
Default Value: 5000
Table 62 Transporter global command line options
Command Line Option Description
CNXtran_num_mbks |
CNXtnm
Specifies the number of memory control blocks
that are pre-allocated for the buffer pool of the
transporter. The default value is the number of
memory blocks in the buffer pool, configured
using CNXtran_buffer_pool.
Argument Type: integer
Default Value: sum (CNXtbp)
CNXtran_log_bad_msgs
| CNXtlbm
If set to true, messages with bad types are logged.
Argument Type: BOOL
Default Value: 1 (true)
Table 61 DCS command line options
Command Line
Option
Description
Command Line Options Reference
User Guide - Rational Rose RealTime Connexis 279
CNXtran_default_local_u
se_transport (CNXtdlut)
Configures the default transport used when a
non-explicit subscription resolves locally. This
causes two virtual circuits to be used per local
DCS registration.
Note: Use the Viewer to view local messages. They
are valuable for debugging. Local messages are
not traceable through any other method.
Argument Type: string (transport name)
Default Value: None
CNXtran_local_loopback
_enable (CNXtlle)
Configures the loopback of local connections that
result from an explicit subscription. This causes
two virtual circuits to be used for each local DCS
registration. The syntax is:
-CNXtlle=<transport>:[0 | 1]
An example such as -CNXtlle=cdm:1, indicates
that any registration that resolves locally will be
connected through the cdm transport.
Note: Use the Viewer to view local messages. They
are valuable for debugging. Local messages are
not traceable through any other method.
Argument Type: string (transport name)
Default Value: None
CNXtran_thread_priority
| CNXttp
Specifies the priority of the transporter thread.
Argument Type: integer
Default Value: DEFAULT_MAIN_PRIORITY + 1
CNXtran_stack_size
(CNXtss)
Specifies the stack size of the transporter thread.
Argument Type: integer
Default Value: CNXTTP_STACK
Table 62 Transporter global command line options
Command Line Option Description
Chapter 12 Connexis Customization Reference
280 User Guide - Rational Rose RealTime Connexis
CNXtran_default_
encoding | CNXtde
Specifies the default encoding method.
1=ASCII, 2=CDR
Argument Type: integer
Default Value: 2
CNXtran_helper_thread_
priority | CNXthtp
Specifies the helper thread priority.
Argument Type: integer
Default Value: DEFAULT_MAIN_PRIORITY + 2
CNXtran_helper_thread_
stack_size | CNXthtss
Specifies the helper thread stack size.
Argument Type: integer
Default Value: CNXTHTP_STACK
CNXtran_helper_threads
| CNXtht
Specifies the number of helper threads that are
used to buffer data from Connexis. This
corresponds to the maximum number of blocking
calls that can occur against the transport at any
given time plus the number of CDM host name
resolution requests at any given time.
Argument Type: integer
Default Value: 5
CNXtran_out_queue_
limit | CNXtoql
The maximum number of messages allowed in the
Operation queue.
Argument Type: integer
Default Value: 250
CNXtran_endpoint_
queue_limit | CNXtepql
The maximum number of messages that can be
queued per endpoint.
Argument Type: integer
Default Value: 100
Table 62 Transporter global command line options
Command Line Option Description
Command Line Options Reference
User Guide - Rational Rose RealTime Connexis 281
CNXtran_buffer_pool |
CNXtbp
This parameter establishes the number and size
of the buffers that are being managed by the
transport buffer pool. The default specifies that 1,
64 byte buffer, 10, 600 byte buffers, 10, 4200
byte buffers, 2, 17000 byte buffers, 2, 32860 byte
buffers and 2, 33000 bytes buffers be created.
Argument Type: string
Default Value:
64:1,600:10,4200:10,17000:2,32860:2,33000:2
CNXtran_audit_period |
CNXtap
Specifies how often to schedule the audit process.
A value of 0 means that auditing is disabled. This
value is specified in milliseconds
Argument Type: integer
Default Value: 250
CNXtran_audit_
throttle_handshake |
CNXtath
Specifies the maximum number of handshake
audit messages per audit period. This provides
flow control when many connections are being
audited.
Argument Type: integer
Default Value: 10
CNXtran_audit_throttle_
conn | CNXtatc
Specifies the maximum number of connection
audit messages per audit period. This provides
flow control when many connections are being
audited.
Argument Type: integer
Default Value: 10
Table 62 Transporter global command line options
Command Line Option Description
Chapter 12 Connexis Customization Reference
282 User Guide - Rational Rose RealTime Connexis
Transport specific options
Table 62 describes the command line options that are available for
modifying transport specific options.
Table 63 Transport component command line options
Command Line Option Description
CNXendpoint
| CNXep
This option is used to specify the Connexis
endpoint used by the application. A Connexis
endpoint has the syntax: [transport
protocol://][hostname:]port. For example,
cdm://host1:9999.
The CNXep option can be specified once for each
registered transport.
In the case of CDM, if this option is not specified
or is set to 0, Connexis allocates a free port on the
local machine for the CDM transport.
Argument Type: string
Default Value: transport specific
CNXtran_first_msg_size
| CNXtfms
Specifies the first message size to use when
encoding. The default is the smaller of 600 or
CNXtmms.
Argument Type: integer
Default Value: 600 or CNXtmms
CNXtran_max_transmit_
size | CNXtmts
Specifies the maximum transmit message size to
use when encoding. For transports other than
CDM, defaults to the largest buffer in CNXtbp,
after excluding 1 buffer of size CNXtmts and 1
buffer of size CNXcmrs.
The maximum transmit size for the CDM and
CRM transports is limited to 65535 bytes.
Argument Type: string
Default Value: max(CNXtbp)
Command Line Options Reference
User Guide - Rational Rose RealTime Connexis 283
CNXtran_reset_audit_
enabled | CNXtrae
This option (when set) configures the DCS to
detect if a connection has gone down and
recovered before the transport audit could detect
the failure. If this option is true and a reset is
detected, the DCS resets the local circuits so that
their connections can be re-established.
The detection is in part triggered by transport
audits so transport audits must be enabled for
this audit to function.
If you disable CNXtrae you should make sure that
CNXdae is enabled so that failures are detected
by the circuit audit.
Argument Type: BOOL
Default Value: 1 (true)
CNXtran_handshake_co
nn_
audits_is | CNXthcai
Specifies the number of audits that must pass
before the transport can go in-service.
Argument Type: integer
Default Value: 2
CNXtran_handshake_co
nn_
audits_oos | CNXthcao
Specifies the number of handshake audits that
must fail before a transport connection is marked
out-of-service.
(CNXthcao + 1) x CNXtcapo is the amount of time
that the other application would have to be
unresponsive before the connection is marked
out-of-service.
Argument Type: integer
Default Value: 4
Table 63 Transport component command line options
Command Line Option Description
Chapter 12 Connexis Customization Reference
284 User Guide - Rational Rose RealTime Connexis
CNXtran_conn_
audit_period_is |
CNXtcapi
Specifies the audit period to use when the
connection is in-service. This value is represented
in milliseconds. No audit messages are sent when
data is exchanged over the connection in both
directions.
If this option is not a multiple of CNXtap, the
audit period is rounded up to a period that is
divisible by CNXtap.
Argument Type: integer
Default Value: 500
CNXtran_conn_audit_per
iod_oos | CNXtcapo
Specifies the connection audit period to use when
the connection is out-of-service. This value is
represented in milliseconds.
Argument Type: integer
Default Value: 500
CNXtran_resolve_expiry
| CNXtre
Configures the amount of time for which a
resolved endpoint address is valid. Any new
connections established before the expiration
time will use the cached resolved address and will
not reresolved unless there is a transport failure.
This value is represented in seconds.
Argument Type: integer
Default Value: 30
CNXtran_resolve_retry_d
elay | CNXtrre
Configures the retry period for a failed address
resolve operation. The period is specified in
milliseconds.
Argument Type: integer
Default Value: 5000
CNXtran_resolveon_han
dshake_audit_fail |
CNXtrhaf
Configures the DCS to reresolve an endpoint after
this number of failed periods from CNXtcapo, a
handshake audit failure. A value of 1 enables this
functionality.
Argument Type: integer
Default Value: 0 (disabled)
Table 63 Transport component command line options
Command Line Option Description
Command Line Options Reference
User Guide - Rational Rose RealTime Connexis 285
CDM
Table 64 describes the parameters that apply to the CDM transport.
CNXtran_resolve_after_fa
ilure | CNXtraf
Configures the DCS to reresolve a transport
endpoint after a transport failure. A value of 1
enables this functionality.
Argument Type: BOOL
Default Value: 0
CNXtran_bind_retry_dela
y | CNXtbrd
Configures the retry timeout for the endpoint
binding operation of a transport. The timeout
period is specified in milliseconds.
Argument Type: integer
Default Value: 500
CNXtran_priority |
CNXtp
Specifies the transport thread priority.
Argument Type: integer
Default Value: DEFAULT_CNXTTP_PRIORITY + 1
Table 64 CDM command line options
Command Line
Option
Description
CNXcdm_max_rx_size
| CNXcmrs
Maximum CDM receive size. Default to largest
buffer defined in transport buffer pool. This decode
buffer is used exclusively for incoming CDM
messages.
Argument Type: integer
Default Value: max(CNXtbp)
Table 63 Transport component command line options
Command Line Option Description
Chapter 12 Connexis Customization Reference
286 User Guide - Rational Rose RealTime Connexis
Locator
Table 65 describes the options that are available for customizing the
DCS Locator service.
CNXcdm_udp_rx_size
| CNXcurs
The UDP protocol receive buffer size. The default
value is what is defined by the target environment.
Argument Type: integer
Default Value: system
CNXcdm_udp_tx_size
| CNXcuts
The UDP protocol transmit buffer size. The default
value is what is defined by the target environment.
Argument Type: integer
Default Value: system
Table 65 Locator command line options
Command Line Option Description
CNXlocator_primary
| CNXlp
Specifies that this process should be made the
primary locator.
Argument Type: none
Default Value: none
CNXlocator_backup
| CNXlb
Specifies that this process should be made the
backup locator.
Argument Type: none
Default Value: none
CNXlocator_primary_
endpoint | CNXlpep
Specifies the endpoint of the primary locator (if
this process is not the primary locator).
Argument Type: string
Default Value: none
CNXlocator_backup_
endpoint |
CNXlocator_backup_
endpoint
Specifies the endpoint of the backup locator (if
this process is not the backup locator).
Argument Type: string
Default Value: none
Table 64 CDM command line options
Command Line
Option
Description
Command Line Options Reference
User Guide - Rational Rose RealTime Connexis 287
Connexis viewer/target agent
The options listed below apply to the DCS Target Agent component of
the Connexis Viewer. These options are specified in the same way as
other options, namely as command line options to your Connexis-
enabled executable.
These options are used to configure the target agent for optimal use
with the Connexis Viewer.
CNXlocator_retry_delay
| CNXlrd
Specifies the amount of time, in milliseconds, to
wait before retries. The value must be >50.
Argument Type: integer
Default Value: 1000
CNXlocator_audit_delay
| CNXlad
Specifies the amount of time, in milliseconds, to
wait between audits of the Primary locator. This
value must be >50.
Argument Type: integer
Default Value: 2000
CNXlocator_audits_oos
| CNXlao
Specifies the number of failed audits required to
take the primary locator out of service. Using the
default of 3, the primary locator would be taken
out of service after the third consecutive audit
had failed.
Argument Type: integer
Default Value: 3
CNXlocator_preferred_
transport | CNXlpt
Configures the preferred transport to be used for
a binding when the transport is available to both
the publisher and the subscriber. This option can
only be set at the Primary or Backup locators.
Argument Type: string
Default Value: cdm
Table 65 Locator command line options
Command Line Option Description
Chapter 12 Connexis Customization Reference
288 User Guide - Rational Rose RealTime Connexis
Table 66 Connexis Viewer command line options
Command Line Option Description
CNXagent_thread_priority
| CNXatp
Specifies the target agent thread priority.
Argument Type: integer
Default Value: DEFAULT_MAIN_PRIORITY
CNXagent_trace_buffer
_size | CNXatbs
Specifies the target agent trace buffer size in
terms of the number of events that are stored.
Trace events have a fixed size of 32 bytes.
Argument Type: integer
Default Value: 1000
CNXagent_data_block_size
| CNXadbs
Specifies the target agent data block size in
bytes.
Argument Type: integer
Default Value: 32
CNXagent_num_data_
blocks | CNXandb
Specifies the number of data blocks that are
allocated for the target agent.
Argument Type: integer
Default Value: 1000
CNXagent_truncate_user_
data | CNXatud
Specifies the number of bytes to keep before
truncating user data. A value of -1 means that
no truncation is performed.
Argument Type: integer
Default Value: 256
CNXagent_auto_start
| CNXaas
Tells Connexis to automatically start capturing
events. The level can be set between 1 and 5
where 1 corresponds to Basic traces, 3
corresponds to Operational traces and 5
corresponds to Advanced traces. The preferred
level is 3.
For more information, refer to Defining a Trace
Filter for a Component Instance on page 182.
Argument Type: integer
Default Value: 0 (disabled)
User Guide - Rational Rose RealTime Connexis 289
Chapter 13
Customizing and Porting DCS Libraries
The Distributed Connection Service (DCS) libraries let you create a
distributed Rose RealTime application. The DCS libraries work with
the TargetRTS, allowing Rose RealTime unwired ports to be bound
across process boundaries.
This chapter describes how to customize or port DCS libraries to a new
target environment. The new target could be a new target
configuration, or an OS or compiler upgrade of a supported DCS target
configuration.
The information in this chapter is specifically designed for software
developers familiar with the target environment to which they are
porting. It assumes that you have significant knowledge and
experience with the development environment, operating system, and
target hardware. It is also assumed that you are familiar with
theRational Rose RealTime C++ Porting Guide and have completed
and tested the TargetRTS port to the new target configuration.
This section also provides guidelines on how to build DCS libraries for
a minimal configuration.
Common customizations for the DCS
The DCS has been designed and implemented using Rose RealTime
and is available in the form of a model. The most common
customizations required are:
Changing the compilation flags used to build the DCS library
Updating the compiler version for the target configuration
Building a minimal configuration of the TargetRTS and DCS
libraries
Chapter 13 Customizing and Porting DCS Libraries
290 User Guide - Rational Rose RealTime Connexis
Other resources
Before customizing a target configuration or starting a port, ensure
that you have the following documents and materials available:
Rational Rose RealTime C++ Porting Guide
Compiler documentation
Simple Rose RealTime example models to verify the TargetRTS port
Connexis "BasicTest" example model to verify the DCS port
Operating system capabilities
UDP/IP and TCP/IP support are required to support CDM and CRM
transports. While it is possible to complete a port without IP support,
UDP/IP support is required if you need to observe your target using the
Connexis Viewer. IP support is also required for UML-level debugging
using Target Observability feature of Rose RealTime.
What to do before calling Rational support
If you encounter any problems, follow the steps below before calling
Rational support for help regarding a DCS port.
1. Follow the steps outlined in the section "What to do before calling
Rational Support" in theRose RealTime C++ Porting Guide.
2. Verify that the TargetRTS port for the new target configuration is
functional using the Rose RealTime example models.
Porting the DCS to a New Target Configuration
To port the DCS to a new target configuration:
1. Create a TargetRTS library for the new target configuration.
2. Create DCS target specific header files for the new target
configuration.
3. Load the DCS model.
4. Create a new C++ library component for the new target
configuration.
5. Configure and customize the C++ library component settings.
6. Configure the DCS CDR encoding/decoding for the new target
configuration.
Porting the DCS to a New Target Configuration
User Guide - Rational Rose RealTime Connexis 291
7. Build the DCS library for the new target configuration.
8. Test the new target configuration.
Creating a New TargetRTS Library
Follow the steps and instructions described in the Rational Rose
RealTime C++ Porting Guide to configure or create a TargetRTS library.
The DCS library for a target platform depends on the TargetRTS for its
target configuration and library settings. The TargetRTS provides
several settings that the user can configure. The TargetRTS
parameters and settings table lists the parameters and the settings
that must be set for the DCS. The Rational Rose RealTime C++ Porting
Guide provides a complete description of all the target settings.
Compiler option settings that are common to the TargetRTS libraries,
the DCS libraries, and the user's application should be configured
using the LIBSETCCFLAGS macro in
$RTS_HOME/libset/<libset>/libset.mk.
Compiler option settings that only apply to the TargetRTS libraries
should be set in the LIBSETCCEXTRA macro in
$RTS_HOME/libset/<libset>/libset.mk.
Table 67 TargetRTS parameters and settings
Target Settings Value Descriptions
USE_THREADS 1 The DCS is only available for multi-
threaded applications.
HAVE_INET 1 The DCS requires IP support for the
Connexis Datagram Messaging (CDM) and
the Connexis Reliable Messaging (CRM)
transports.
OBJECT_ENCODE 1 The DCS requires IP support for the
Connexis Datagram Messaging (CDM) and
the Connexis Reliable Messaging (CRM)
transports.
OBJECT_DECODE 1 Required so that a message received over
the wire can be decoded into objects.
RTS_COMPATIBLE 600 Connexis is not available for ObjecTime
Developer and there are no compatibility
issues with v5.2
Chapter 13 Customizing and Porting DCS Libraries
292 User Guide - Rational Rose RealTime Connexis
Compiler option settings that only apply to the DCS libraries should be
configured in the DCS model. Customization of a DCS C++ library
component is described in the section "Configuring the C++ Library
Component Settings."
Creating DCS Target Specific Header Files
Although most of the configuration of the DCS libraries is done within
the DCS model, the DCS thread configurations are configured in the
file $RTS_HOME/target/<target>/RTDcsTarget.h. The file
RTDcsTarget.h contains specific operating system priority definitions
and configuration of the stack size for DCS threads. The
RTDcsTarget.h file also contains the definitions of the maximum and
minimum values of the thread priorities for an operating system. Run-
time argument processing uses these values to validate the run-time
settings or the thread priorities for the DCS threads. The table below
provides a list of constants that must be defined in RTDcsTarget.h.
Table 68 Constant definitions
Constant Description
CNX_PRIORITY_MIN Defines the minimum allowable value for a thread
priority
CNX_PRIORITY_MAX Defines the maximum allowable value for a thread
priority.
CNX_PRIORITY_RAISE The default configuration for the DCS is for the
priority of the helper threads to be higher than the
priority of the transporter thread. The
CNX_PRIORITY_RAISE constant is used to
increment a thread priority. For OS targets in which
the higher priority threads have lower numeric
values, the value of CNX_PRIORITY_RAISE must be
negative.
DEFAULT_CNXTTP_PR
IORITY
Sets the default thread priority for the transporter
thread.
DEFAULT_CNXHTP_P
RIORITY
Sets the default thread priority for the helper
threads. For optimal system performance, the
helper threads should run at a higher priority than
the transporter thread.
Porting the DCS to a New Target Configuration
User Guide - Rational Rose RealTime Connexis 293
Loading the DCS Model
Before you load the DCS model, create new target configuration or
customizations to an existing target configuration within the DCS
model. Load the DCS model into a Rose RealTime session, found in the
$ROSERT_HOME/CONNEXIS/Model directory.
The Component View of the DCS model has packages containing the
C++ library components for the supported DCS configurations. These
packages are named after the target configurations they represent. For
example, the package VXW54-ppc-cygnus-272-960126 represents the
TORNADO2T.ppc-cygnus-2.7.2-960126 target configuration.
Before making any modifications to the target configurations, make a
copy of the DCS model provided with the Connexis installation.
Creating a C++ Library Component
Once the DCS model is loaded, you can modify an existing C++ library
component or create a new one.
If you are modifying an existing target configuration, clone the
TargetRTS with a new name and duplicate the DCS library component.
To clone the TargetRTS:
1. Select the component in the browser.
2. Duplicate the option from its context menu.
DEFAULT_CNXATP_PR
IORITY
Sets the default thread priority for the target agent.
The target agent is designed to be minimally
intrusive to the application and should be running
at a lower priority than the threads of the
application.
CNXTTP_STACK Sets the stack size for the transporter thread.
CNXHTP_STACK Sets the stack size for the helper threads
CNXATP_STACK Sets the stack size for the target agent thread.
Table 68 Constant definitions
Constant Description
Chapter 13 Customizing and Porting DCS Libraries
294 User Guide - Rational Rose RealTime Connexis
If you are creating a new target configuration, duplicate the DCS
library component template provided in the
package. This generic template
component is configured with the following information:
references to all the DCS Logical View components required to
provide the DCS functionality
property settings for the library name (the default is
$(LIB_PFX)DCS$(LIB_EXT))
compilation inclusion paths
property settings for any component level inclusions
component dependencies
Configuring the C++ Library Component Settings
The following table describes the component properties that must be
customized.
Table 69 Customizing component properties
Component Property Description
C++ Compilation >
TargetConfiguration
The <target> and <libset> settings of the TargetRTS
configuration that we are building against.
C++ Generation >
CodeGenMakeType
Specify the format of the makefiles to be generated
by the toolset for the code generation phase of the
build. For example, if you are using the GNU make
utility in your environment, this property should be
set to Gnu_make.
C++ Generation >
CodeGenMakeComma
nd
Specifies the name of the make utility to be used by
the toolset for the code generation phase. For
example, gmake.
C++ Compilation >
CompilationMakeType
Specify the format of the makefiles to be generated
by the toolset for compilation phase of the build.
For example, if you are using the GNU make utility
in your environment, this property should be set to
Gnu_make.
C++ Compilation >
CompilationMakeCom
mand
Specifies the name of the make utility to be used by
the toolset for the code compilation phase. For
example, gmake.
Porting the DCS to a New Target Configuration
User Guide - Rational Rose RealTime Connexis 295
C++ Compilation >
CompilationMakeArgu
ments
You must specify RT_SRC_TGT=<target_base>. The
DCS depends on TargetRTS files in the
$RTS_HOME/src/target directory. For example,
RTtcp.h. The RT_SRC_TGT make variable is used to
specify the target base.
C++ Compilation >
CompileArguments
If your component is not compiling, it may be a
result of the RTD_CONNEXIS_BUILD constant not
being set properly. The definition of this constant
can be found in the C++ Compilation" > "Compile
Arguments" field of the component and should be
changed from $(CNX_BUILD_NUM) to a user-
defined integer value. This property is used to
configure the C++ preprocessor macros that
configure certain DCS capabilities.
Viewer tracing is configured on the target using the
RTD_TRACE macro. $(DEFINE_TAG)RTD_TRACE=1
enables tracing. $(DEFINE_TAG)RTD_TRACE=0
disables most traces (except errors and warnings),
$(DEFINE_TAG)RTD_TRACE=2 disables all traces.
The metrics collection and reporting capabilities are
configured using the RTD_STATISTICS macro.
$(DEFINE_TAG)RTD_STATISTICS=1 enables
metrics collection and reporting.
$(DEFINE_TAG)RTD_STATISTICS=0 disables the
metrics collection and reporting.
Additonal macros might be required to configure
the CDR encode/decode capabilities for the target
platform. These capabilties are described in
Configuring the CDR Encode/Decode
Functionality on page 296
Note: If your component is not compiling, it could be
a result of the RTD_CONNEXIS_BUILD constant not
being set properly. This constants definition can be
found in the components C++ Compilation >
Compile Arguments field and should be changed
from $(CNX_BUILD_NUM) to a user-defined integer.
This property is also used to configure any compiler
option settings that are only required for completion
of the DCS libraries.
Table 69 Customizing component properties
Component Property Description
Chapter 13 Customizing and Porting DCS Libraries
296 User Guide - Rational Rose RealTime Connexis
Configuring the CDR Encode/Decode Functionality
The CDR Encode/Decode functionality could require platform specific
customizations depending on the capabilities of the platform. These
customizations are accomplished by defining C++ preprocessor macros
in the "C++ Compilation > CompileArguments" property of the DCS
library component's specification sheet. The following customizations
are available:
Overriding the type for use when encoding 64-bit values. The
default behaviour when the RTD_LONGLONG_TYPE macro is not
defined is to encode/decode 64-bit values using the primitive "long
long" type. This customization is required when the compiler does
not provide support for "long long" types. Setting
$(DEFINE_TAG)RTD_LONGLONG_TYPE=0 will use "__int64" type
to encode/decoding 64-bit values. Setting
$(DEFINE_TAG)RTD_LONGLONG_TYPE=1 will cause 64-bit values
to be encoded/decoded using the primitive "double" type.
Enabling the inclusion of <sys/types.h>. Some platforms require
this inclusion to provide definitions of all the system types. Setting
$(DEFINE_TAG)RTD_INCLUDE_TYPES_IN_RTDPLATFORMCONFI
G enables this capability.
Creating a Minimal DCS Library Configuration
The DCS libraries provided with the Connexis installation are
configured with extensive debugging information and capabilities. As
the application becomes more mature, it may be necessary to
recompile a minimal configuration of both the TargetRTS and DCS
libraries in order to obtain better performance and a smaller memory
footprint for deployment. The Rose for RealTime "C++ Language
Guide" provides a description of how to create a minimal Target RTS
library configuration.
The TargetRTS precompiler settings defined in Table 67,TargetRTS
parameters and settings on page 291, must be set to support the DCS
functionality.
Porting the DCS to a New Target Configuration
User Guide - Rational Rose RealTime Connexis 297
Once a minimal Target RTS is configured, built, and tested. The DCS
library corresponding to the TargetRTS library configuration can be
built. For the DCS libraries, it is recommended that the following
preprocessor settings be set for a minimal configuration:
$(DEFINE_TAG)RTD_TRACE=0
$(DEFINE_TAG)RTD_STATISTICS=0
These setting are described in Table 69, Customizing component
properties.
Building the Library
Once you build the C++ library component and the
class is configured for the target platform, you can build the
library.
To build the library:
1. Select the component in the browser
2. Select the > option from the context menu.
The library is built into the folder specified in the properties area of the
component ( > ).
Once the library has been built, copy it into the
$ROSERT_HOME/CONNEXIS/C++/lib/<target>.<libset> directory.
Note: If your component is not compiling, it could be a result of the
RTD_CONNEXIS_BUILD constant not being set properly. This constants
definition can be found in the components C++ Compilation > Compile
Arguments field and should be changed from $(CNX_BUILD_NUM) to a
user-defined integer.
Testing the Port
Test the DCS library port with the BasicTest model provided as part of
the Connexis installation. This model is available in
$ROSERT_HOME/CONNEXIS/C++/Examples/BasicTest.rtmdl. A
description of the BasicTest model is provided in the Rational
Connexis Release Notes and Installation Guide.
User Guide - Rational Rose RealTime Connexis 299
Chapter 14
Using the Transport Integration
Framework
The Rational Connexis Transport Integration Framework (TIF) lets you
add your own proprietary transports or other common transports for
use in Connexis messaging. The TIF is designed to be flexible, allowing
a variety of transports to be integrated. Transports may include
Industry standard transports (UDP/IP, TCP/IP), operating system
specific transports, or your own proprietary transport.
You might want to add your own transports for the following reasons:
The application requires more real-time predictability than TCP/IP
can provide.
The application requires more reliability than CDM can provide.
The application uses an embedded or proprietary protocol.
TCP/IP is not available on the target system.
TIF lets transport specialists seamlessly integrate transports into
Connexis. TIF is provided as a package of classes that are subclassed
and implemented. The subclasses are packaged into a library and
made available to Connexis-enabled applications. The viewer, locator,
and other Connexis features are fully supported for any transport
integrated into Connexis.
Chapter 14 Using the Transport Integration Framework
300 User Guide - Rational Rose RealTime Connexis
Transport Integration Overview
The following overview identifies the steps in building a Transport
Integration (TI) using the Transport Integration Framework (TIF). The
steps to building a Transport Integration are as follows:
1. Verify that your transport works.
It is import to ensure that your transport works before integrating
it into the DCS using the TIF. It is difficult to test the transport and
integration at the same time.
2. Understand the Transport Integration Framework.
DCS Architecture on page 301 describes in detail how the DCS
and the Transport Integration works together to establish
connections and transfer messages between subscribers (SAPs)
and publishers (SPPs).
3. Understand your transport.
This includes the transports properties and how to send and
receive messages over it (see Understanding your Transport on
page 305).
4. Implement the transport integration.
Create subclasses and implement the abstract functions of the
following classes:
RTDTransport
RTDTransportAddress
RTDTransportAddressFactory
RTDTransportEndpoint
RTDTransportEndpointFactory
Create a class (or classes) that provides functionality of the
transport.
5. Package the transport integration.
Create a class (or subclasses) that provide the listening
functionality of the transport.
6. Test the use of the integration of the transport under Connexis.
DCS Architecture
User Guide - Rational Rose RealTime Connexis 301
DCS Architecture
The Connexis Transport Integration Framework (TIF) forms the basis
of integration. A Transport Integration (TI) is the actual implementation
of an instance of the TIF. The transports which come with Connexis
(CDM based upon UDP and CRM based upon TCP/IP) have been
integrated using the TIF. Figure 119, Connexis High-Level Design, on
page 301, shows how the DCS fits into a DCS-enabled application. The
Locator and Agent, included as part of the DCS, are special
applications that access internal information about connections and
uses of the DCS like a user application. User applications make use of
the DCS when registering and deregistering SAPs and SPPs and when
sending messages between SAPs and SPPs.
The Controller processes the registerSAP, registerSPP, deregisterSAP
and deregisterSPP calls and establishes the virtual circuit between a
SAP and SPP. If necessary a locator is contacted for global
subscriptions and publications.
The transporter is responsible for setting up, auditing, and recovering
connections. It is responsible for routing work requests like binds,
resolves and sends to the appropriate Transport Integration.
The Transport Integration interfaces with the actual transport to
resolve addresses, bind and reset connections, and send or receive
messages.
Figure 119 Connexis High-Level Design
Chapter 14 Using the Transport Integration Framework
302 User Guide - Rational Rose RealTime Connexis
The Table 70, Connexis High-Level Design Chart, identifies what
components of Figure 119 are DCS, Customer or Third-party
components.
Terminology
Throughout this chapter the following terms, defined in Table 71, are
used.
Table 70 Connexis High-Level Design Chart
Connexis
Components
Customer
Components
Third-party
components
locator, TA User Capsules UDP
DCS - Controller TI Custom Integrations TCP/IP
Transporter Custom transports
TI - CDM
TI - CRM
Table 71 Chapter Definitions
Term Definition
Address The location of the component instance.
Endpoint In the context of the Transport Integration
Framework, an endpoint represents a connection
over a transport from one component instance to
another component instance.
Virtual Circuit Represents a logical connection between a
subscriber and a publisher.
Audit Background activity to help monitor the availability
of a transport during periods of inactivity.
Messages Information to exchange between two component
instances.
Audit Messages Messages exchanged between two component
instances in an effort to monitor the endpoint.
Control Messages Messages exchanged between a DCS in different
component instances, regarding a virtual circuit.
Connection Lifecycle
User Guide - Rational Rose RealTime Connexis 303
Connection Lifecycle
When Connexis receives a RegisterSAP request, it resolves the address
and a single endpoint is established from the resolved address. Once
the endpoint is established, it is bound and messages are exchanged
to obtain access to a service (a virtual circuit). Data messages are then
exchanged between the SAP and SPP over the virtual circuit.
Note: Multiple virtual circuits can use the same endpoint and messages
consist of fixed-size control information and data.
Messages sent over the virtual circuit could be Connexis control
messages, Connexis audit messages or SAP/SPP messages. All
messages need to be encoded before they are sent and decoded. The
endpoint is monitored as long as there are established virtual circuits
associated with it. If there is no activity over any of the virtual circuits
the audit activity is triggered. The user is notified of the failure
(rtunbound) of the transport and the recovery (rtbound) of the re-
established connection with the virtual circuit.
Resource cleanup takes place periodically when there are no virtual
circuits making use of an endpoint. In that case the endpoint is
released.
Application Messages Messages exchanged over a virtual circuit (between
a publisher and a subscriber).
Transport Intergration The actual implementation of TIF classes that allow
a transport to be used transparently by a DCS
enabled model.
TIF The set of model interface elements and
documentation that allows transports to be
integrated with the DCS.
Table 71 Chapter Definitions
Term Definition
Chapter 14 Using the Transport Integration Framework
304 User Guide - Rational Rose RealTime Connexis
DCS Threading Model
The diagram below illustrates the DCS threading model (see
Figure 120, Connexis Process View). The significant threads from the
Transport Integration point of view are the Transporter thread and the
pool of Helper threads.
Figure 120 Connexis Process View
If an address received in a registerSAP called is unresolved, a request
to resolve it is queued for a helper thread. For blocking transports that
are integrated into the DCS, the bind, send and reset requests take
place on the helper thread. Only one helper thread at a time invokes
these functions for a connection. If the transport is configured as non-
Understanding your Transport
User Guide - Rational Rose RealTime Connexis 305
blocking, these requests are performed on the thread of the DCS
transporter. The Transport Integration, in turn, may create additional
threads for other processing, such as listening for messages.
Alternatively, the wait and wakeup functions of the DCS transporter
can be overridden to perform the "listening" operation for the
transport. In this case, the work is performed on the thread of the
transporter. User capsules can also be incarnated to be run on the
thread of the transporter. The thread of the transporter can be obtained
using the RTDInitStatus protocol. Take care to ensure none of these
user capsules block. For more information on the DCS threading
model, see Connexis Customization Reference on page 261.
Understanding your Transport
When you implement the Transport Integration, you must decide how
the transport is to be configured into DCS. You must have the following
information about your transport before you use the TIF:
Determine the Name of your Transport and Protocols on
page 306.
Decide the String Format of the User-specified Address on
page 306.
Decide How to Validate the Address on page 306.
Decide the Transformation of the Address on page 307
Determine the Internal Representation of your Address on
page 308
Decide the Format of the Listening Point Information on
page 309.
Decide if your Transport is Blocking or Non-blocking on
page 309.
Decide the Recommended Address Resolution Configuration on
page 310.
Decide How the Transport will Recover from Transport Failures
on page 311.
Decide How to Audit your Transport on page 311.
Decide the Format of your Messages on page 312.
Decide Strategy for Listening for Messages on page 313.
Chapter 14 Using the Transport Integration Framework
306 User Guide - Rational Rose RealTime Connexis
Determine the Name of your Transport and Protocols
Typically a transport supports only one protocol and has the same
name as the transport. There is the flexibility to register more than one
protocol with a transport.
Note: Transport names and protocols are case insensitive and should
not have embedded blanks or special characters (":" "/" "," ")" "(") in them.
Example:
The CRM transport supports the crm protocol. The CDM transport
supports the cdm protocol.
Decide the String Format of the User-specified Address
When you register an SAP explicitly, you need to supply the address
where the service can be found. The format of the registerSAP
argument for our discussion purposes looks like the following example:
<port reference>.registerSAP("<protocol>://<address>/<service>");
You should have decided on the supported <protocol> before this point
as described in Determine the Name of your Transport and Protocols
on page 306. You now need to decide the format for <address>. It could
be a queue name for an OS messaging service, an object name for a
CORBA object, an IP address or the name of a board.
Example:
For the CRM transport, the address takes the form of the following:
<hostname>:<port> or <ip address>:<port>
For example "crm://alpha:9090" or
"crm://192.033.111.222.44:8980"
Decide How to Validate the Address
When you perform a registerSAP call, the registration string supplied
is validated. If the registration string is invalid, the registerSAP call
fails, allowing you to take the necessary action immediately. In order
to assist in the validation of the registration string, a function to
validate the syntax of the string form of the transport address must be
provided. The better the validation, the better the feedback to the user
at registration time.
Understanding your Transport
User Guide - Rational Rose RealTime Connexis 307
Example:
The CRM validation of an address includes verifying:
A single address is supplied.
A host name or IP address is supplied.
A numeric port number is supplied.
The port is non-zero.
Decide the Transformation of the Address
The address supplied is in a textual string format. It may require that
all or a portion of the string be transformed into an internal transport-
dependent form. A queue name may need to be transformed into an
internal queue ID. An object name may be transformed into an object
reference after looking it up in a naming service. A host name may be
transformed into an IP address. An IP address and port may be
transformed into a socket.
The address can be transformed into an internal form:
When an instance of the RTDTransportAddress subclass is created
At resolve time
At bind time
The results of the transformation during resolve time should be stored
in the RTDTransportAddress subclass. The results of the
transformation done at bind time should be stored in the
RDTTransportEndpoint subclass.
The address should be transformed at resolve time if any of the
following situations apply:
1. If only part of the address needs to be "looked up" or transformed
(for example resolving a host name), it should be performed at
resolve time. The results of the lookup are cached and can be used
by different addresses. For example: crm://alpha:9090 and
crm://alpha:10002 are 2 different addresses. The host name
"alpha" can be looked up once at resolve time and cached for use
by both addresses.
Chapter 14 Using the Transport Integration Framework
308 User Guide - Rational Rose RealTime Connexis
2. If the transport is non-blocking and transformation is blocking, the
look up should take place during resolve time. The resolve takes
place on a separate thread. If the transport is marked as non-
blocking, the bind takes place on the transporter thread being used
to send or receive other messages.
3. If the different unresolved portions of an address can result in the
same resolved value, consider performing the lookup in the resolve
step. For example, if host names "alpha" and "CnxTest" both
resolve to the same result, it is better to perform the lookup during
resolve time, so that "crm://alpha:9000" and
"crm://CnxTest:9000" would result in the same endpoint being
used.
If the transformation is non-blocking and you never need to re-
transform the address after a transport failure, or an audit failure, the
transformation can take place when the RTDTransportAddress
subclass is created.
If none of the above situations apply, the lookup should be done at bind
time. For example a CORBA object name may be looked up only at bind
time.
Example:
For the CRM transport, if a host name is supplied as opposed to an IP
address, the address is considered unresolved. Only the host name
portion of the address needs to be resolved. Because multiple
representations of an address may turn out to be the same address,
the host name lookup will be done as part of the resolve step as
opposed to the bind step. For example: crm://alpha:9000
crm://mymachine:9000 and crm://192.222.222.22:9000 could
resolve the to the same destination. Therefore the resolve is the best
place to look up the host name so that only one endpoint is available
for the same destination. The IP address will be transformed later to a
socket during bind time.
Determine the Internal Representation of your Address
The address supplied by an application is always in a textual string
format. The transport that is integrated requires an address to be
represented in a completely different form.
Understanding your Transport
User Guide - Rational Rose RealTime Connexis 309
Example:
The internal representation of a CRM address uses the RTinet_address
and RTinet_port classes/typedefs. The class also has a host attribute
type of RTString that is used to hold the unresolved host name. The
socket that is created by the connect is part of the internal
representation of the endpoint.
Decide the Format of the Listening Point Information
Review the -CNXep parameter and decide the format of the listening
point information. -CNXep has the form:
-CNXep=<protocol>:<listeningaddress>
Note: It is the transport protocol that is supplied and not the transport
name. If you chose the same value for both, the distinction is irrelevant.
The transport integration is responsible for validating the listening
point information supplied by a user. The endpoint supplied could be
a complete address, or a portion of an address (such as a port number),
or could be completely optional.
Example:
The CRM transport supports the following endpoint format:
-CNXep=[crm[://host]:port]
where host is a host name or IP address of the component instance's
processor.
CRM supports a full address in the same format as used in the
registration string. It also supports just the specification of a port
number. The IP address is determined at startup to be the primary IP
address of the board. If no address was supplied, the primary IP
address and any free port is used as the listening address.
Decide if your Transport is Blocking or Non-blocking
A transport can be considered a blocking transport if it blocks one of
the following operations: bind, send a message or reset.
Chapter 14 Using the Transport Integration Framework
310 User Guide - Rational Rose RealTime Connexis
If the transport is non-blocking, the message send performed is on the
same thread as the transporter, preventing a context switch. If the
transport is blocking, the message is first encoded by the TI on the
transport thread. The message is then queued for the endpoint by the
transporter. The message is later sent by the TI on the helper thread.
If the transport you are integrating is blocking, you must decide the
stack size and priority of the threads (-CNXthts, -CNXthtp). The users
of the transport decide the number of helper threads (-CNXtht), the size
of the buffer pool (-CNXtbp) which holds the encoded messages until
they are sent, the maximum queued messages (-CNXtoql) and the
maximum queued messages per endpoint (-CNXtepql).
Example:
The CRM transport is blocking.
The CDM transport is non-blocking
Decide the Recommended Address Resolution Configuration
When configuring the transport, information on address resolution is
collected. During the configuration process, you need to validate and
set the address expiry and the retry delay periods. See the description
of RTDProfile for more information on the periods. Also, see the
description of the -CNXtre and -CNXtrre parameters (see Connexis
Customization Reference on page 261).
Ask yourself how frequently the result of the address resolution
changes during the life of the process. When the resolve fails, is it
possible, if retried later, to be resolved. If so, what is a reasonable time
period to delay?
Example:
For CRM, the resolve step is a host name lookup. It is possible that
during the life of the process that the network topology can change.
This creates the possibility that a host name may resolve to one
location at one point in time, but resolve later to a new location. The
address expiry period can be non-zero. The CRM protocol may be used
in situations where the network topology is known to never (or very
infrequently) change and the user may want to override the settings on
the command line.
Understanding your Transport
User Guide - Rational Rose RealTime Connexis 311
Decide How the Transport will Recover from Transport Failures
During the configuration of the transport, you need to describe how to
recover from transport failures. An endpoint is considered to have had
a transport failure if:
A bind is unsuccessful (bind function reports RTDFailure).
A write is unsuccessful (write function reports
RTDTransportFailure).
The transport notifies the DCS asynchronously that the transport
has failed.
Once an endpoint has suffered a transport failure, the DCS can
attempt to put the endpoint back into service, or it can wait until the
endpoint is accessible again. You can specify how long to delay after a
bind failure. You may also indicate if a transport failure should trigger
the re-resolution of the destination address of the endpoint (if it was
originally unresolved).
Example:
For the CRM transport, the DCS attempts to put the endpoint back into
service. Addresses should be re-resolved since the network topology
can change.
For the CDM transport, transport failures do not happen. The CDM
transport depends upon the handshake audit to determine when an
endpoint is inaccessible.
Decide How to Audit your Transport
The DCS supports two types of periodic audits, Handshake,
Connection or None. See Configuring the Number of Virtual Circuits
on page 271, for details on the nature of the audits.
If the transport being integrated already has the ability to detect
failures when the transport is idle, use this functionality instead of the
DCS audit facilities. When the transport detects a failure for an
endpoint, notify the DCS of the failure through the transportFailure or
transportFailureRecovery functions in the DCS API. The API is
provided to the Transport Integration during startup. In the case of this
transport the periodic audit type would be noAudit.
Chapter 14 Using the Transport Integration Framework
312 User Guide - Rational Rose RealTime Connexis
If the transport being integrated can detect failures when messages are
sent, use the Connection audit. The Connection audit results in
messages being sent to endpoint destinations when the application is
not sending or receiving messages on that endpoint.
If the transport being integrated is unreliable and does not detect
failures when writing or receiving messages, use the Handshake audit.
The Handshake audit sends a message that triggers a response from
the other end. If the response is not received, it indicates that the
transport may have failed. When using the Handshake audit, consider
enabling the Reset Audit as well. Do not use the Handshake audit if the
reply to an audit message is received on a different endpoint than the
originating message.
Example:
The CRM transport uses the Connection audit.
The CDM transport uses the Handshake audit and the Reset audit
unless requested it not be used.
Decide the Format of your Messages
There are two major message classes sent by DCS, Audit messages and
Data messages.
An audit message consists of a header of audit-specific information,
and optional data object and information about the data. Data objects
are sent only in rare circumstances.
The Data messages category includes the DCS control messages and
application data messages. A data message consists of a header
structure of data message-specific information, a signal name, a data
object and information about the data. Some of the data messages sent
require that the address of the sender is known on the receiving side.
Depending on the transport and the deployment processor
architecture, messages sent may need to be encoded/decoded. You
may also have additional information that you want to be exchanged
between component instances. You may also want to encrypt or
compress the messages being sent over the transport.
Understanding your Transport
User Guide - Rational Rose RealTime Connexis 313
Example:
For the CRM transport, a common preface header is shared between
the two message categories. This header contains the size of the
message, version information (for future use), message type and
message priority. The message type identifies what follows these 8
bytes (full word alignment).
If the message is an audit message, a second header follows,
containing the audit header information and an offset in the message
to the encoded data object.
If the message is a data message a second header follows, containing
the data header information and an offset in the message to the
encoded data object. A null terminated string containing the signal
name follows the second header.
The attributes of the header are aligned on the appropriate boundaries.
Prior to sending a message, the short and long attributes in the header
are placed in network byte order. The origin of the message never needs
to be sent since it can be determined from the socket on the receiver's
side.
Decide Strategy for Listening for Messages
In the transport integration you need to implement listening
functionality for your transport. The DCS provides a set of functions to
call when a message has been received by the transport. Listening
functionality can be implemented to run on a thread created by the
Transport Integration or in some cases on the DCS Transporter thread.
Does your transport use a callback type mechanism to notify you of
messages received?
For example you register functions to be called. It calls known object
methods (CORBA object). Your listening routine(s) dissect the message
received and call the appropriate DCS API function with the decoded
information. You would not make use of the custom controller.
Does your transport require that you do a blocking wait until a
message arrives?
For example, do you receive on a socket, do a select on a set of sockets,
wait for a message queue signal, etc.? If so, you require a thread that
can wait on the object. The listening routine dissects the message and
calls the appropriate DCS API function with the decoded information.
Chapter 14 Using the Transport Integration Framework
314 User Guide - Rational Rose RealTime Connexis
You can perform the listen operation on the thread of the transport, if
the cases below apply. Otherwise create your own thread on which to
listen. Ideally you want to listen on the thread of the transport to
reduce the number of context switches.
Does your transport support listening to multiple endpoints at
once?
For example, receive from a UDP socket, or select on a set of
sockets or wait on a queue of incoming messages.
Are you are able to wake yourself up to do other processing? For
example, you can send yourself a message from another thread or
signal yourself from another thread.
If you want your transport to listen on the DCS transporter thread, set
useCustomController to true and register a wait routine and a wakeup
routine during configuration.
Note: Note only one transport can be configured to listen on the
transporter's thread since there is only one transporter.
You will need to decide which transport listens on the transporter
thread. This should be based on load and performance requirements.
Does your transport require a separate thread to listen on each
individual endpoint from which messages can arrive. For example,
select type functionality is not available. It is recommended that the
RTDEndpoint subclass manages the creation and shutdown of the
listening threads.
Does your transport require you to poll it to see when a message has
arrived?
If so, you can create a thread that periodically polls to see if a message
has arrived. If the CNXtap period is frequent enough for polling, you
must consider placing the polling activity on the DCS transporter
thread by setting useCustomController to true and register implement
a processing routine that checks for new messages.
Refer to the Rational Rose RealTime documentation on the custom
controller to understand how the functionality runs on the DCS
Transporter thread.
Integrating your Transport
User Guide - Rational Rose RealTime Connexis 315
Example:
The CRM transport uses select to listen on a collection of sockets. Only
one thread is needed to listen for messages. Sending the listener a
short control message wakes it up. The CRM transport offers the
flexibility to listen on the DCS Transporter thread or a separate thread,
allowing a different integrated transport to listen on the Transporter
thread. The endpoint notifies the listener when it starts listening on a
particular socket and when to no longer listen on a particular socket.
Integrating your Transport
This section explains how to integrate a transport into the DCS.
Setting up the Model
Preparation:
Decide the name of your transport.
Make sure the transport works.
Steps:
1. Create a new model or use an existing model that has your
transport implementation.
2. Share in the RTDTransportIntegrationClasses logical package and
the RTDTIFComponents component package.
These packages contain the classes and library for the Transport
Integration Framework. To share in these packages see Adding
Connexis Support to Your Model on page 83.
3. Create a new package to contain your transport integration.
4. Create the new package in a class diagram and subclasses of the
following Integration classes:
RTDTransportAddressFactory
RTDTransportAddress
RTDTransportEndpointFactory
RTDTransportEndpoint
RTDTransport
Chapter 14 Using the Transport Integration Framework
316 User Guide - Rational Rose RealTime Connexis
Example:
The classes created for the CRM transport are:
RTDCrmAddressFactory
RTDCrmAddress
RTDCrmEndpointFactory
RTDCrmEndpoint
RTDCrmTransport
Note: The prefix "RT" for class/capsule names is reserved for Rational
RoseRT. Name your classes appropriately so there are no symbol
conflicts.
Understand the Integrated Transport
Read the section "Understanding Your Transport" and make decisions
on how you want to represent your transport to the DCS.
Implementing the RTDTransportAddressFactory Subclass
To implement the RTDTransport AddressFactory subclass:
1. Review the description of the RTDTransportAddressFactory class.
2. Determine the name of your transport and protocols.
3. Decide the format of the listening point information the user will
supply.
4. Define the implementations of the abstract functions.
a. newTransportAddress(RTDTransportId, const char * const)
b. newTransportAddress(const RTDTransportAddress &)
c. newLocalAddress(const RTDTransportId)
d. releaseTransportAddress(RTDTransportAddress &)
The newTransportAddress and releaseTransportAddress functions
create and release instances of the RTTransportAddress subclass.
The newLocalAddress function creates a RTDTransportAddress
subclass object representing the endpoint on which this process is
listening. The string format of the address (for example, result of the
endpoint() function) is used by the application when publishing SPPs.
It is a good idea to ensure the address supplied is distinct.
Integrating your Transport
User Guide - Rational Rose RealTime Connexis 317
Example:
Typically, the local listening information is supplied by the user in the
-CNXep=<transport protocol>:<listening point information> command
line parameter. This information in turn is supplied to the transport in
the configureTransport call.
In the CRM case, the RTDCrmTransport::startTransport function
processes the -CNXep information supplied by the user and starts the
transport. Once the transport is started, the actual listening point is
known (-CNXep is optional for CRM). The RTDCrmTransport class
makes the listening information available in a public static attribute
(instance of the RTDCrmAddress).
RTDCrmAddressFactory::newLocalAddress returns a copy of this
attribute. This is just one of many possible ways of obtaining access to
the listening point. Choose which works the best for your design.
Implementing the RTDTransportAddress Subclass
To Implement the RTDTransportAddress subclass:
1. Review the description of the RTDTransportAddress class.
2. Decide the string format of the user-specified address.
3. Decide how to validate the address.
4. Decide what is the internal representation of the address of the
transport, if any.
5. Decide the address transformation.
6. Create the necessary attributes/associations needed to contain the
internal representation. You may also want to provide methods for
accessing this information.
7. Define the constructors for the subclass.
The subclass requires 2 constructors, one accepts the transport ID
and a string representation of the address and the other is a copy
constructor.
8. Define the implementations for the abstract functions:
a. unresolvedName
b. resolve
c. setResolved
d. sameResolved
Chapter 14 Using the Transport Integration Framework
318 User Guide - Rational Rose RealTime Connexis
9. Define a function that validates a string representation of the
address.
The definition of the function is as follows:
typedef RTDResult (*RTDAddressValidatorFcn) ( const char *
);
It should return RTDSuccess if the address is valid and
RTDFailure if invalid. In cases of failure, it is possible to generate a
trace event explaining the error found if so desired. The validation
should not be blocking since it can be called from the transporter
thread and the thread on which the RTDBase (or subclass) capsule
was incarnated.
Example:
The CRM transport defines the validation function as a static
function on the RTDCrmAddress class.
10. Define the class destructor as required.
Example:
The RTDCrmAddress class does not allocate any memory. The
default destructor generated by Rational Rose RealTime is
sufficient.
11. Assure that the class is sendable.
The C++ TargetRTS generateDescriptor property should be set to
"True." The attributes added to the subclass need to be of types that
can be sent (for example, your internal classes that have the
generateDescriptor property set to true, Rose RealTime classes such as
RTString or primitive data types such as int). You can also write your
own encode/decode functions.
Implementing the RTDTransportEndpointFactory Subclass
To implement the RTDTransportEndpointFactory subclass:
1. Review the description of the RTDTransportEndpointFactory class.
2. Define the implementation of the following abstract operations:
a. newTransportEndpoint
b. releaseTransportEndpoint
Integrating your Transport
User Guide - Rational Rose RealTime Connexis 319
Implementing the RTDTransportEndpoint Subclass
To implement the RTDTransportEndpoint subclass:
1. Review the description of the RTDTransportEndpoint class.
2. Review the description of the RTDConnexisApi class.
3. Decide if your transport is blocking or non-blocking.
4. Decide the format of your messages.
5. Define the constructors for the subclass.
The subclass requires a constructor that accepts the destination
address (RTDTransportAddress subclass), a unique identifier
(RTDConnectionId) and a pointer to the Connexis API.
6. Define the implementations for the following abstract operations:
a. bind
b. reset
c. sendData
d. queueData
e. sendQueueData
f. sendAudit
g. queueAudit
h. sendQueueAudit
i. reset
The bind and reset methods are called by the DCS. The remaining
functions that are called depend upon whether or not the transport
blocks when binding to an endpoint or sending a message.
If the transport can block when binding or sending messages,
provide full implementation for queueData, sendQueueData,
queueAudit, sendQueueAudit and stubs, sendData and sendAudit.
If the transport does not block when binding or sending messages,
provide full implementations for sendData, sendAudit and stubs,
queueData, sendQueueData, queueAudit, and sendQueueAudit.
Example:
For CRM, full implementation has been provided for all the
RTDCrmEndpoint abstract functions. Since the transport is
configured as blocking, only the queueData, sendQueueData,
queueAudit, and sendQueueAudit functions are called when a
message is sent.
Chapter 14 Using the Transport Integration Framework
320 User Guide - Rational Rose RealTime Connexis
For CDM, full implementation has been provided for all the
RTDCdmEndpoint abstract functions. Since the transport is
configured as non-blocking, only the sendData and sendAudit
functions are called when a message is sent.
7. Define the class destructor as required.
The class destructor should not be blocking. The reset function is
called prior to the release of an endpoint. If the cleanup of an
endpoint is blocking, it takes place in the reset function.
Implementing the RTDTransport Subclass
To implement the RTDTransport subclass:
1. Review the description of the RTDTransport class.
2. Review the description of the RTDTIF class.
3. Review the description of the RTDProfile class.
4. Review the description of the RTDConnexisApi class.
5. Decide the format of the listening point information the user
supplies.
6. Decide the format of your messages.
7. Decide the strategy that you will implement to listen on transport
endpoints.
8. Define the constructor RTDTransport subclass.
The constructor of your transport class registers itself with the
DCS. You may want to accept some additional configuration
information in the parameters of the constructor.
Example:
The constructor of the RTDCrmTransport receives a flag indicating
whether or not it should listen on the thread of the transporter or
create its own thread for listening.
9. Create a wrapper class for the RTDTransport subclass.
User models reference this class. This allows them to transparently
register the transport. It should have a single attribute that is a
pointer to the RTDTransport subclass. The dependency should be
a forward reference in the header and an inclusion in the
implementation. The constructor of the class should create a new
instance of the RTDTransport subclass.
10. Define the implementations for the following abstract operations:
Integrating your Transport
User Guide - Rational Rose RealTime Connexis 321
a. configureTransport
b. startTransport
c. cnxDump
d. cnxHelp
e. shutdownTransport
11. Define the listener functionality required by your transport.
Building the Transport Integration
To build the transport integration:
1. Create a C++ Library Component.
The Reference tab contains the package(s) containing the
Transport Integration classes just implemented. It should not
contain any of the classes in the RTDTransportIntegrationClasses
logical package.
Set any other build information specific to your transport (for
example, the inclusion path for your header files of the transport,
libraries the integration depends on, etc.)
See Connexis Customization Reference on page 261 for
information on the compiler flags required to enable metrics
collection and tracing.
2. Create a dependency from your C++ Library Component on the
TransportIntegrationFramework component in the
RTDTIFComponents component package.
3. Build your C++ library component.
The header file generated for the wrapper class and the library built
should be placed in a location available to the models using the
transport.
Packaging the Transport Integration
Now that the Transport Integration library has been built you will want
to try using the transport in a the DCS model. You will need to create
some interfaces in order to make use of the library in another RoseRT
application (refer to the "Generating and Sharing Library Interfaces
chapter in the Rational Rose RealTime, C++ Reference).
Chapter 14 Using the Transport Integration Framework
322 User Guide - Rational Rose RealTime Connexis
Using the Transport Integration in Another Model
To use the transport integration in another model:
1. Share into the other model the logical and component packages
just created (refer to the "Generating and Sharing Library
Interfaces chapter in the Rational Rose RealTime, C++ Reference).
2. In the capsule that contains the RTDBase capsule (or a subclass
contained in that capsule), create an association with the type of
your RTDTransport wrapper class.
3. On a component diagram, create a dependency from the executable
component on the Transport Integration external library
component.
4. Prepare documentation that describes the addressing format and
any recommended parameter settings.
Testing the Transport Integration
To test the transport integration:
1. Test your transport integration with a simple model.
Example:
Modify an example model that is known to work (BasicTest) with
CDM or CRM to make use of your transport.
2. Test your Transport Integration as much as possible before
including in a complex application. This might include testing in
the following areas:
a. using the locator with your transport as the preferred transport
(modify HelloConnexis)
b. transport failures and subsequent recovery
c. errors in command line arguments, and registration strings
d. heavy load situations
TIF Classes
The following section describes the Transport Integration Framework
classes that are to be subclassed.
TIF Classes
User Guide - Rational Rose RealTime Connexis 323
RTDTransportAddressFactoryThe purpose of the address factory is to
create and release instances of the RTDTransportAddress subclass.
The functions should be re-entrant since addresses may be created
and released by multiple threads. You can use new and delete to create
the addresses, or you might want to use your own memory
management routines to efficiently create and release addresses. The
four operations that must be implemented in the subclass are:
Function
RTDTransportAddress * newTransportAddress( const RTDTransportId &
addrType, const char * const addr)
Description
This function is responsible for constructing an instance of the
RTDTransportAddress subclass from a string representation of an address.
The type supplied is the one that was assigned to the transport at
configuration time. In the event you have more than one registered
transport sharing the same address factory, you will be able to determine
which transport address subclass to create. The address string supplied
will have been validated previously by the address validation function
supplied for the transport. The string representation supplied will include
the protocol.
Example:
The crm address factory RTDCrmAddressFactory uses new to create
instances of RTDCrmTransportAddress. It receives a string of the form
"crm://<host>:<port>" (ie. "crm:myhost:9000" or
"crm:123.111.11.22:9000"). It will supply the ID and addr values to the
RTDCrmAddress constructor. The cdm address factory performs similar
processing.
Chapter 14 Using the Transport Integration Framework
324 User Guide - Rational Rose RealTime Connexis
Function
RTDTransportAddress * newTransportAddress( const
RTDTransportAddress & address)
Description
This function is responsible for constructing a copy of the transport address
instance supplied. The instance supplied will be the transport specific
subclass of RTDTransportAddress. In the event that you have registered
your factory with more than one transport, the class RTDTransportAddress
has a method transportId() which will return the ID of the transport the
address represents.
Example:
The crm address factory RTDCrmAddressFactory uses the operator new
and the RTDCrmAddress copy constructor to construct a copy of the
address supplied. Because the copy constructor of RTDCrmAddress is
used, the cast address must be of type "const RTDCrmAddress &" prior to
invoking it.
The cdm address factory performs similar processing.
TIF Classes
User Guide - Rational Rose RealTime Connexis 325
RTDTransportAddress
The purpose of RTDTransportAddress is to provide a common string
representation of an address for use in the DCS as well as a transport
dependent representation of the address for use by the transport
integration.
Function
RTDTransportAddress * newLocalAddress( const RTDTransportId & type)
Description
This function is responsible for constructing the RTDTransportAddress
subclass that represents the local endpoint address (for example, the
address at which this component instance can be reached at). Essentially
this is the resolved result of the information supplied via the CNXep
parameter.
This address returned is used to determine whether explicit addresses are
local. The string representation of the address returned is used when
publishing services to the locator. The string format of the address (for
example, the result of the endpoint() function) will be used by the
application when publishing SPPs. It is a good idea to ensure the address
supplied is distinct. The address returned is also used when performing
loopback processing.
Example:
The RTDCrmTransport class creates during startup an instance of
RTDCrmAddress that represents the local listening address. The
newLocalAddress function calls newTransportAddress with the local
listening address to obtain a copy. The cdm address factory performs
equivalent processing.
Function
void releaseAddress( RTDTransportAddress * & address )
Description
The DCS transporter will call this function to release the addresses
provided through the new functions above. This allows you to reclaim
storage allocated for the address.
Example:
The RTDCrmTransport class uses delete to release the RTDCrmAddress
instance. It also sets the address pointer to zero for safety. The cdm address
factory performs equivalent processing.
Chapter 14 Using the Transport Integration Framework
326 User Guide - Rational Rose RealTime Connexis
The class is designed to be sendable and the subclass must also be
designed to be sendable. The class will only be sent within the process
in which it was created, not to other processes therefore the context
information for local, resolved does not need to be re-determined after
a send. It is sent in messages only when conveying the results of the
resolve.
The base class address attributes are:
Attribute
RTDTransportId _transportId
Description
This is the ID assigned to the transport when it was registered. It is typically
used internally to lookup the properties of the transport and for reporting
metrics. This should not need to be updated by the subclass.
Attribute
RTString _endpoint
Description
The string representation of the address supplied. The string is what was
supplied during an explicit sap registration with the "dcs:" prefix removed
and the service name (and preceding "/" removed). This should not need to
be updated by the subclass
Attribute
bool _local
Description
Identifies if this address is equivalent to the listening address of the
component instance. If the address matches the address that the transport
is currently listening on, you should set this flag to true. Often the decision
of whether or not an address is local or not can only be made after the
address is resolved.
TIF Classes
User Guide - Rational Rose RealTime Connexis 327
Constructors
The subclass requires two constructors. One accepts the transport ID
and a string representation of the address and the other is a copy
constructor.
When constructing from a string representation, you can assume the
string has been previously validated. The constructor is expected to
construct the RTDTransportAddress base class with the transport ID
and string.
The constructor should then determine if the address is resolved. If the
address is not resolved, _isResolved and _originalAddressWasResolved
flags should be set to false. The DCS transporter will call the resolve
function from a helper thread or call setResolved later. If the address is
already resolved, the _isResolved and _originalAddressWasResolved
flags should be set to true.
Attribute
bool _valid
Description
Identifies if the address is valid or not.
Attribute
bool _isResolved
Description
Identifies if the address requires resolution or not.
Attribute
bool _originalAddressWasResolved
Description
Identifies if the string address from which the object was constructed was
resolved or not. An address may originally be unresolved and then later
become resolved (_isResolved becomes true). Addresses that were originally
unresolved may be re-resolved during transport recovery (depending on the
transports configuration).
Chapter 14 Using the Transport Integration Framework
328 User Guide - Rational Rose RealTime Connexis
If an address is resolved, it can be determined if the resolved address
is local. A local address is an address that is equivalent to the address
at which the current process is listening.
Example:
In the CRM case, the constructor parses the string supplied and
extracts the IP address if present and the port number. If the address
is resolved, it compares this address against the address that
represents the local address (a public static attribute of
RTDCrmTransport) to determine if it matches the listening address of
the process. The _local flag is set accordingly. For example, if the
application was listening at crm://192.123.012.22:9080 and the
address supplied was "crm://192.123.012.22:9000" the address
resolves to the same machine, but not the same port (not the same
process), so _local would be false.
The copy constructor is expected to construct the base class with a
RTDTransportAddress object reference. It should also copy across any
of the subclass's information. In the CRM case, the IP address and port
information are copied across along with the unresolved host name.
Abstract functions requiring an implementation:
Function
const char * unresolvedName()
Description
If an address may be unresolved, this function must return the unresolved
portion of the address. This value is used during comparisons when
searching the cache for a resolved address, and for finding endpoints
waiting for the result of the resolution. If the unresolved name is a
substring of the _endpoint string, you will find it easiest to store the value
in a separate RTString.
Note: RTString is used so that the class can easily be sent.
Example:
For CRM, if _endpoint was "crm://ahost:9000," "ahost" would be the result.
TIF Classes
User Guide - Rational Rose RealTime Connexis 329
Function
RTDResult resolve()
Description
This function should resolve the unresolved portion of the address and
update the internal representation of the address, determine if the resolved
address is local (for example, the listening point of the component instance)
and set the _isResolved flag. The return value indicates success or failure.
This function will be called on a helper thread and its functionality can be
blocking. The resolve can involves looking up a name in a naming service,
looking up an IP address for a host name, etc. The resolve is expected to
only be concerned with the unresolvedName() portion of the address
supplied during construction.
If the unresolved portion of the address can be successfully resolved, the
resolved address should be further examined to see if it is the same address
that the transport is currently listening on and set the _local flag
accordingly. The _isResolved flag should be set to true and RTDSuccess
returned.
If it can not be resolved, the _isResolved and _local flags should be set to
false and RTDFailure returned. In the failure case, it is strongly
recommended that you generate an informative trace event so the users of
your transport can determine that the address was not resolved.
Re-resolution of the address will be performed after a delay depending on
the interest in the address and your configuration (for example, the
function can be called multiple times in both success and failure
situations). Multiple threads will not call the same function on an instance
of the class.
Example:
For CRM, the host name is looked up to determine the IP address. The
sameAddress function is called with the listening point of the transport (a
static attribute of the RTDCrmTransport class) to determine if it is local or
not. It will return RTDSuccess if it can determine the IP address and
RTDFailure if it fails. The IP address is stored in the RTDCrmAddress class.
When resolving the address, it only looks at the host name and ignores the
port.
Chapter 14 Using the Transport Integration Framework
330 User Guide - Rational Rose RealTime Connexis
Function
void setResolved( const RTDTransportAddress& resolvedAddress)
Description
This function is supplied the results of a resolved address. It should update
the internal representation with the results of the resolution. It must set
the _isResolved flag to true. At this time you should also determine if the
address is local, that is it is the address the transport is listening at, and
set the _local flag accordingly.
Example:
For CRM, the results of resolving a host name is the IP address. In this
function the IP address is only copied. The port number is not copied since
it is not part of the information being resolved. The _isResolved flag is also
set to true. It is determined if the address is local or not by calling the
sameResolved function with the listening point. The listening point is a
static attribute of the RTDCrmTransport class.
Function
RTDResult sameResolved( const RTDTransportAddress& rhs )
Description
This function should compare the internal transport specific representation
of the rhs against this objects internal representation, to see if they are the
same. RTDSuccess is to be returned if the address is the same. RTDFailure
is to be returned if the address is different.
If the transport does not have an internal representation of the address and
only uses the endpoint string with which it was created, the function
should return whether or not the two endpoint strings are equivalent (for
example, the result of sameUnresolved(rhs) ). The DCS only calls this
function if the rhs is the same transport type as the object.
Example:
In the CRM case the IP address and port numbers are compared to see if
they are the same.
TIF Classes
User Guide - Rational Rose RealTime Connexis 331
RTDTransportEndpointFactory
The purpose of the endpoint factory is to create and release instances
of the RTDTransportEndpoint subclass. The functions should be re-
entrant since midpoints may created and released by multiple threads.
You can use new and delete to create the addresses, or you might want
to use your own memory management routines to efficiently create and
release addresses.
The abstract operations that must be implemented in the subclass are:
Function
RTDTransportEndpoint* newTransportEndpoint(const
RTDTransportAddress &, const RTDConnectionId &, const
RTDConnexisAPI *)
Description
This function is responsible for constructing an instance of the
RTDTransportEndpoint subclass. The transport Address and ConnectionId
are required by the underlying RTDTransportEndpoint subclass.
Example:
For CDM, this function will construct a new instance of RTDCdmEndpoint
off of the heap with the information supplied.
For CRM, the function will construct a new instance of RTDCrmEndpoint
off of the heap with the information supplied. Due to the nature of the CRM
transport, a list of endpoints is maintained. Since multiple threads can
create and release a CRM endpoint, the update of the list is protected by a
mutex.
Chapter 14 Using the Transport Integration Framework
332 User Guide - Rational Rose RealTime Connexis
RTDTransportEndpoint
This class is responsible for the binding and resetting the endpoint. It
is also responsible for sending messages.
If the transport profile indicates that the transport is blocking, the
functions will be run on one of the helper threads. Any of the helper
threads may be calling the functions, but only one helper thread at a
time will call the bind and send functions. If it is a non-blocking
transport, the functions will be run on the thread of the transporter.
There are a number of abstract operations that need to be implemented
for this class. When implementing these operations, you should update
the metrics regarding the messages sent and received. Metrics
regarding failed messages are collected by the DCS. You will also want
to use trace macros to log the encoded data sent. Errors and other
events should also be reported using the trace macros to provide
detailed information to the users of the transport. Information logged
with the trace macros is available in the viewer. See Connexis
Customization Reference on page 261, for the compiler options
required for collecting metrics and doing tracing.
Function
void releaseEndpoint( RTDTransportEndpoint *& )
Description
This function is responsible for releasing the storage allocated for the
endpoint.
Example:
For CDM, the endpoint was allocated from the heap and will be deleted. The
pointer supplied is set to 0 for safety sake afterward.
In the CRM case, while the DCS is no longer referencing the endpoint, the
CRM listener may still be referencing it. The listener is notified that the
endpoint is no longer of interest and the deletion request is in a sense
deferred until after the listener is no longer referencing the endpoint. The
pointer supplied is still set to 0 for safety sake.
TIF Classes
User Guide - Rational Rose RealTime Connexis 333
The base class address attributes are:
Constructor
The subclass requires a constructor that accepts the destination
address (RTDTransportAddress subclass), a unique identifier
(RTDConnectionId) and a pointer to the Connexis API. The base class
constructor does not require as an argument the API pointer. You may
want to keep the pointer for ease of access to the API. The transport
address may or may not be resolved at construction time. The DCS will
update the address later if unresolved. It will be resolved before bind
and send functions are called. The DCS will also bind the endpoint
prior to sending the initial message. The connection ID is a unique ID
that is supplied to the endpoint for identification purposes. If there is
a need to asynchronously notify the DCS of failures, this connection ID
must be supplied.
Base Class Attribute
RTDConnectionId cid
Description
Unique identifier for the endpoint. The DCS will supply the unique value to
the endpoint factory.
Base Class Attribute
RTDTransportAddress * destination
Description
The address of the component instance the endpoint is to communicate
with.
Base Class Attribute
bool bound
Description
Indication of whether the endpoint is bound or not. The endpoint subclass
is responsible for maintaining this value.
Chapter 14 Using the Transport Integration Framework
334 User Guide - Rational Rose RealTime Connexis
Abstract functions requiring an implementation are as follows:
Function
RTDResult bind()
Description
This function returns the result of the bind. The bind function will be called
before any messages are to be sent by the endpoint. The bind function is
called just once (independent of the number of virtual circuits using the
endpoint). After a transport failure, it will be called after the reset to put the
endpoint back into service. The bound attribute must be updated to reflect
the results of the bind.
Example:
For the CRM transport it will perform a connect to obtain a connection to
the destination identified by the transport address subclass.
For the CDM transport, the bound flag is set to true. There is no bind work
required for the underlying UDP/IP transport.
Function
void reset()
Description
This function will be called to allow the endpoint to reset itself (unbind).
After a reset, the destination address may be updated with a re-resolved
address, the endpoint may be rebound, or the endpoint may be released.
This function can be blocking if the transport has been configured as
blocking. The releaser (destructor) of the subclass should not be blocking.
TIF Classes
User Guide - Rational Rose RealTime Connexis 335
Function
RTDWriteResult sendData(RTDDataHdr &, const char * signal, void * data,
const RTObject_class * type)
Description
This function will be called if the transport is non-blocking to send a
message. The header information is expected to arrive intact at the
destination. The header will indicate the type of data message (whether the
originating address is required), the preferred encoding for the data and
information about the virtual circuit.
Typical processing for this function involves creating a message and
sending it. You can use the RTDMblk and RTDMemPool classes to make
use of buffers setup through the -CNXtbp parameter. Since the transport is
non-blocking you may want to obtain a single buffer during startup and use
it exclusively. Creating the message will involve placing the information to
be sent in your message layout. To encode the data object to be sent, use
the encode API function. You will want to encode the other information in
the message if you are not operating in a homogenous environment. You
can also encrypt or compress the message at this time.
Just prior to sending the message, you should use the trace macros to log
the data being sent. After the message is successfully sent, you should
update the metrics with the information about the message sent. The write
result returned by the function indicates success, transport failure, or
transport failure/recovery.
When transport failure is returned the subscribers (SAPs) registered for the
destination will become unbound. Once the DCS is able to put the endpoint
back into service (for example, a reset, a successful bind), the DCS will re-
establish the virtual circuit for the subscribers. All publishers (SPPs) that
were bound to the destination will become unbound and available for use
by other subscribers.
Transport failure/recovery means that the send of the message failed, but
the transport has been recovered (for example, fail over). For example, if
your transport address syntax supported alternate destinations, when one
address is determined to have failed, the endpoint could fail over to the next
address. The subscribers and publishers will become unbound as in a
Transport failure situation. The DCS will immediately re-establish the
virtual circuits for the subscribers.
Chapter 14 Using the Transport Integration Framework
336 User Guide - Rational Rose RealTime Connexis
Function
RTDResult queueData( RTDDataHdr &, const char * signal, void * data,
const RTObject_class * type, mblk_t *& queueData, unsigned long &
queueDataSize)
Description
This function will be called if the transport is blocking. It is expected to
prepare information to be queued in preparation to be sent later. This
function is expected to encode at a very minimum the data object into a
mblk. The header, signal, and the queue data are maintained in a queue
until it is time to send the data. The function is called from the transporter
thread so it should not block.
The function should return a pointer to the mblk containing the encoded
data and the size of the information in the mblk. If the message is to be
queued to be sent later (for example, a data object successfully encoded),
then RTDSuccess should be returned. Otherwise RTDFailure should be
returned and the message will be dropped.
Example:
The CRM transport calculates the offset in the message at which to place
the encoded data. It then calls the encode API function to encode the data
object. If there is no data (for example, the application is sending just a
signal, or scalar data) to be sent after the encoding, it returns RTDSuccess.
It will obtain an mblk for the header information when it is time to send the
data (CRM optimizes its use of the buffers). If there is data, then the header
information is placed at the start of the mblk.
TIF Classes
User Guide - Rational Rose RealTime Connexis 337
Function
RTDWriteResult sendQueueData( RTDDataHdr &, const char * signal,
mblk_t * queueData, const unsigned long& queueDataSize)
Description
This function will be called if the transport is blocking to send the queued
data. The function is called from one of the helper threads and may block.
The header information, signal and mblk previously created in the queue
data step are supplied. The result indicates success, transport failure,
transport failure/recovery. The caller of the function will free the mblk
passed as an argument.
You will want to encode the other information in the message if you are not
operating in a homogenous environment. You can also encrypt or compress
the message at this time.
Just prior to sending the message, you should use the trace macros to log
the data being sent. After the message is successfully sent, you should
update the metrics with the information about the message sent. The write
result returned by the function indicates success, transport failure, or
transport failure/recovery.
When transport failure is returned the subscribers (SAPs) registered for the
destination will become unbound. After the DCS is able to put the endpoint
back into service (a reset, a successful bind), the DCS will re-establish the
virtual circuit for the subscribers. All publishers (SPPs) that were bound to
the destination will become unbound and available for use by other
subscribers.
Transport failure/recovery means that the send of the message failed, but
the transport has been recovered (fail over). For example, if your transport
address syntax supported alternate destinations, when one address is
determined to have failed, the endpoint could fail over to the next address.
The subscribers and publishers will become unbound as in a Transport
failure situation. The DCS will immediately re-establish the virtual circuits
for the subscribers.
Example:
The CRM Transport creates the message if an mblk containing the message
is not supplied. If an mblk is supplied the message was prepared in the
queueData function. The message is encoded and then sent. The message is
logged using the trace facilities and the metrics are updated.
Chapter 14 Using the Transport Integration Framework
338 User Guide - Rational Rose RealTime Connexis
Function
RTDWriteResult sendAudit(RTDAuditHdr &, void * data, const
RTObject_class * type)
Description
Similar to the sendData function except it is audit information being sent.
The resolved originating address must be available at the destination.
Function
RTDResult queueAudit( RTDAuditHdr &, void * data, const RTObject_class
* type, mblk_t *& queueData, unsigned long & queueDataSize)
Description
Similar the queueData function except it is audit data that is being
prepared to be queued. In most cases (100% if both ends have the same
release of Connexis) no data is ever sent in an audit message.
Function
RTDWriteResult sendQueueAudit( RTDDataHdr &, mblk_t * queueData,
const unsigned long& queueDataSize)
Description
Similar to the sendQueueData except it is for audit messages. Again the
resolve local address is to be known on the other side.
TIF Classes
User Guide - Rational Rose RealTime Connexis 339
RTDTransport
The primary responsibility of this class is to configure, start and
shutdown the transport. When a transport is registered with the DCS,
a pointer to an instance of this class must be supplied.
Function
RTDResult configureProfile( RTDTransportProfile &)
Description
During the DCS setup, this function will be called prior to starting the
transport to obtain additional configuration information. The information
supplied will be pre-populated with information supplied during
registration and from parameter parsing. You can override the information
provided by parameter parsing and can perform any necessary transport
specific validation of the parameter values. If the function returns a
RTDSuccess, the transport will be started.
Example:
The CRM transport saves the parameter information for later use. It then
fills in the profile received with information about the transport. This
includes creating the factory classes.
Function
RTDResult startTransport( const RTDConnexisAPI * )
Description
The purpose of this function is to allow the transport to initialize itself. API
supplied describes the interfaces to use to communicate with the DCS. This
function is called from the transporter thread during startup.
The function should return RTDSuccess or RTDFailure. If the RTDSuccess
is returned, the transport becomes available to the application. If it returns
RTDFailure, the transport will not be considered as started and can not be
used by the application. If the DCS was not able to start the transport, it
will not shut it down.
Example:
For CRM, the listening endpoint information is validated and a socket is
created to listen for incoming connections. Depending on how CRM was
configured a separate thread for the listener will be created or it will run on
thetransporters thread.
Chapter 14 Using the Transport Integration Framework
340 User Guide - Rational Rose RealTime Connexis
Function
RTDResult shutdownTransport( )
Description
The DCS transporter will call this function during shutdown. The address
and endpoint subclasses will been released prior to calling this function.
You can not call any of the DCS functions at this point. You are expected to
shutdown your transport cleanly and reclaim its resources. This includes
deleting the RTDTransportAddressFactory and
RTDTransportEndpointFactory objects supplied during configuration.
Function
void cnxDump( )
Description
This function will be called during startup if the end user of the application
has used the -CNXdump command line parameter. This allows you to dump
to the log any of the transport specific parameter setting that will be of use
to the end user. It will be called during the DCS startup after configuration
of the transport has taken place. Use the RTDTransport::log function to put
the messages safely to the log.
Function
void cnxHelp( )
Description
This function will be called during startup if the end user of the application
has used the -CNXhelp command line parameter. This allows you to put to
the long any information specific to using your transport. For example, this
would include information on command line parameters that your
transport supports, format of the CNXep parameter if applicable, etc. Use
the RTDTransport::log function to put the messages safely to the log.
TIF Classes
User Guide - Rational Rose RealTime Connexis 341
RTDTIF
Use this class utility to register the transport.
RTDTransportProfile
This class describes the transport to the DCS. It is initialized with
default values and any of the settings that can be overridden by
command line arguments. An instance of this class is provided during
the configuration of the transport. The attributes include:
Function
RTDResult registerTransport( const char * transportName, int
totalProtocols, char ** protocolList, RTDTransport * transport)
Description
Transports must be registered prior to starting the DCS. That is, prior to
the incarnation of RTDBase or related subclass (RTDBase_Locator,
RTDBase_Agent, RTDBase_Locator_Agent). See the RTDTransportProfile
class description for more information on transportName, totalProtocols
and protocolList. The transport parameter is an instance of the
RTDTransport subclass. During startup, the configure and startup
functions on the transport instance will be called.
Example:
During construction of the RTDCrm class, an instance of the
RTDCrmTransport class is created. The register method on this class is
called to have it register with the DCS. The static method
RTDTIF::registerTransport is called. The user must only create an instance
of the RTDCrm class prior to incarnating RTDBase or a related subclass.
Attribute
char * transportName
Description
The name of the transport supplied during registration
Attribute
int totalProtocols
Description
The number of protocols supported by the transport. This information was
supplied during registration.
Chapter 14 Using the Transport Integration Framework
342 User Guide - Rational Rose RealTime Connexis
Attribute
char * transportProtocols[totalProtocols]
Description
Array of the protocols supported by the transport This information was
supplied during registration.
Attribute
RTDTransportID *transportID
Description
The ID assigned by the DCS to this transport, during the registration
process.
Attribute
RTDTransportEndpointFactory * endpointFactory
Description
An instance of the endpoint factory subclass to be used by the DCS to
create endpoints.
Attribute
RTDTransportAddressFactory * addressFactory
Description
An instance of the address factory subclass to be used by the DCS to create
addresses.
Attribute
int (*RTDAddressValidatorFcn) ( const char * ) addressValidator
Description
Pointer to an address validation function. This will be called to validate the
address supplied in the registerSAP call.
TIF Classes
User Guide - Rational Rose RealTime Connexis 343
Attribute
RTObject_class * addressTypeDescriptor
Description
Pointer to the type descriptor of the RTDTransportAddress subclass. This is
required so that the address can be sent in messages. You should turn the
Generate Descriptor flag on for the RTDTransportAddress subclass,
Rational Rose RealTime creates a type descriptor with the name in the
format:
RTType_<name of your subclass>
Attribute
RTDResolveConfig addressResolutionConfig
Description
Contains information that governs how addresses should be resolved. It will
be initialized with values supplied by the user on the command line. The
fields contained are:
addressExpiry (-CNXtre) period in seconds. Basically the length of time
the address can be used in subsequent connect requests before
requiring that it be re-resolved. If zero, the address does not expire. It
will be re-resolved though if the transport recovery configuration
dictates it.
retryDelay (-CNXtrre) period in msecs. Basically the time (rounded up by
a factor of CNXtap) before the address should be re-resolved in the case
where the address resolution failed. If zero, a request to re-resolve the
address will be queued immediately.
Chapter 14 Using the Transport Integration Framework
344 User Guide - Rational Rose RealTime Connexis
Attribute
RTDTransportRecoveryConfig transportRecoveryConfig
Description
Contains information that describes how to recover from transport failures.
It will be initialize with values supplied by the user on the command line.
The fields contained are:
bindFailureRetryDelay (-CNXtbrd) in msec. Indicates after a bind fails,
how long to delay before re-attempting to put the connection back in
service (by re-resolving or rebinding).
resolveAfterTransportFailure (-CNXtraf) indicates after a transport
failure whether the address should be re-resolved. This is applicable if
the address was originally unresolved. If the address is re-resolved, it
will also be rebound irrespective of the rebindAfterTransportFailure
setting.
Attribute
transportNotifiesRecovery
Description
After a transport failure, indicates if the transport will notify of a recovery
(after a re-resolve and re-bind as applicable are performed). This allows
them to implement their own transport auditing if ours is not appropriate. If
true the endpoint remains out of service until transport recovery
notification is received. No messages including audit messages will be sent
on the endpoint. If false then the connection goes back into service after a
successful bind. If false and rebindAfterTransportFailure is also false and
the address does not require re-resolving (originally resolved or
resolveAfterTransportFailure is false) then the connection will go
immediately back into service.
Attribute
RTDTransportAuditType periodicAuditType
Description
The type of audit to be performed on a periodic basis. The types of audits
available are handshakeAudit, connectionAudit, or noAudit (requests no
auditting be done). See the Verifying Connections section in the Engineering
chapter for more information on periodic audits.
TIF Classes
User Guide - Rational Rose RealTime Connexis 345
Attribute
RTDHandshakeAuditConfig handshakeAuditConfig
Description
Configuration for the handshake audit. It is ignored if the periodic audit
type is not handshakeAudit. The configuration includes:
auditISGranularity (-CNXtcapi) Used to determine how many CNXtap
periods constitute an audit period when an endpoint is in service.
auditOOSGranularity (-CNXtcapo) Used to calculate how many CNXtap
periods constitute an audit period when an endpoint is out of service.
auditsPassedForIS (-CNXthcai) Number of successful handshakes
needed for an out of service endpoint to go back into service.
auditsPassedForOOS (-CNXthcao) Number of consecutive failed
handshakes (periods in which an I Am Alive response was not received)
which will trigger an endpoint to transition out of service.
auditsFailedForReresolve (-CNXtrhaf ) Number of consecutive failed
handshakes after which the destination address of the endpoint should
be re-resolved. If the destination address of the endpoint was originally
resolved, this has no effect.
YANRxForceOOS Indicates if a YAN (You Are Not responsive) audit
message should transition the endpoint out of service. This is typically
set to true.
YANTxEnabled Indicates if a YAN (You Are Not responsive) audit
message should be sent when an endpoint transitions out of service.
This is typically set to true.
piggyBackEnabled - Indicates if user messages should be counted as
activity during an audit period. For efficiency purposes this is typically
on.
Chapter 14 Using the Transport Integration Framework
346 User Guide - Rational Rose RealTime Connexis
Attribute
RTDConnectionAuditConfig connectionAuditConfig
Description
Configuration for the connection audit. It is ignored if the periodic audit
type is not connectionAudit.
The configuration includes:
auditISGranularity (-CNXtcapi) - Determines how many CNXtap periods
constitute an audit period when an endpoint is in service.
piggyBackEnabled - Indicates if user messages should be counted as
activity during an audit period. For efficiency purposes this is typically
on.
Attribute
bool useCustomController
Description
Identifies whether the transport integration would like to use a custom
controller. If true, the transport can specify wait and wakeup functions for
the DCS Transporter's peer controller. Using a custom controller allows the
transport integration to perform listening operations on the same thread as
the DCS Transporter thus avoiding a context switch on incoming messages.
Since there is one Transporter capsule (and thread), only one set custom
controller functions can be specified (over all the transports). By default,
useCustomController is true if no other configured transport has indicated
it is using a custom controller. Transports are configured sequentially in
the same order as they are registered. See the Rational Rose RealTime
documentation for further information on Peer Controllers and Custom
Controllers.
TIF Classes
User Guide - Rational Rose RealTime Connexis 347
Attribute
RTDResetAuditConfig resetAuditConfig
Description
Configuration of the reset audit. See the Verifying Connections section in
the Engineering chapter for more information on the reset audit. The
configuration includes:
enableResetAudit (-CNXtrae) identifies if the reset audit is to be
performed. resolveAfterResetDetected indicates if the address should be
resolved again before placing the connection back in service after a
reset. The address will only be re-resolved if it was originally unresolved
when specified in the registration string. If the address is re-resolved, it
will be rebound afterwards.
rebindAfterResetDetected identifies if a bind should take place before
putting the connection back into service.
Attribute
bool blockingTransport
Description
Identifies if transport blocks on binds or sending messages. This
determines if the bind/send calls should be performed from the
transporter's thread or by the pool of helper threads.
Attribute
void (*RTDCustomControllerFcn) ( ) customControllerWaitFunction
Description
Wait function to used if using a customController.
Attribute
void (*RTDCustomControllerFcn) ( ) customControllerWakeupFunction
Description
Wakeup function to be used if using a customController.
Chapter 14 Using the Transport Integration Framework
348 User Guide - Rational Rose RealTime Connexis
RTDConnexisAPI
An instance of this class is filled in by the DCS as part of the transport
registration process. A pointer to the instance is supplied to the
transport at initialization time and each time an instance of the
RTDTransportEndpoint subclass is created. It contains the DCS
interfaces available for use by the transport.
Attribute
void (*RTDCustomControllerFcn) ( ) customControllerProcessFunction
Description
Process function to be used if using a customController.
Attribute
RTDTransport * transport
Description
Subclass of the RTDTransport class that will be called to configure, start,
shutdown the transport. This has been set based on the information
supplied during registration.
Attribute
RTDTransportParameters parameters
Description
Contains current parameter settings for configuration information that may
be of interest to the transport. The parameters settings supplied are:
RTString endpoint - (-CNXep)
long maxMsgSize - (-CNXtmts)
short firstMsgSize - (-CNXtfms)
int threadPriority - (-CNXtp)
Attribute
RTDTransportId transportId
Description
ID assigned to the transport. To be used when reporting metrics.
TIF Classes
User Guide - Rational Rose RealTime Connexis 349
Attribute
RTDResult (*RTDRegisterEndpointFcn) ( RTDTransportEndpoint *)
registerEndpoint
Description
Allows the transport integration to register a endpoint created with the DCS
Transporter. When there is no further interest in the endpoint, it will be
released by the transporter through the transport endpoint factory for the
transport.
Example:
The CRM transport may receive connect requests from other processes.
When the connection is accepted, a socket is created. The socket
information is placed in an endpoint representing the other destination and
registered with the DCS transporter.
The CDM transport does not make use of this function. Initial messages
from other component instances are passed like any other message to the
DCS transporter. The first time the transporter sends a message to the
originating destination, an endpoint will be created for the destination
address via the address factory for the transport.
Attribute
RTDResult (* RTDDataMsgReceiveFcn) ( const RTDMessageStatus status,
const RTDDataHdr &, const char * signal, void ** data, const
RTObject_class * type) dataMsgReceive
Description
When a RTDDataMsg message is received, the Transport Integration should
call this function supplying the data message. It will need to extract the
information from the message and decode the data object sent. If the
decode failed (unknown encoding, etc. It can be conveyed in status). The
other information is equivalent to what was passed on the sendData or
queueData call. The caller of this function is responsible for releasing the
storage for status, header and signal only (not the data and not the type).
Chapter 14 Using the Transport Integration Framework
350 User Guide - Rational Rose RealTime Connexis
Attribute
RTDResult (* RTDDataWithSenderMsgReceiveFcn) ( const
RTDMessageStatus status, const RTDDataHdr &, const char * signal, void
** data, const RTObject_class * type, RTDTransportAddress *)
dataWithSenderMsgReceive
Description
When a RTDDataWithSenderMsg message is received, the Transport
Integration should call this function or the dataWithSenderCidMsgReceive
function supplying the data message along with the resolved address of the
sender. The Transport Integration will need to extract the information from
the message and decode the data object sent. If the decode failed (unknown
encoding, etc. it can be conveyed in status). The other information is
equivalent to what was passed on the sendData or queueData call. The
caller of this function is responsible for releasing the storage for status,
header, signal and transport address (not the data and not the type).
Attribute
RTDResult (* RTDDataWithSenderCidMsgReceiveFcn) ( const
RTDMessageStatus status, const RTDDataHdr &, const char * signal, void
** data, const RTObject_class * type, RTDTransportAddress *, const
RTDConnectionId &) dataWithSenderCidMsgReceive
Description
When a RTDDataWithSenderMsg message is received, the Transport
Integration should call this function or the dataWithSenderMsgReceive
function supplying the data message along with the resolved address of the
sender and the connection ID of the endpoint the message was received on.
The Transport Integration will need to extract the information from the
message and decode the data object sent. If the decode failed (unknown
encoding, etc. it can be conveyed in status). The other information is
equivalent to what was passed on the sendData or queueData call. The
caller of this function is responsible for releasing the storage for status,
header, signal, transport address and connection ID (not the data and not
the type).
TIF Classes
User Guide - Rational Rose RealTime Connexis 351
Attribute
RTDResult (* auditMsgReceiveFcn) ( const RTDMessageStatus, const
RTDAuditHdr &, void **, const RTObject_class *, RTDTransportAddress *)
auditMsgReceive
Description
When an audit message is received, the transport should call this function
(or the auditWithCidMsgReceive function) supplying the audit message and
the resolved address of the sender. The Transport Integration will need to
extract the information from the message and decode the data object sent.
If the decode failed (unknown encoding, etc. it can be conveyed in status).
The other information is equivalent to what was passed on the sendAudit or
queueAudit call. The caller of this function is responsible for releasing the
storage for status, header and transport address not the data and not the
type).
Attribute
RTDResult (* auditWithCidMsgReceiveFcn) ( const RTDMessageStatus,
const RTDAuditHdr &, void **, const RTObject_class *,
RTDTransportAddress *, const RTDConnectionId &)
auditWithCidMsgReceive
Description
When an audit message is received, the transport should call this function
(or the auditMsgReceive function) supplying the audit message, the resolved
address of the sender and the connection ID of the endpoint on which the
message was received. The Transport Integration will need to extract the
information from the message and decode the data object sent. If the
decode failed (unknown encoding, etc. it can be conveyed in status). The
other information is equivalent to what was passed on the sendAudit or
queueAudit call. The caller of this function is responsible for releasing the
storage for status, header and transport address and connection ID (not the
data and not the type).
Chapter 14 Using the Transport Integration Framework
352 User Guide - Rational Rose RealTime Connexis
Attribute
RTDResult (* encodeFcn) (void * unencodedData, const RTObject_class *
dataType, const unsigned char preferredEncoding, unsigned char &
encodingUsed, mblk_t *& mblockOfEncodedData, const unsigned long
offset, unsigned long & encodedDataSize, unsigned long & dataVersion,
const unsigned long firstMsgSize, const unsigned long maxEncodedSize )
encode
Description
This function will encode the "unencodedData" data object of type
"dataType" using the "preferredEncoding". It will return the actual encoding
used in "encodingUsed". This "encodingUsed" information should be
provided in the message sent (we suggest you store the value back in the
header). It will also supply the "dataVersion" (sometimes used to store other
information). This information should be provided in the message sent (we
suggest you store the value back in the header). You may supply a mblk to
encode the data into, or have the encode routine find an appropriately sized
mblk. The encoding will return "mblockOfEncodedData" the mblk in which
the data was encoded along with "encodedDataSize" the size of the encoded
data. "offset" dictates where in the buffer the data should be encoded. This
allows you to reserve room in the mblk for your message header
information. The firstMsgSize and maxEncodedSize identify the initial
buffer size to obtain and the maximum encoded size allowed.
If you use the encode function to encode the data, you must use the decode
function to later decode it (even if the encodedDataSize is zero).
Attribute
RTDMessageStatus (* decodeFcn) (const unsigned char dataFormat,
unsigned char * encodedData, const unsigned long encodedDataSize, const
unsigned long dataVersion, void** decodedData, const RTObject_class **
decodedDataType) decode
Description
This function will decode the "encodedData" data that has been encoded
using "dataFormat" encoding. "dataFormat" corresponds to the
"encodingUsed" value returned by the encode function. "encodedDataSize"
identifies the size of the data. Decode returns "decodedData" (pointer to
data object) and "decodedDataType" (type of object). The return value
indicates the success of decoding the message. It should be passed to the
DCS when supplying the message received.
TIF Classes
User Guide - Rational Rose RealTime Connexis 353
Attribute
void (* RTDTransportNotifyFcn) (const RTDConnectionId &)
transportFailure
Description
This function should be used by the Transport Integration to report
asynchronously a transport failure.
Note: The failures that occur during sends should not use this function. The
return code of the send function reports the failure. The connection ID
supplied identifies the endpoint which failed.
Attribute
void (* RTDTransportNotifyFcn) (const RTDConnectionId &)
transportFailureRecovery
Description
This function should be used by the Transport Integration to report
asynchronously a transport failure and subsequent recovery. Note that
failures and recoveries that occur during sends should not use this
function. The send function's return code reports the failure and recovery.
The purpose is to report the transport failed, but it has been re-established
however there is no guarantee that it is with the same process. The
subscribers (SAPs) and publishers (SPPs) will be unbound. The DCS will re-
establish the virtual circuits for the subscribers.
Attribute
void (* RTDTransportNotifyFcn) (const RTDConnectionId &)
transportRecovery
Description
This function should be used by the Transport Integration to report
asynchronously transport recovery. This function should only be used if the
Transport Integration has been configured with "transportNotifiesRecovery"
as true. The DCS will mark the endpoint as back in service and will re-
establish the virtual circuits for the subscribers.
Chapter 14 Using the Transport Integration Framework
354 User Guide - Rational Rose RealTime Connexis
Attribute
void (* RTDNotifyIncompatibleFcn) (const RTDTransportAddress *)
notifyIncompatibleRequest
Description
This function should be used by Transport Integration to send notification
to the sender that it did not understand the message received (incompatible
Transport Integration message formats). The caller of the function is
responsible for releasing the address. The virtual circuit will be taken out of
service.
User Guide - Rational Rose RealTime Connexis 355
Appendix A
Comparison of TCP/IP and UDP/IP
TCP/IP and UDP/IP are socket based IPC protocols. CRM is based on
TCP/IP and CDM is based on UDP/IP. CRM and CDM reflect the
properties of the underlying transports. Conceptually speaking, socket
based IPC provides an interface similar to that of file I/O. Initially, a
system call is used to create a socket. Internally, each process
maintains a descriptor table, and whenever a socket is created,
internal data structures are created and associated with the
descriptor. The descriptor can then be used to manipulate the
associated socket, just as one would use the file descriptor for
performing file I/O. This hides the complexity of the inter-process
communication by providing a very simple and familiar interface.
Both TCP and UDP have their advantages and disadvantages, and one
or the other may be more suitable to a specific application. The main
characteristics of the socket types are discussed below:
Transmission Control Protocol (TCP):
TCP uses IP, which provides the packet delivery services. TCP has
the following characteristics:
Connection-oriented
Reliable
Flow-controlled
User Datagram Protocol (UDP):
UDP is also implemented on top of IP, and exhibits the following
characteristics:
Connectionless
Unreliable (i.e. no guarantees regarding delivery)
Appendix A Comparison of TCP/IP and UDP/IP
356 User Guide - Rational Rose RealTime Connexis
The main difference between UDP and TCP from an application
perspective is that TCP/IP is connection-oriented and reliable while
UDP is connectionless and unreliable. The fact that TCP/IP is
connection-oriented makes it impractical when you are dealing with a
large number of connections.
For example assume that you were designing an IPC mechanism that
was being used to provide communication between 100 nodes on a
network. Further assume that each of these nodes needed to talk with
every other node. This would result in a grand total of 4950
connections, each with a socket at both ends of the connection, for a
total of 9900 sockets. Each socket requires an input and output buffer.
Typical sizes for send and receive buffers for TCP/IP implementations
range between 2K and 16K. These buffer sizes are configurable, but
this would result in a memory usage across the entire system of:
2K x 2 buffers x 99 sockets per node x 100 = 40M (for the 2K
buffer)
16K x 2 buffers x 99 sockets per node x 100 = 317M (for the 16K
buffer)
This would result in per node memory usage of approximately 400K to
3M per node. This may be unacceptable for some embedded
applications.
If UDP were used in this case these memory issues would not exist.
With UDP, there is no acknowledgment of received packets. This
usually means that you have to build the error handling and reliability
specific code into the application.
There are also many cases where the error rate of the UDP connection
is so low that the unreliable nature of UDP is not an issue. For
example, if the network was operating over a backplane, it is quite
common for the bus error rate to be less than the software error rate.
Other examples of situations where UDP may be required (or
preferable) to TCP/IP are:
UDP must be used if the application uses broadcasting or
multicasting of data packets.
There are also some implementations of TCP that are very slow in
comparison to UDP.
User Guide - Rational Rose RealTime Connexis 357
Index
A
-a 27
adding
DCS Layer Notification 63
Address
definition 302
internal representation 308
transformation 307
user-specified 306
validation 306
Application layer 267
application layer (Connexis) 265
application layers
Connexis 13
Application Messages
definition 303
Audit
definition 302
Audit Messages
definition 302
B
Backus-Naur Form Grammar 245
binding failures 222
bindingNotification 113
bindingNotificationRequested 113
Bound Ports 227
broadcast
sends 132
buffer
configuration 266
count sizes 8
buffer configuration 266
C
C++ library
building library 297
C++ Library Component
configuring settings 294
creating 293
capsule
configuring for Connexis 85
initializing for Connexis 92
CDM 11, 87
CDM options 285
CDR
configuring encode/decode function-
ality 296
Circuit Binding Failures 222
Index
358 User Guide - Rational Rose RealTime Connexis
CNXep
when to supply 252
CNXtepql Exceeded 224
CNXtiql Exceeded 224
CNXtoql Exceeded 224
command line options
about 247
CNXagent_auto_start 288
CNXagent_data_block_size 288
CNXagent_num_data_blocks 288
CNXagent_thread_priority 265, 288
CNXagent_trace_buffer_size 288
CNXagent_truncate_user_data 288
CNXcdm_max_rx_size 270, 282,
285
CNXcdm_max_tx_size 271, 282
CNXcdm_udp_rx_size 286
CNXcdm_udp_tx_size 286
CNXdcs_audit_delay 277
CNXdcs_audit_enabled 277, 283
CNXdcs_audit_interval 277
CNXdcs_cdm_retry_delay 277
CNXdcs_locator_retry_delay 278
CNXdump 275
CNXendpoint 125, 154, 282
CNXhelp 275
CNXlocator_audit_delay 146, 287
CNXlocator_audits_oos 146, 287
CNXlocator_backup 145, 147, 286
CNXlocator_backup_endpoint 146,
148, 149, 286
CNXlocator_preferred_transport
146, 287
CNXlocator_primary 139, 145, 147,
148, 286
CNXlocator_primary_endpoint 126,
139, 146, 147, 286
CNXlocator_retry_delay 146, 287
CNXnobanner 276
CNXtran_audit_period 281, 284
CNXtran_buffer_pool 269, 281, 282
CNXtran_cdm_audit_throttle 281
CNXtran_cdm_conn_audit_period
283, 284
CNXtran_cdm_conn_audits_is 283
CNXtran_cdm_conn_audits_oos 283
CNXtran_default_encoding 280
CNXtran_endpoint_queue_limit 280
CNXtran_first_msg_size 271, 282
CNXtran_helper_thread_priority
265, 280
CNXtran_helper_threads 266, 280
CNXtran_log_bad_msgs 278
CNXtran_max_msg_size 282
CNXtran_orb_conn_audit_period
284
CNXtran_out_queue_limit 268, 280
CNXtran_reset_audit_enabled 283
CNXtran_thread_priority 265, 279,
285
CNXunique_id 154, 166, 168, 178,
275
command line options (Connexis) 250
compiler version
updating 289
component
configuring for Connexis 90
component instance 56, 57
adding 177
changing properties 180
using CDM and CRM Endpoints 249
Index
User Guide - Rational Rose RealTime Connexis 359
using CDM Endpoint 248
with CDM and CRM 250
with fixed endpoints 247
Component Instance defaults 159
Configuration and Transports Settings 87
configuring
component for Connexis 90
conjugation names 42
Connect Failures Received 227
Connect Failures Sent 227
connect_retries 117
connecting
wired ports 15
Connection audit 273
Connection Lifecycle 303
connection patterns (Connexis) 108
connections
explicit endpoint 124
explicit endpoint (Connexis) 7
local 119, 126
local (Connexis) 7
Locator 125
Locator (Connexis) 8
Connexis
about 5
adding support for 59, 83
application layers 13
automatic versus Application regis-
tration 113
BasicTest Model 21
buffer usage 267, 268, 270
Client/Server pattern 108
command line options 261, 274
components 83, 85, 93
configuring a component 90
configuring capsules 85
connection options 118
connection patterns 108
converting models 99
create packages for a model 35
customization reference 261
datagram messaging 271
definition 11
DCS performance model 25
definitions 11
Development Approach 82
Enabled Components 91
engineering rules 261, 262
errors 255
fault-tolerance 9
initialization rules 93, 98
initializing capsule for 92
key benefits 5, 6, 7, 8
local connections 119
location transparency 7
locator service 17
messages 255
name resolution 118
overview 14
peer to peer pattern 109
ports 14
process view 263, 264, 274
reliability 9
support for distributed applications 9
TCP/IP 355
terminology 11
tutorial 31
UPD/IP 355
using 20
warnings 255
Connexis Datagram Messaging 11, 87
Connexis High-Level Design 301
Index
360 User Guide - Rational Rose RealTime Connexis
Connexis Locator Service 12
Connexis Reliable Messaging 11, 87
Connexis Viewer 9
constructors (Connexis) 327
contacting Rational technical publica-
tions iv
contacting Rational technical support iv
Control Messages
definition 302
Controller 186
Controller Audit 188
creating
New TargetRTS Library 291
CRM 11, 87
-crm 26
CUID 160
D
Datagram Messaging 187
DCS 11, 15, 16, 68, 88, 112, 123, 127,
274
Agent 301
building the library 297
common customizations 289
creating target specific header files
292
definition 11
loadiing DCS model 293
Locator 301
Porting to a New Target Configura-
tion 289
porting to a new target configuration
290
testing the port 297
Threading Model 304
Transporter configuration settings
278
DCS and transport Layer 265
DCS Architecture 301
DCS command line options 277
DCS Configuration 187
DCS Interfaces
sharing 84
sharing into model 84
DCS layer 268
DCS libraries 289
building minimal configuration 289
customizing 289
porting 289
DCS library 289
changing compilation flags 289
enabling metrics 238
DCS Library Configuration 296
DCS library port
testing 297
DCS options 277
DCS Performance Model 25
DCS registration 245
DCS Registrations
string grammar 245
DCS threading model 304
DCS Tracing Filters 186
DCS with Locator 88
DCS with Target Agent 88
DCS with Target Agent and Locator 88
defer
use of 133
Defers 133
deregisterSPP 112
Index
User Guide - Rational Rose RealTime Connexis 361
Distributed Connection Service 11
see DCS 16
distributed Rose RealTime application
289
create 289
DNS 11
documentation feedback iv
Domain Name System 11
duplex locator service 11
E
Encode Buffer Unavailable 223
Encoding Exceeds Buffer Size 223
Endpoint
definition 302
endpoint 11, 82, 110, 118, 124
command line options 247
defined for transport integration 302
definition 11
error reporting RTDErrorType 104
errors
command line paramters 257
initialization errors 257
parameter errors 257
F
Fixed Initialization Order 98
G
getRegisteredName 113
H
Handshake audit 272
I
ILS 12, 112, 119, 123, 127
definition 12
Interaction Diagrams 202
generating 202
Internal Layer Service 12
see ILS
Inter-Process Communication 12
invoke 134
use of 132
Invokes
use of 132
IPC 5, 355
definition 12
isRegistered 112
L
-l 26
Load-sharing of Publishers 138
Locator 12, 187
Locator Audit 188
Locator Dynamics 140
Locator Failure 142
Locator Functionality 87
Locator options 286
Locator Service 8, 9, 31, 68, 82, 88, 110,
118, 123, 124, 126, 127, 135, 136,
138, 140, 141, 142, 144, 145, 147,
149, 150
about 7, 17
adding support for 136
back-up locator 17, 135
command line options 247
configuration 145, 147, 274, 286
definition 12
Index
362 User Guide - Rational Rose RealTime Connexis
failure 142
parameter examples 149
primary locator 9, 126
rank 11, 118, 137
usage scenarios 140, 144, 145
locator service 17
using 17
locator_rank 117
locator_transport 117
M
message
decoding 7, 191, 193
encoding 7, 191, 193, 280
Messages
definition 302
messages
format 312
initialization messages 255
listening strategy 313
Metrics
Connexis Viewer 243
metrics
processing 239
subscribitng to service 238
Metrics Collection
displaying 207
saving 234
starting 208
stopping 234
Metrics Data
obtaining 237
Metrics port
adding 238
metrics port 238
Metrics Service 237
Metrics Support 154
Metrics Window
Application Errors Information 228
Application Incompatibility Informa-
tion 232
Audits Information 219
DCS Errors Information 225
Detailed Information 214
Engineering Information 221
Messages 216
Summary Metrics Collection 210
using 208
minimal DCS Library Configuration
creating 296
Models
HelloWorld 18
Quick start 31
models
converting connexis models 99
multiple publishers 131
N
-n 26
Name Resolution 118
Name Service
creating 150
notification 10, 12, 62, 93, 113, 121
definition 12
rtBound 10, 62, 66, 93, 133
rtUnbound 10, 133
turning on 61, 62
use of 133
Index
User Guide - Rational Rose RealTime Connexis 363
O
Object Information column 167
Operation Queue 268, 280
P
package
rationale for creating 37
sharing external 83
packages
removing shared 85
patterns
Client/Server (Connexis) 108
Peer to Peer 109
port
adding a metrics port 238
API 112, 115
bindingNotification() 113
bindingNotificationRequested()
113
deregisterSAP() 112
deregisterSPP() 112, 137
getRegisteredName() 113
isRegistered() 112
registerSAP() 68, 93, 112, 115,
118, 125, 126, 137, 138,
139, 141
registerSPP() 68, 69, 112, 115,
118, 124, 137, 138, 139,
141
Binding Failures 227
publisher 10, 118, 124, 125, 126, 127,
137, 139, 141
Reference Trace 188
subscriber 93, 110, 112, 118, 124,
126, 127, 136, 137, 139, 141
unwired end port
definition 13
wired end port 14
definition 13
ports
ranking published 137
replicated publisher ports 131
Preferences 159
select Session defaults 159
processor 7, 10, 13, 124
adding 175
changing properties 176
creating 56
removing 177
Protocol Messages Trace option 189
Publication 136
published ports
ranking 137
publishers
fully subscribed 141
load sharing 138
multiple 131
Q
Quick build 57
R
-r 26
race condition
locator 144
Ranking Published Ports 137
Rational technical publications
contacting iv
Index
364 User Guide - Rational Rose RealTime Connexis
Rational technical support
contacting iv
reference tract 188
registerSAP 112
registerSPP 112
registration 15, 17, 31, 67, 68
application 93, 113, 114, 115, 123
automatic 93, 109, 113
parameters 115, 116, 137
example 118
locator_rank 117, 118, 137
locator_transport 117, 118, 139
Publisher Registered with the DCS
128
Publisher Registered with the ILS
127
Publisher Registered with the Locator
130
string 7, 16, 68, 82, 110, 123, 124,
126, 127, 138
string grammar 245
summary 127
unwired port 110, 111
removing
Shared Packages 85
Replicated Publisher Ports 131
Reset audit 273
rtdAgentActive (out signal) 94
rtdAgentActiveReply (in signal) 95
rtdBackup Endpoinp (out signal) 94
RTDBase 263
RTDBase_Agent 88, 263
Viewer requirements 153
RTDBase_Locator 69, 88, 126, 127, 136,
263
RTDBase_Locator_Agent 126, 136, 263
Viewer requirements 153
rtdCDMport (out signal) 94
rtdCDMportReply (in signal) 95
RTDConnexisAPI 348
rtdDCSrunning (out signal) 94
rtdDCSrunningReply (in signal) 95
RTDErrorType Error Reporting 104
RTDInitStatus protocol (Connexis) 93
RTDInterface 20
rtdLocator Available (out signal) 94
rtdLocatorAvailable Reply (in signal) 96
RTDMetrics In Signals 240
RTDMetrics Out Signals 239
rtdPrimary Endpoint (out signal) 94
rtdPrimaryEndpoint Reply (in signal) 97
RTDTIF 341
RTDTransport 339
rtdTransport Controller (out signal) 94
RTDTransport subclass
implementing 320
RTDTransportAddress 325
RTDTransportAddress subclass
implementing 317
RTDTransportAddressFactory subclass
implementing 316
rtdTransportControllerReply (in signal)
97
RTDTransportEndpoint 332
RTDTransportEndpoint subclass
implementing 319
RTDTransportEndpointFactory 331
RTDTransportEndpointFactory subclass
implementing 318
RTDTransportProfile 341
rtdVClimit (out signal) 94
Index
User Guide - Rational Rose RealTime Connexis 365
rtdVClimitReply (in signal) 97
RTProtocol interface 112
S
-s 26
SAP 12
send
broadcast sends 132
data (Connexis) 134
data classes by value 134
sending
data 134
Data Classes by Value 134
Service Access Point 12
Service Provisioning Point 12
Session defaults 159
signal names 42
simplex locator service 12
SPP 12
Subscriber and Publisher Registrations
229
Subscriber Losing Connection to a Pub-
lisher 142
Subscription 137
Subscriptions
queueing 125
T
tagged-values 12
Target Agent 8, 88, 136, 188
Viewer requirements 153
Target Observability 9, 152
Target RSL 12
Target Run-time Service Libraries
see Target RSL
Target Run-time System Libraries 12
TCP 12, 355
TCP/IP 12, 355
thread
configuration (Connexis) 262
threads
configuration 262
DCSAndLocator 263
default number of (Connexis) 264
helper 118
priority 265
main 98, 265
TargetAgent
priority 265
TargetRSLDebug 265
timer 265
transport 265
priority 265
TIF 13, 299
definition 303
TIF Classes 322
RTDConnexisAPI 348
RTDTIF 341
RTDTransport 339
RTDTransportAddress 325
RTDTransportAddressFactory 323
RTDTransportEndpoint 332
RTDTransportEndpointFactory 331
Tools Menu 159
trace
define a 199
generating interaction diagrams from
output files 202
location settings 190
Index
366 User Guide - Rational Rose RealTime Connexis
port reference 188
show data 197
virtual circuit 192
trace filters 185
trace group
Network Data in 191, 193
Network Data out 191, 193
User Data in 190, 193
User Data out 191, 193
trace levels
component instance
advanced 182
basic 182
disabled 182
operational 182
port reference
activity 192
disabled 192
signal 192
signal and data 192
virtual circuit
activity 194
disabled 194
signal 194
signal and data 194
trace limit (Connexis) 160
trace options 186
traces
component instance 182
defining 182
port reference 188
virtual circuit 192
Tracing defaults 159
Transmission Control Protocol 12
Transport 12
auditing 311
blocking/non-blocking 309
integrating 315
understanding 305
transport 10
buffer pool 268, 269, 270
component 14, 16, 274
definition 12
Transport Agent 87
transport and protocols
naming 306
transport buffer pool 269
Transport Errors 226
Transport failures
recovery 311
Transport Integration
building 321
overview 300
packaging 321
significant threads 304
testing 322
using in another model 322
Transport Integration Framework 299
overview 300
Transport Integration Framework (TIF)
13
Transport Intergration
definition 303
transport settings 87
Transport specific options 282
Transporter 186
Transporter Audit 188
Transporter options 278
Index
367 User Guide - Rational Rose RealTime Connexis
transports
manually integrating into model
model
manually integrating trans-
ports (Connexis) 88
type descriptor
Version Mismatch 230
U
UDP 13, 355
UDP/IP 355
UML 5, 6, 7, 10, 11, 13, 14, 16, 31
Unified Modeling Language 13
see UML
unwired port 13
registration 110
User Datagram Protocol 13
see UDP
V
VC Mismatches 227
Viewer 88, 136
adding a component instance 177
adding a processor 175
adding support for 153
architecture 153
changing a component instance’s
properties 180
changing a processor’s properties 176
command line options required 154
component instance 168
configuration 274, 287
creating component instances 175
creating processors 175
defining component instance trace
182
defining port reference trace 188
defining virtual circuit trace 192
duplicate CNX unique identifiers 156
log window 157
main menu 156
main window 156
named service 168
Object Information column 167
processor 168
registered end port 168
removing a processor 177
setting trace buffer size 191, 193
software errors 235
software warnings 235
starting 155
starting from deployment diagram
155
status bar 157
Target Agent
connecting to 171
trace pane 156
tree view 156
Viewer 8
virtual circuit 168
Viewer icons
component instance 163
Named services 165
port icons 165
processor 163
virtual circuit 166
Index
User Guide - Rational Rose RealTime Connexis 368
Viewer menus
File 158
Help 161
View 158
Windows 161
Viewer popup menus
component instance 170
port reference 173
processor 169
session 168
virtual circuit 174
Viewer trace window
component instance 194
virtual circuit 195
Virtual Circuit
definition 302
virtual circuit 9, 13, 118
definition 13
Virtual Circuits 271
VxWorks
inclusion path 26
W
wired port 13
wired ports
connecting (Connexis) 15

Navigation menu