In The Pipeline...

Optional Annotations

The @CoinjemaObject annotation is now optional. Instead of annotating your classes, you can create a simple aspect in which you define all your classes that Coinjema should handle like so:
declare parents : MyClass implements ContextOriented;
The @CoinjemaDependency is now also optional. Instead, all "set" methods that take a single parameter will be treated as potential injection sites into your class, and coinjema will look for a resource named [ClassName].[MethodName] or [injectedClassname]. Coinjema will assume a default value exists if it doesn't find the resource.

Inheritable Property Files

Property files will be able to inherit from property files in parent contexts, so rather than having to create property files with all the same properties for each context, each context can just have the properties that they want changed.

Dependency Type Configurable

Now all dependencies can be defined to be global, per Class, or per Object. By appending .perClass or .perObj to the dependency name (ie, filename for a typical setup), you can change the way a dependency is treated.


Coinjema now uses jdk logging for message outputs, with some very simple configuration options available from the file.

Auto Context Tracking

Coinjema has an annotation that lets you tell it specific methods/classes that should track context. It used to automatically track contexts through all coinjema classes, but that turned out to be a performance killer. Now, Coinjema adds some auto tracking back in by tracking context through classes that are instantiated with a CoinjemaContext object because I have found that the only reason one creates objects with specific context objects is because it is a gateway object to a new context, and everything underneath that object needs to be run within the new context. This makes obsolete almost all uses of the @CoinjemaContextTrack annotation.

Thread-Based Context Setting

The current context can be programmatically set on a thread now and works well so long as programmers are careful to pop/push contexts correctly.
New In Version 0.5

Redirect to other Context

The .redirect format now supports redirection to a specific other context. For instance, instead of just pointing to TemplateService, one can now point to contextA/contextB/TemplateService, if desired.

New Registry API

Groovy scripts can now access shared dependencies directly and the context root via the new Registry reference.

Coinjema Properties

Coinjema now offers some basic configuration options that effect how Coinjema runs. A new file can be placed in any context directory. The properties will be inherited from parent contexts, so only those properties to be overridden need to be in the file.

Context Tracking Annotation

Previously, Coinjema tracked the current context through all your Coinjema Objects. From experience using Coinjema, this appears highly wasteful, as most of your objects do not need to be tracked, and furthermore, an application will typically have a "gateway" that offers entrance into the guts of your code where you know what context you want to switch to. The new annotation allows developers to specify where Coinjema should watch for context changes.