[ANN] Copland 0.7.0

Copland is an Inversion of Control/Dependency Injection container for Ruby, based on the architecture of the HiveMind IoC container for Java.

   manual: http://copland.rubyforge.org
   api: http://copland.rubyforge.org/api
   project: http://rubyforge.org/projects/copland

Version 0.7.0 is a significant release for Copland, increasing robustness, adding several new features, and fixing various bugs. I won't quite say it's out of "alpha" into "beta", but it's certainly getting close. The highlights of this release are:

* Installations using setup.rb were broken since they were not installing the package descriptors. (Was anyone running into this? I discovered it the hard way...hope it didn't cause anyone too much grief...)

* Refactored various non-core services into separate distributables. The "copland-lib" package contains non-core services of a more general nature, the "copland-remote" package is for dealing with remote services and RPC frameworks (SOAP, XML-RPC, and dRuby), and "copland-webrick" is for WEBrick-specific services. Each of these new packages are described at the end of this summary.

* Interceptors no longer mangle the method names of the services they encapsulate.

* The copland.AutoLoader is now copland.Startup, with a few other minor changes (interface-wise).

* Added 'require' clause to package descriptor. This allows packages to depend on other non-core packages in the Ruby search path. (This helped make the refactoring of the non-core services possible.)

* Schemas may apply to array elements. In 0.6.0, schemas could only apply to the elements of hashes.

* Schemas may now extend other schemas. If you've named an existing schema, you can create other schemas that build on it. You don't have to duplicate an entire schema just to add one or two new fields.

* Listeners are implemented differently (and more robustly) now. This broke the lifecycle listener capability, but I'm debating the usefulness of the lifecycle listeners anyway... Listeners are now more general-purpose, and listener callbacks bypass any interceptors on the service.

* Ruby 1.9 compatibility patch from Michael Neumann. Thanks, Michael!

* LogFactory is available as a service. This means that services can easily get a reference to the active log factory instance and get new logger instances. (Mostly useful for service factories.)

* Copland::get_class and friends work better with ambiguous module names. Had some problems where the wrong module was being picked up.

* Contributions to a package-local configuration point no longer require a fully qualified name.

In addition, the rough draft of the manual has been completed--any feedback on content would be appreciated.

Lastly, I added three more tutorials: service models, the logging interceptor, and configuration points.

···

===============================================================================
COPLAND-LIB

   api: http://copland.rubyforge.org/copland/copland-lib/api

Copland.Lib is a collection of services for the Copland IoC container. This first release (0.1.0) is a refactoring of services that existed in the core Copland distribution, plus several new services.

* ENVSymbolSource: a new symbol source that provides access to environment variables.

* RubySymbolSource: a new symbol source that provides access to the Ruby "Config" environment.

* ClassBuilderFactory: allows services to be implemented by classes, instead of objects.

* MulticastFactory: builds multicast services, which broadcast their messages to a set of interested observers.

* SynchronizingInterceptor: an interceptor that provides for synchronized access to the methods of its associated service.

* RedirectingInterceptor: an interceptor that effectively renames the methods of its associated service, by redirecting messages that match certain patterns.

* BlockingInterceptor: an interceptor that effectively makes methods of the associated service private, if the invoked method matches a set of patterns.

===============================================================================
COPLAND-REMOTE

   api: http://copland.rubyforge.org/copland/copland-remote/api

Copland.Remote is a collection of services for the Copland IoC container. This first release (0.1.0) is a refactoring of services that existed in the core Copland distribution, plus several new services. All Copland.Remote services deal with RPC services and services, using SOAP, XML-RPC, and dRuby.

* DRbServerFactory: creates a new DRbServer that exports a specific service for access over DRb by remote processes.

* DefaultDRbServer: a default service implemented by DRbServerFactory, to make it easier for applications that only need a single DRb server instance.

* SOAPServerFactory: creates a new SOAP server that exports a specific set of services (and interfaces) for access by remote processes via SOAP.

* DefaultSOAPServer: a default service implemented by SOAPServerFactory, to make it easier for applications that only need a single SOAP server instance.

* XMLRPCServerFactory: creates a new XML-RPC server that exports a specific set of services (and interfaces) for access by remote processes via XML-RPC.

* DefaultXMLRPCServer: a default service implemented by XMLRPCServerFactory, to make it easier for applications that only need a single XML-RPC server instance.

* DRbServiceFactory: allows remote Ruby objects (exported via DRb) to be wrapped transparently as Copland services.

* SOAPServiceFactory: allows remote objects (exported via SOAP) to be wrapped transparently as Copland services.

* XMLRPCServiceFactory: allows remote objects (exported via XML-RPC) to be wrapped transparently as Copland services.

===============================================================================
COPLAND-WEBRICK

   api: http://copland.rubyforge.org/copland/copland-webrick/api

Copland.WEBrick is a collection of services for the Copland IoC container. This first release (0.1.0) is a collection of new services, never before available for Copland.. All Copland.WEBrick services deal with WEBrick servers and servlets, in various capacities.

* HTTPServerFactory: creates a new WEBrick HTTP server as a Copland service.

* DefaultHTTPServer: a default HTTP server, implemented using HTTPServerFactory, for applications that only need a single HTTP server instance.

* WWWRPCServletFactory: creates new servlets that are each RPC interfaces for an existing Copland service.

--
Jamis Buck
jgb3@email.byu.edu
http://www.jamisbuck.org/jamis

"I use octal until I get to 8, and then I switch to decimal."

Arg... wouldn't you know it, I got the URLs of the new packages wrong...

COPLAND-LIB

   api: http://copland.rubyforge.org/copland-lib/api

COPLAND-REMOTE

   api: http://copland.rubyforge.org/copland-remote/api

COPLAND-WEBRICK

   api: http://copland.rubyforge.org/copland-webrick/api

···

--
Jamis Buck
jgb3@email.byu.edu
http://www.jamisbuck.org/jamis

"I use octal until I get to 8, and then I switch to decimal."