I just wanted to inform everyone, that there's at least *some* activity
related to HiveMind. :)
I'm working on and with a extension to HiveMind, which is targeted at
building module based applications. There's a Wiki online at
http://hiveapp.raffael.ch/ Sorry, it's very incomplete, but at least it's *something* ... ;) Generally,
the project is open source and licensed under the Apache license, however,
it currently is a one-man-show, I'm the only contributor.
To help you understand better what the idea behind HiveApp is, let me tell
you a bit about its history/origins:
I was prototyping a build system based on a the idea of using the drools
rule engine to take the build decisions. This build system should, of
course be plugin-based, my idea was basically: Without plugins, it doesn't
do anything at all. I decided to use HiveMind as my container.
There were, however, some things about HiveMind, I had to change/extend.
First of all, I wanted drop-in plugability: A plugin should add its
functionality just by its presence. Also, it needed to be able to contain
its own classpath. Further, there were resources (DRL rule files in this
case), that, ideally, could be detected and added to the rule base auto-
matically. Finally, it should be runnable from within the IDE without
having to run any Ant or Maven tasks, to ease development.
That's the point, where the VFS was born: Each module is a little VFS:
/hivemodule.xml: We all know, what this is :)
/lib/*: All the classpath, a bunch of JAR files (called top-level-
container, they are not always actual JAR files)
/whatever: Put more other stuff here
When running in production, this will be the actual directory structure.
When running from within the IDE, those resources are located ... well ...
wherever they are. They're mounted by an entry in a mount file, eg:
The left side is the target path in the VFS, the right side is the physical
path relaitve to the mount file or an absolute URI. The 'EXTEND' entry is
sort of an include: The file target/classpath-mount.porperties is created
by a Maven plugin and contains the runtime dependencies from the M2 POMs.
Using this is optional, of course. The method to build the module's VFS is
is a pluggable module layout.
A second important point was classloader management. Because, if this build
system would ever be usable, I wanted to avoid version conflicts of
different versions of different plugins (which may also be 3rd party
plugins, of course), I wanted to add a intelligent classloader management.
See http://hiveapp.raffael.ch/wiki/doku.php/classloader for details.
Unfortunately, I had to do some workarounds and hacks, to achieve my goals.
In one instance, the AppBuilderFactory, I even had to copy and modify
HiveMind's code. I'd be happy to start contributing to HiveMind to make it
more open, so it's easier to add functionality to HiveMind, i.e. make
HiveMind itself more pluggable. This may be useful for other things, too,
like e.g. some HiveMind for Swing or HiveMind for EJBs project. I'd
definitely would want to keep such extensions out of HiveMind's core.
Of course, we'd have to discuss *what* we're actually going to do. But
allowing to extend HiveMind a bit more might revive the project a bit by
making it more open to other applications than just Webapps (I know,
HiveMind basically already is open to other applications, but you can
always "feel" that the developers mainly had Webapps in mind).
Comments and suggestions are of course welcome ... (I probably wouldn't have
written this mail if they weren't ;)
The difference between theory and practice is that in theory, there is
no difference, but in practice, there is.