Prepared For Alex Hunter, 29th January 2003
Main AIDA web page: http://www.slac.stanford.edu/grp/cd/soft/aida/
Greg White – 926-4277
Ron MacKenzie – 926-2490.
AIDA (Accelerator Independent Data Access) is middleware for fast data exchange, intended as an API for high level applications in accelerator control. It is not real-time control. Rather, it interfaces real-time control environments such as EPICS to high level interactive applications like Orbit Correction, Correlation Plots and so on.
It exists to separate the development of high level applications from the data sources and control environments with which they communicate, so those applications may be written and run on different platforms, operating systems, or languages. Additionally, AIDA acts as a name service and common API, so that applications can get or set data points without knowing which server is ultimately in charge of that data point, and applications can deal with more than one data server at a time.
1. For the basic “functional” architecture, see slide 3 in http://www.slac.stanford.edu/grp/cd/soft/aida/EPICS2001_Aida.pdf.
2. For the basic “systematic” architecture see slide 2 in http://www-group.slac.stanford.edu/cdsoft/presentations/Software%20Fireside%20Chat%20Colloquium_files/aidaPres.ppt. Note that this systematic architecture shows only 1 “data provider” server for simplicity (the “black-box” on the right). A major function of AIDA is in fact to connect many data providers to a client. The “Da server” layer may connect the client to N servers, or, having contacted the Da Server for the relevant objects, the client can connect directly to these servers itself. This flexible run-time configuration is used to optimize network usage.
How is a client’s “query”1 for data translated into a data server transaction?
AIDA includes a Name Server data service, that makes the mapping between an AIDA name asked for by a client, and the data provider server that should be used to handle the request. Differently to the normal function of a Name Server, AIDA’s Name Server additionally translates the query into a form recognized by the server. For instance, if a client asks for the value of, literally, “LI03:XCOR:114.BfieldDesired”, the AIDA Name Service will recognize that the query can be satisfied by the SLC Data Provider, and translate the query into the familiar prim.micr.unit.secn form like “XCOR.LI03.114.BDES” suitable for the acquisition from that specific data provider. Either the Da Server, or if so coded, the client itself, then contacts the SLC Data Provider for the data.
The function of the Name Service, and the Oracle database in which it is implemented, is described in the link Aida Directory Service Database Guide off the AIDA web page, in the NewLabour Section (a Word document).
The Oracle schema ERD is in link Directory Service Oracle Schema off the AIDA web page – a pdf doc.
The code for aida is in AFS at /afs/slac.stanford.edu/g/cd/soft/ref/package/aida.
edu.stanford.slac.aida - this is the AIDA java package (named according to Sun rules). Under this you will find sub-packages:
dp - Data Providers. The source code for each Unix based AIDA Data Providers.
lib – The AIDA library routines.
lib/da - basically the AIDA client side API
lib/dp – the base classes from which Data Provider code is extended.
lib/util – utilities
lib/util/common – Mostly private AIDA infrastructure code
lib/util/except – not used, exception handling is now done separately.
sys – The AIDA server code
sys/DaServer – The AIDA Data Access Server – the server to which clients connect.
sys/DaNameServer – The AIDA Name Service – manages interactions with the Oracle based names db, and query translation.
The above directories are basically the “reference” directories of the code in CVS. The CVS repository is in /afs/slac.stanford.edu/g/cd/soft/cvs/package/aida.
To use CVS you need to set it up. Basically all you need to do is set the CVSROOT environment variable to /afs/slac.stanford.edu/g/cd/soft/cvs/.
The CORBA IDL for the Aida server interfaces are in /afs/slac/g/cd/soft/ref/package/aida/idl. There is a specific IDL files for the DaNameServer CORBA server. However, all other servers in AIDA, including the DaServer, are merely examples of an AidaObject! The IDL for those servers is generated at compile time, by running sed on AidaObject.idl to produce a unique instance of an AidaObject.idl, and then running the IDL compiler on that instance. The generated IDL file never makes it back into CVS. See
for the macros that implement this runtime creation of the IDL.
CVSWEB and JavaDoc
The code can be browsed through a web browser if it is being run on the slac network, click on CVSWEB on the Aida web page (make sure the repository selected on the first page of CVSWEB is ESD-Maintained-Software-Repository).
Additionally, we do sometimes run javadoc on the code base (though not always and it may be somewhat out of date), however through javadoc you see the comments. See AIDA javadoc link off the AIDA web site.
AIDA has gone through two major phases of development, the second changed the directory structure and the way development is done significantly. However, both old and new development guidelines and documentation is on the web site, so beware. The later pahse was code-named “New Labour” - those are the directories described above.
Only the documents on the AIDA web site und the New Labour heading can be considered accurate.
In particular, use the link “New Labour basic development cheat-sheet” to see how to do new code development. That page includes how to set up you environment, both as part of ESD Software Engineering, and for doing AIDA development. However, note that the ESD Software Engineering general part is only now being fully developed, and so far it only includes AIDA.
We have presently developed a basic API, and the AIDA infrastructure servers DaServer and DaNameServer. We also have a number “demonstration of principle” data servers:
See Data Providers link in New Labour section of the AIDA web page.
1. dpTest – this is the basic template data server. Java Servers can be easily extended by following the examples in this server.
2. EPICS (that is, Channel Access) data, in dp/dpCa.
3. dpTestHist – Shows how a server can return aggregate (that is, “structured” data in a CORBA Any construct. This exists separately from dpTest because aggregate data can be returned 2 ways in AIDA, but only 1 server side function may return aggregate data. So we need two separate servers to illustrate both. The other method uses an AIDA specific way using the AIDA DaObject. This is easier to use, allows the programmer not to use CORBA, but is slower than raw CORBA. They both use a CORBA Any ultimately of course.
4. The above servers are in java, we have a c++ example which reimplements dpTestHist (see item 3) but in c++.
AIDA is built on top of CORBA (see www.omg.org). The specific implementation we use is Orbacus, from Iona Technologies – see (www.iona.com). We are using version 4.1 of Orbacus. For java development, a number of orbacus jar files must be in the java CLASSPATH. See
for the definition of the CLASSPATH we use. For c++ development, talk to Ron.
We use Java 1.4 for Java development. This means that to run AIDA you will need to
We use Netbeans, or the Sun version of Netbeans called forte, as a Java graphical IDE. It’s very good. We have found java developed through Netbeans/forte on a PC under NT/XP to work fine under our Solaris unix. You can also run Netbeans/forte on unix, but we have found a very bad memory leak using this, which we are taking up with Sun. I suggest using Netbeans or Forte on a PC for development – see the Netbeans CheatSheet in the New Labour section of the AIDA web page for guidance on how to se it up.
See http://www.slac.stanford.edu/grp/cd/soft/err for how to define and log exceptions within AIDA.
See http://www.slac.stanford.edu/grp/cd/soft/cmlog/slac_cmlog_browser_help.html for viewing Error (exception) Messages with the CMLOG browser.
Most useful online references for the can be fund in the AIDA web page under References. In particular the Orbacus manual, Java web site, and CVS manuals.
Also see “Talks and Papers” on the Aida Web page, in particular the ICALEPCS 2001 paper, and the “New Labour” Presentation, July 17 2002 (powerpoint and Real-player video).
1. Advanced CORBA Programming with C++. Michi Henning, Steve Vinosky. Addison-Wesley, 1999.
2. Client/Server Programming with Java and Corba. Robert Orfali, Dan Harkey. Wiley Computer Publishing, 1998.
3. Java Enterprise in a Nutshell. O’Reilly, 1999.