|
преди 8 години | |
---|---|---|
bundles | преди 8 години | |
doc | преди 8 години | |
lib | преди 8 години | |
test | преди 8 години | |
.gitignore | преди 8 години | |
.tern-project | преди 8 години | |
README.md | преди 8 години | |
index.js | преди 8 години | |
package.json | преди 8 години |
Researching a way to bring java alike OSGi to nodejs for hot swappable modules.
This is not an intention to replace nodejs modules but a way to swap certain areas of the application such as bringing new versions without a restart
Bundle:
A bundle should export bundleStart, or bundleActivator object with start and stop methods
This specific bundle it will receive messages from core-shell bundle, execute a shell command and print output
Placing the bundle in {app path}/bundles/shell-test/index.js
var log = require('hlogger').createLogger('shell-test');
var child = require('child_process');
function bundleStart(context) {
log.info('Command provider installed');
// Create a bash and transport commands
context.events
.channel('core-shell')
.after('cmd',(req,res,e) => { // Subscribe for core-shell cmd messages, after means it will let execute any preexisting shell and if not found it will execute this
if(e.count != 0) return;
e.wait();
var shcmd = req.cmd + " " + req.args.join(" ");
var proc = child.exec(shcmd);
proc.stdout.pipe(res);
proc.stderr.pipe(process.stderr);
proc.on('close',function() {
e.done();
});
});
}
module.exports.bundleStart = bundleStart;
Main app:
var BundleManager = require('node-hci'); // or path to node-hci since is not published in npm yet
// This will load bundles from the {app path}/bundles
var manager = new BundleManager({runPath: __dirname + "/bundles"});
manager.loadDefaultBundles();
git clone http://dev.hexasoftware.com/stdio/node-hci
cd node-hci
npm install
node test/hci-usecase
And monitor bundle should be accessible by http://127.0.0.1:3500/monitor