TENA RANGE LVC
TENA Test and Training Enabling Architecture (TENA) See https://www.tena-sda.org/display/intro/home Targeted at LVC applications in a range environment; has substantial spillover to the M&S community since the ranges tend to play in the Live part of LVC Implementations on Linux, Windows; no explicit OS X support ;-(
TENA More or less: Use CORBA infrastructure as one element (though they have modified it somewhat) Have a prefab archive of CORBA objects to do common things This means you can have methods associated with objects, unlike HLA Publish-Subscribe capability for object attributes Uses Tao real-time CORBA ORB as basis for middleware message exchange backplane (not an explicit requirement)
CORBA Objects Traditionally CORBA objects just have methods you can call. This doesn t scale well if you have 100 people requesting updates of the object s state. But, unlike HLA, CORBA objects can have methods associated with objects, so you can call the method remotely; IE, you can have code associated with objects, which helps immensely with reuse
Publish/Subscribe TENA bolts on an additional concept of a stateful distributed object An object can have a series of state variables that it publishes Other participants can subscribe to those state variables; the object publishing them does not know who subscribes When state variables are changed the subscribers receive updates, perhaps via unreliable (UDP) mechanisms
SDOs Traditional CORBA objects provide methods via a proxy on client hosts SDOs also provide the illusion of having access to the instance variables of the remote object. The local client copy of the instance variables are updated via publish/subscribe
Traditional CORBA Proxy -dosomething -dosomethingelse Servant -dosomething -dosomethingelse Traditionally, CORBA lets a stand-in client proxy object call a server object, where the real computation happens. There may be several Proxy objects calling a single server object
SDO Proxy int x; int y; -dosomething -dosomethingelse Method Call ivar Subscribe Servant int x; int y; -dosomething -dosomethingelse SDOs, in addition, can subscribe to published ivars (state variables) on the server side. Updates may be via UDP or some other method, and may be distributed to many objects.
SDO The objective: make it appear as if the remote object complete with instance variables is on your local machine This means the ORB is extended to allow ivar pub/ sub
Performance
Performance At least on the tested hardware (circa 2003), implies small-to-mid simulations. Probably better with more modern networks and hardware
The Basic Idea Write an application in a conventional language, probably C++ Include TENA objects, typically prefab objects from their repository The objects included subscribe to updates from server objects, and may provide (publish) updates to other interested parties
TENA Participants
Coding TENA uses an IDL-like language for defining the interfaces and instance variables of objects, and the pub/sub parameters To write a TENA C++ object, you can first write a TDL file, then use a web-based generator to create the C++ implementation TENA handles object serialization, unlike HLA! Existence of methods allows reuse of algorithms, such as coordinate system transforms (huzzah) Even further, you can generate the TDL from UML diagrams
Coding Reuse of objects encouraged TENA has a repository of standard objects that can be reused; vastly reduces errors by making use of known, tested code
TDL Example { package Example interface Controllable { string initialize(); }; class Participant : implements Controllable { string name; long ID; }; class Sensor : extends Participant { string state; string point(in double azimuth) };
Code Repository
Java Primarily C++ Some Java support wrappers for C++ objects
Wiring Diagram