Avalon History of Changes Added in DataSource implementation for use with J2EE style apps. Added the notion of ServerApplication to replace the concept of .bar as a server. A ServerApplication is a isolated environment that manages it's own threads, security, logging, classloading etc. It has a specific layout as documented in Assembly guide. The kernel was refactored to contain ServerApplications rather than Blocks and a lot of support was refactored to support safe separation of ServerApplications. The archives are in .sar format and are similar in many aspects to .war of servlet fame. Refactored thread management so specific thread pools can assigned to specific threads/thread groups in a manner similar to how ContextClassLoader is associated with threads. Thread management was also moved to a new package (org.apache.avalon.util.threads). Modify the packaging of all kernel related files into org.apache.phoenix. Modify the packaging of all blocks/services/demos into package hierarchy org.apache.cornerstone. Added two new services/blocks by refactoring code from tomcat and old SocketServer. There is now a SocketManager and a ConnectionManager. The TLS code is now much improved and there is the beginning of client socket factory. This provides for future client socket code factories for SSL/TLS or SSH1/2 etc. Also adapted SimpleServer to use these methods. Changed config file from per .bar to per .sar and changed name from BAR-INF/< barname>.conf.xml to conf/assembly.xml. It still contains configuration data as well as assembly data but this will be removed in a future revision. Added an extra config file to .sar (conf/server.xml) that is responsible for configuring .sar wide variables. Some examples include security, logging and thread loading. Refactored most of the code to use AbstractLoggable and the corresponding getLogger() method. Also removed the remaining static access to LogKit. Continued to refine the Camelot API. Removed blockdefs.properties in favour of adding attributes to manifest entries of jars. This should enable future GUI tools to easily assemble blocks. Re-Added the sub-classed context BlockContext to allow blocks full access to important environmental information. Many of the lifecycle methods now have a chance to fail by throwing an exception. Removed all notion of kernel configurability. Enabled securityManager by default and now ServerApplications have to specify a security policy. Removed classloader hack in ObjectStorageRepository as it is no longer required with new .sar format. Homogenized the remaining code to follow one style. Configuration temporarily will create new Configuration objects on getChild() if they don't exist until Berin's work is finalized. Altered Compose so that it threw ComponentManagerException of which the previous two exceptions thrown are now subclasses. Made loading of jars relative to avalon-loader.jar rather than via current working directory so that some tools (ie VAJava) would not complain. Separated out tools directory/jars from main jars that avalon uses. A number of bug fixes and more descriptive exceptions for Configuration and Parameters objects. Made SocketManager accept arbitrary SocketServer.Listener objects. Updated all blocks to use new system level logging. Changed Threads so that it is now a system level service. Added new LogManager that manages arbitrary log categories. Added the BlockInfo requirement. Thus blocks need to have an XML file that describe the services it offers, the services it depends upon and other meta information. Added support for Blocks to implement BlockContextualizable. If they do this the kernel will pass them Context information. Currently the context information is limited to a handle to kernel instance and the name they were configured under. Changed SimpleContext and SimpleComponentManager to DefaultComponent and DefaultComponentManager to match better with other Avalon design patterns. Added functionality that allowed you to listen to BlockEvents generated by kernel. Events indicate when a Block is being created, initialized, composed, destroyed, ran and stopped. Updated Logger interface so arbitrary integer levels are not allowed to be passed. The user is forced to use defined enumerants. This was done to increase safety. Updated kernel so that is now delegates to AvalonKernelConfigurator to configure itself. Updated kernel so that it is now pluggable. Any kernel can be loaded via the code in main. Kernel configuration files are loaded from default configuration directory in a file with same name as class with a .conf.xml appended. Removed getDescription method from Block as it is to become part of BlockInfo Change methods in Configure/Reconfigure to throw ConfigurationExceptions. Change methods in Configure/Reconfigure to match Java standards. Add to the Logger log level support. JNDI for the lookup of blocks and components. Still keep the Composer interface for those lightweight blocks that don't need the extra features of the Context. JNDI should be the ComponentManager of choice. Synchronized Avalon with Cocoon 2 enhancements. Uses SAX 2 for configuration, incorporated abstract and base classes for fundamental types, and incorporated the NamedComponent interface. Upgraded Loader architecture and the AvalonClassLoader to provide better detail, as well as new ways of configuring the loader at the beginning. It does not require any extra libraries to load. Changed the Acceptor pattern to a more flexible event provider. Added a TimeServer to easily manage time events. Make Store implementation more pluggable. Updated Context pattern to Configurable-Composer pattern. First Avalon implementation.