What is J-Orchestra?

      J-Orchestra is a system for automatically partitioning and distributing existing Java programs. Given a Java program in bytecode format and a desired distribution plan, J-Orchestra will automatically rewrite the program to execute on a distributed environment, just as if it were executing on a single machine. To do this, the J-Orchestra compiler has to do some complex bytecode rewriting: it needs to change all accesses to objects to be through indirect pointers (that hide the location of the object); it needs to take care of accessing system classes remotely; it needs to ensure that objects get "unwrapped" when passed to system classes (system classes know nothing about the distribution) and wrapped back up when they are passed to user classes. An important feature of J-Orchestra is that it does not modify the Java VM or any system libraries: you can run the J-Orchestra-partitioned program in any standard Java environment.

Why use J-Orchestra?

      J-Orchestra lets you run an application in a distributed environment. There are tons of reasons why you may want to do that: perhaps your processing server is not where your input or output is (i.e., J-Orchestra is used as an alternative to X-Windows or to "telnet"); perhaps you want to execute a remote program as efficiently as possible (i.e., J-Orchestra is used as an alternative to Java applets or servlets); perhaps your application is inherently distributed--your database runs on one machine, your input (keyboards, sensors, microphones) is on another, and your processing power is on a third; perhaps your application is multi-threaded and you want to make it execute truly in parallel on different processing hosts.

Where does the name "J-Orchestra" come from?

      What J-Orchestra does is similar to the "orchestration" process for musical pieces. Orchestral pieces are rarely composed as a complete orchestral score (i.e., a score specifying precisely what notes each individual instrument of the orchestra plays). More commonly the composer begins with a piano score. Then "orchestration" takes place to produce the complete orchestral piece. Orchestration determines what instrument should play each of the notes in the completed piano score.

      The processes of composition and orchestration are entirely separate. There are many examples of orchestrating piano music that was never intended for orchestral performance by the composer who wrote it. A number of piano pieces have several brilliant but totally different orchestrations.

      The J-Orchestra system does the same thing to centralized Java programs as orchestration to completed piano scores. We start from a completed, centralized Java program and then partition it into several distributed segments. Our orchestration process is semi-automatic. First we ask the user how many instruments (network nodes) we have. Each network node can have some unique capabilities very much like a musical instrument. That might be the reason why certain pieces of code must be placed on a particular node. After that, we use profiling, static analysis, and byte code engineering to produce the optimum partitioning (orchestration) of the original program. In order to coordinate the execution of the resulting distributed program, we have a run-time system. Its role is very similar to the one of the conductor.

Last Modified: June 06, 2003