DocumentationJavadocsDevelopers Guide Technical papersGamora Security (PS)DownloadsLatest Stable ReleaseResourcesIRCgamora.org:6667 #gamora
|
An Introducton to The GNU Adaptable Multiplatform Object Routing Architecture1 IntroductionGamora is a strange beast, classifiable most closely as an applicationserver, but is really a creature with many heads. Gamora's original purpose was to create a framework in which creating network servers was a trivial task. Like many free-software projects, it outgrew this, and became a platform for developing modular applications quickly, while gaining advantages transparent to the developer, but incredibly useful. Among them are: 1. Thread-of-execution based security Gamora is dual licensed under both the MPL and the GPL. The MPL license included in Gamora has been modified to allow GPL compatibility. 2 Philosophy
3 WaterworksProbably the single most powerful package for Gamora is Waterworks. Built on top of Gamora, this package provides an generic communications architecture suited for nearly any communications application. Waterworks provides the ability to send and receive data to the network in any form. Waterworks moves beyond the standard Java libraries in several ways:1. The ability to chain stream-processing modules, much like Java's streams, but with the advantages of hot-swapping and forking. Waterworks is composed of four major components, Sinks, Pipes, and Factories, and SinkBuilders. A Pipe is a communication element, either a filter or datasource. A Sink is the BusObject that holds and controls a set of input and output pipes (called the Waterworks). A Factory builds Sinks from a description of the wateworks, and a SinkBuilder repeatedly calls a Factory to build a Sink. Though complex by appearance, using Waterworks is frighteningly simple. One simply creates a SinkBuilder, specifying which Factory (SocketFactory, for example, constructs Sinks communicating via TCP/IP), and the layout of the pipes he or she wishes his Sinks to contain. Then he or she activates the SinkBuilder (as he/she would any other BusObject). One can create fantastically complex I/O systems in one or two lines of code. As an example, one can create a SinkBuilder that will accept clients that speak to the server via serialized Java Objects, to which the server replies with NNTP responses (a nonsensical example, but bear with me) with this code fragment: SocketFactory sf=new SocketFactory(coreController, 30500); SinkBuilder builder=new SinkBuilder(coreController, sf, new Class[] {ObjectIn.class}, new Class[] {NNTPOut.class, TextOut.class}); 4 AdministrationAdministration of any Gamora application can be done with the included GVFS plugin. The Gamora Virtual FileSystem provides a unix-like shell that one can browse Buses and BusObjects, move and remove them; load plugins and components; examine, reprioritize, and remove threads; view and change BusObject properties (themselves transparently exported through the Java Bean interface); and create scripts. It is itself built on Gamora, and can be a useful example of how to use Gamora.5 SecurityThe Gamora kernel tracks all thread creation, and maintains an accurate map of thread-ownership where each thread is owned by a BusObject. Combined with security levels on each BusObject (which one can safely ignore if one likes), Gamora can enforce locks on any resource via thread-tracing. Because the executing thread cannot be forged, thisOne can easily protect a resource from unauthorized use in two or three lines of code. 6 Thread managementGamora was designed to allow heavy use of threads to build applications. And, because several applications can run on a single Gamora server, Gamora's Kernel was designed to manage these threads in an efficient and transparent manner.Gamora can protect against 'greedy threads' that through either malicious intent or accidental crash would otherwise lock the entire JVM thread pool. By detecting such threads and beginning a process called 'thread-stirring', Gamora remains responsive for all affected BusObjects. In addition, one can retrieve information on which threads are running, and which BusObjects created these threads, and if necessary, they can be killed.
|
(C) 1999, 200 Scott G. Miller