HiveMind builds with Maven so it has one of those neat Maven web sites
(http://jakarta.apache.org/commons/sandbox/hivemind).  It's more than the 
bare-bones, I have some
good docs in place and more coming.

Again, my goal was to mix and match some neat stuff I'd seen elsewhere.  I like 
how Eclipse finds
plugins using simple rules ("look in this directory") and bootstraps itself 
from what it finds. I
like the interceptor approach, used in JBoss 3.x, to converting POJOs into 
full-fledged services.

I also saw a lot to like in Avalon, but was driven away by the need for an 
explicit assembly stage
to identify all components and express the relationships between them.

HiveMind has a very strong sense of a "service".  It starts with a service 
interface; this is paired
with a core implementation, a POJO that implements the interface.

You can then add any number of interceptors; these are classes generated on the 
fly that implement
the service interface and wrap around the implementation (or another 
interceptor).  Canonical
example, included in the framework, is LoggingInterceptor that logs method 
entry and exit.

The interceptor stack is dynamically assembled; any module may contribute 
interceptors to any
service.  Contributions are simply references to another HiveMind service (as 
much as possible,
HiveMind is constructed recursively in this way) ... the 
ServiceInterceptorFactory interface defines
how a service may construct an interceptor.  Interceptors could be dynamic 
proxies, but even better
is using Javassist to create new classes on the fly.  I digress.

One thing I want to avoid in HiveMind is endless, buggy, ad-hoc code for 
walking DOM represenations
(whether is w3c, JDOM, DOM4J, XOM ... any tree representation) of configuration 
data. Sure, you are
expressing extension-point contributions as XML, but when you access the 
extension point, you really
want to see Java objects there, not some XML representation.  I've adapted 
basic ideas from Jakarta
Digester; when you define an extension point, you define the elements and 
attributes that may be
contributed AND you define Digester-like rules for converting those elements 
and attributes into
objects and properties.  That shifts the burden of error reporting and 
consistency checking (stuff I
consider "plumbing") into the framework, where it belongs (and will be done 
consistently and
comprehensively).

Unless I'm mistaken, Avalon doesn't have any concept similar to this.  I 
believe I saw a bit about
configuration, and configuration data represented as XML, but not the big 
concepts from HiveMind
(and Eclipse): that contributions can come from multiple modules.

A very important aspect of HiveMind is developer productivity, including 
documentation.  HiveMind
includes Ant tasks that read a set of HiveMind module deployment descriptors 
and generate
JavaDoc-like documentation from them:
http://jakarta.apache.org/commons/sandbox/hivemind/sample-registry/index.html

Where does this fit into Geronimo?  I have a vision of large "blocks" of 
functionality a multiple
sub-projects, each producing a JAR (and a HiveMind module deployment 
descriptor).
The central bootstrap framework will generate a HiveMind repository from those 
descriptors and
bootstrap the application server from there.

Philosophy:  I don't deal very well with chaos.  I like to bring a semblance of 
order within a
flexible framework, a strong, flexible skeleton to improvise against.  I 
believe a proper framework
makes it easier to make the right choice rather than the wrong one; that is, 
the easiest choice
should be the right choice, by design.

Final note: HiveMind is alpha because the feature set is not where I want it 
for a 1.0 release. The
code itself is very well tested (88% code coverage)  and stable. At this point, 
I'm adding features
around the edges (such as new builtin services and the like), not changing the 
internals in any
major way.

--
Howard M. Lewis Ship
Creator, Tapestry: Java Web Components
http://jakarta.apache.org/tapestry



> -----Original Message-----
> From: Alex Blewitt [mailto:[EMAIL PROTECTED] 
> Sent: Friday, August 08, 2003 1:38 PM
> To: Howard M. Lewis Ship
> Subject: Hive Mind 
> 
> 
> Sounds interesting. Can you go into a bit more detail? I 
> think the idea 
> of extension points is pretty much the right way to go; it's just a 
> case of convincing Those That Be that just because the 
> initial codebase 
> sits atop JMX ala JBoss, that there might be better ways of 
> doing it :-)
> 
> Alex.
> 

Reply via email to