What’s New in this Release?
Cougaar 12.6 is a major release.
Contents
For documentation on the various zip, jar, and config files included in this release, please see Release Structure.
Git info
The release is on branch origin/B12_6 and tagged with R12_6.
Changes:
- Cougaar repository converted from CVS to Git with the retention of all checkin messages, tags, and branches. cougaar.org hosts external Git repositories.
- Annotations for easy specification of Plugin Parameters, Subscriptions, Service Bindings and Queries. Annotations work in both in plugins and in non-plugin servlets. Some tutorials have been updated to use annotations. See Annotations. The @Arg annotation now allows you to omit the
nameparameter if it’s the same as the field name. - Generics support for black board subscriptions and predicates that reduces runtime checking of instanceof and subsequent casting. See Generics.
- Updated tutorials and examples.
The tutorials have been modified to use the new APIs. See examples:ping/src/org/cougaar/demo/ping/*.javahello/src/org/cougaar/demo/hello/HelloClassicSubscribePlugin.javamesh/src/org/cougaar/demo/mesh/MeshPlugin.javamesh/src/org/cougaar/demo/mesh/MeshServlet.java
The Hello tutorial now includes examples of logging plugin, society, and run commands. See
src/org/cougaar/demo/hello/HelloPLogginglugin.java. It shows: usage for different levels; when to use isXxxEnabled; configuring the run/log.config; and controlling Servlets. - Core modules, examples, and end-user application are eclipse projects.
- Cougaar now requires Java 6 to compile and execute. Cougaar now works with JDBC 4.0.
- The Agent lifecycle was enhance to delay
setupSubscriptions()to be strictly after all plugins have runstart(). This guarantees that intra-agent services can be looked up instart()and used insetupSubscriptions(). This also allows plugins to be specified and loaded in any order without conflict. Intra-agent services should be provided atload()time, looked up atstart(), and only then are blackboard operations triggered that can use these services. - Service lookup has annotation support that binds the service at
start()-time. Example:@Cougaar.ObtainService public HelloService helloService;
At
load()-time and again atstart()-time the service is looked up and bound to the variable. This replaces the old reflective scheme which is only tested atload()-timepublic HelloService helloService; public setHelloService(HelloService service) { this.helloService = service; } - All of the source is now stored with a single linefeed as the line terminator character. There is a special setting to use for Git to convert to Window’s carriage-return/linefeed format upon checkout. See here.
- The use of the code generator (ant target “
asset.codegen“) has been deprecated. Any current modules that used code generation have had that code explicitly generated and committed to Git, and the xx.def file was renamed to xx.def-obsolete. This corrects a bug in the eclipse build process. - End-developers can now rebuild all of Cougaar. The build script can now execute from remote or local Git repositories.
- The build script now generates TrimCougaar.zip with contents downloaded from cougaar.org. We distribute that TrimCougaar.zip file.
- The javaiopatch has been removed as Java 6 does not have the underlying bug in it that had necessitated the patch in older versions of Java. The build define -Dorg.cougaar.core.persistence.verifyJavaIOPatch is no longer needed and has been removed from the source.
- Various parts of the off-line html documentation that is distributed with Cougaar have been updated to remove references to non-current parts of Cougaar. The most up to date documentation is on cougaar.org
- Additional data types are available for plug-in arguments:
Boolean,INET_ADDRandURL. - Configuration files of type
.imland.iprfor the long unsupported IDEA IDE have been deleted. - Eclipse launchers were added for the Pizza tutorial.
Release notes for older Cougaar revisions can be found in the Release History.
Requirements
Cougaar requires Java version 1.6 (aka Java 6). For details, please see the Installation Guide.
Installation
Please see the Installation Guide and Overview Slides.
Documentation
For additional details, please review the following documentation:
- The Cougaar FAQ
- The Cougaar Tutorials Page contains:
- Training Slides and example source code on how to implement planning applications using Task/Allocation agent interactions.
- The Pizza planning application.
- The Documentation Page contains:
- Cougaar Overview Slides
- The Cougaar Developers’ Guide v11.4
- The Cougaar Architecture Document v11.4
- Many additional Conference Papers.
- Detailed documentation on several core services, such as the ThreadPool and Metrics services.
- Javadoc is available:
- In the “cougaar-api.zip” as ” javadoc/module/doc/api” files, such as the Core Javadoc.
- Online under Documentation.
Known Limitations and Features
- The change to use Java generics may require modifying existing applications.
- Cougaar will not build with Java 7 due to its JDBC 4.1 being incompatible with JDBC 4.0. Code changes necessary for JDBC 4.1 are present in the source, but commented-out.
- Please note that if you change SimpleAgent.xsl do not change the value of threadService from full to trivial unless you also change to metrics=trivial. The values must be in sync for consistent use of dependent libraries.
- We have started work on using the Jenkins continuous integration server for Cougaar builds, but it is not ready for release.
- As stated above, the build script generates TrimCougaar.zip by downloading it during the build. For this release, it is one code generation behind the running build. We will fix this.
For information on problems that were detected after this Cougaar version was released, please see the Online errata page. This file documents the contents of this release and the general layout of Cougaar software modules. When you download a Cougaar release, there are several logical pieces. Cougaar is divided into modules, from the various cougaar.org projects that make up CougaarSE. This is a list of the various zip files available from releases.
Support
Contents of this Cougaar Release
BUILD ORGANIZATION
| cougaar.zip | Cougaar runtime – all “lib/” (runtime jars) and “clib/” (build-time jars) jar files, run scripts (“bin/”, configuration files (“configs/”, including the usual configs/common directory), and minimum documentation (“doc/”). Additionally, most modules (see below) include directories with additional documentation and configuration files. Javadoc and source code is not included. |
| cougaar-support.zip | Third-party supporting jar files. Unpacks into “sys/” subdirectory where the Cougaar Bootstrapper will find them, without modifying your CLASSPATH. Built from the “jars” module in the Cougaar core project. |
| cougaar-api.zip | The Javadoc for all the main cougaar classes in one place. Unpacks to “/doc/api”, putting the Javadoc with the module where the source originates. |
| cougaar-src.zip | Source code for each “lib/” module. Unpacks to per-module directories, as in core/src/…. Often include JUnit tests in a “regress” sub-directory, and examples. |
| TrimCougaar.zip | Prebuilt subset of current modules in Cougaar. |
| md5sums.txt | MD5 checksums for all the above zips. |
| build.out | Output of the build process |
| errors.out | Error output of the build process, including deprecation warnings. |
Notes:
- You’ll need cougaar.zip and cougaar-support.zip (the first time) to get a runnable system. The rest are extras. Furthermore, the cougaar-support contents do not change very often.
- The zips are designed to be unpacked in the same directory, e.g. on UNIX:
mkdir cougaar cd cougaar unzip /tmp/cougaar.zip unzip /tmp/cougaar-support.zip setenv COUGAAR_INSTALL_PATH `pwd`
- The zips include version information in their respective “Manifest/” directories. The content looks something like:
NAME=cougaar-support COMMENT=cougaar thirdparty jars REPOSITORY_TAG=V10_0 # branch REPOSITORY_TIME=1/28/2003 13:00:08 # checkout time ARCHIVE_TIME=1/28/2003 13:29:27 # zip time
All your zips should have the same REPOSITORY_TAG and REPOSITORY_TIME. Each generated “lib/*.jar” file also contains its version information.
MODULE LIST
The Cougaar software distribution (cougaar.zip) contains a number of separate modules of related classes with supporting documentation and sources. The modules roughly correspond to separate Cougaar projects, though some projects contain multiple modules. Also see Modules in GIT Repositories.
Each module typically produces a single Jar file in “lib/”, as well as a directory “COUGAAR_INSTALL_PATH/” which contains data files, scripts, documentation, etc. Here is a list of those modules, in approximate order of compilation dependency or extra functionality. For detailed dependency information, see “build/data/default.build”.
| Module | Description |
|---|---|
| base | Provides “doc/” (these docs), “configs/” (basic config files), and “bin/” (base run scripts). |
| build | Release and build scripts, with code generators. Builds the Cougaar zips. |
| bootstrap | Class loader that scans “lib/*.jar” and “sys/*.jar”, so Cougaar needs no CLASSPATH edits. |
| util | Utility code, including the Cougaar Component Model and Log4j logging facility. |
| core | Critical Core Cougaar infrastructure (including Node, Agent, Blackboard, etc). |
| planning | Planning domain for Tasks, Assets, etc. |
| mtsstd | Standard Cougaar Message Transport System (threaded, many lanes, several protocols) | qos | Quality of Service support (for MTS). |
| yp | Distributed hierarchical yellow pages directory service (UDDI). |
| tutorial | The Cougaar tutorials. |
| webserver | Servlet service support excluding the server itself. |
| webtomcat | Tomcat servlet server implementation for use by webserver module. |
| webaxis | Web Services support for Cougaar: send and receive SOAP calls from Cougaar plugins, and use SOAP as an MTS protocol. |
| community | Agent peer group support. |
| servicediscovery | Agent discovery & dynamic relationships using the yellow pages. |
| pizza | Pizza Party sample application. |
| toolkit | Collection of utilities for manipulating planning Tasks for logistics. |
| glm | Generic Logistics Model domain. Defines “Organization”. |
| server | Application server (daemon) to launch Cougaar nodes. |
DEPRECATED MODULE LIST
The following modules are deprecated in this release.
| contract | Experimental predicate language, used by /tasks servlet advanced queries. |
| quo | Quality of Objects support (metrics). |
| ping | Ping application for simple performance testing. |
| aggagent | Agent that aggregates data from multiple remote agents for scalable UIs. |
| vishnu | Optimizing transportation scheduler. |
| albbn | Adaptive Logistics plugins and domain. |
| datagrabber | UI showing results of Adaptive Logistcs applications. |
| stoplight | Alerts on results of Adaptive Logistics applications. |
| csmart | A Cougaar configuration and experimentation UI. See CSMART Docs. |
INTRA-MODULE ORGANIZATION
Each module subdirectory is organized in a similar way in the source repository:
| build.xml | ANT compilation script (build-generated for CougaarSE modules). |
| src/ | Head of java sources for module, arranged like javac would expect to see in a CLASSPATH. |
| bin/ | Executables, scripts and support |
| data/ | Arbitrary (static) data for runtime use. |
| doc/ | Documentation, in text and html |
| configs/ | Configuration directories. Usually contains only subdirectories, each is a valid configuration. |
| examples/ | Like src, but is never shipped compiled. The build process should attempt to compile and regression-test anything in here, but generated class files are never actually shipped. |
| regress/ | Unit test sources for this module. Will be compiled and run by build process, reporting on compile, runtime and test failures. produced binaries are never installed or packaged. test should be the root of a java package tree – consider following “junit” format conventions. |
| test/ | For Cougaar integration team use. May contain additional regression tests and jigs. Suggested format for organizations submitting software to the cougaar maintainers is a mirror of the top directory, aimed at integrators. Eg:
src/ integration sources doc/ integrations notes, etc data/ configs/ ... test will not be considered by autobuilds and will not be (re)distributed. |
PACKAGE ORGANIZATION
Software intended to replace core functionality should match the below package layout (or provide detailed arguments why it should be changed).
Software intended to augment the core and/or provide optional core functionality, but is not intended to replace the “standard” software suite, should mirror the above layout rooted in a new “organization/project/product-specific” package rather than override the core’s “org.cougaar” package names. For example, an alternate implementation of the agent base class
core/org.cougaar.core.agent.AgentImpl
which was optimized for small devices might be delivered as part of company “foo”‘s module as
fooco/com.foo.cougaar.palmtop.agent.EmbeddedAgent
where:
"fooco/" is the module
"com.foo." is the company package prefix
"cougaar.palmtop." is the project's root
"agent" is the parallel to the core's package.
"EmbeddedAgent" is the class name
None-core functionality should follow standard java package arrangement standards and so should not intersect with any core packages. In particular, “org.cougaar” may only be used by core cougaar software.
