Here we document the organization and setup of the Java code used by the odyssey-2
package.
Code formatting & related standards are in OdysseyJavaCodingStandards.
The code that runs in an Odyssey JVM comes from three places:
External JAR files are symlinked into /software/odyssey-2/java-jar
, a regional directory. Java APIs that are not part of the basic Java installation but which are also not specifically part of Odyssey are linked in this way.
Common Java code is supplied in source form in /software/odyssey-2/data/default
. It is symlinked into /software/odyssey-2/java-src
, a regional directory. This is code which is distributed to all Odyssey installations.
Finally, specific Java code distinguishes the Odyssey installations in each region. It is kept in /software/odyssey-2/java-src
.
When the Odyssey JVM starts, the $CLASSPATH is set to all the .jar
files in /software/odyssey-2/java-jar
, together with the directory /software/odyssey-2/java-cls
. The odysseyClassPath
command generates the correct $CLASSPATH.
The /software/odyssey-2/java-cls
is compiled from /software/odyssey-2/java-src
upon package installation on the regional master.
Upon package installation on the regional master, the entire contents of /software/odyssey-2/java-src
are recompiled. The compiler output is saved in /software/odyssey-2/data/javac/compileResult
. It is then compared to /software/odyssey-2/data/javac/normalCompileResult
. If the two are identical, then compilation succeeds and installation completes by updating /software/odyssey-2/java-cls
with the .class
files generated by the compilation. Otherwise the differences are included in the output of installation.
It does not seem to be feasible to eliminate all the warnings from this compilation process. In particular there is no way to tell javac
to ignore specific warnings. So when the code is updated, once it is determined that the new code is correct, the compileResult
should be copied to normalCompileResult
.
After the compilation has completely successfully, the Sun javadoc
tool is invoked on the entire contents of the java-src
directory, to populate the java-doc
directory. This directory is symlinked into data/static
so that the URL /odyssey-static/java-doc/ will contain the Javadoc documentation for the Java source code running the Odyssey installation in the region of the webserver. For example, the core.cs
Odyssey Javadoc is available at http://www.cs.uwaterloo.ca/odyssey-static/java-doc/.
Some of the source files in /software/odyssey-2/java-src
are "common" code. At present this is the zava
package, which contains the framework code, the and uw
package, which contains the actual applications.
The code in zava
here provides the basic implementation framework used by Odyssey. It is not specific to any particular application or to UW. This should be a symlink to /software/odyssey-2/data/default/zava
.
The code in uw
implements the various applications available through the Odyssey system. Roughly speaking, each sub-package of uw
corresponds to an application. This should be a symlink to /software/odyssey-2/data/default/uw
.
Finally, the code in content
gives the specific configuration for each region providing an Odyssey interface.
-- IsaacMorland - 24 Jan 2007