Hi there,

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:

  EXTEND: target/classpath-mount.properties
  /hivemodule.xml: descriptor/hivemodule.xml
  /rules: resources/rules

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.


Other things you can find in HiveApp are mainly some additional services 
(e.g. the pattern for sharing service implementations as introduced at 
http://imsardine.blogspot.com/2008/03/hivemind-how-to-share-same.html is 
part of the HiveApp core since almost the beginning).


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 ;)


Cheers,
   Raffi

-- 
The difference between theory and practice is that in theory, there is
no difference, but in practice, there is.

[EMAIL PROTECTED] · Jabber: [EMAIL PROTECTED]
PGP Key 0x5FFDB5DB5D1FF5F4 · http://keyserver.pgp.com

Reply via email to