Plugins
Modularity
Until we move to OSGI, there's a very basic plugin support. Pack your code and place it in the /plugins folder.
Each plugin has a plugin_myname.xml file and an optional plugin_myname.jar file. This is a typical plugin file:
<plugin classname="blinkie.BlinkiePlugin"> </plugin>
The typical plugin class looks like (registers a simple service that says "hello" instead of "hi"):
package blinkie import com.razie.pub.agent._ import com.razie.pub.lightsoa._ import com.razie.pub.draw._ import com.razie.pub.base._ /** simplest service example */ @SoaService (name="blinkie", descr="a simple service", bindings=Array("http")) class BlinkieService extends AgentService { @SoaMethod (descr="well, it says \"hello\"") def sayhi (out:DrawStream) = out write "hello" } /** plugin lifecycle class */ class BlinkiePlugin extends com.razie.pub.plugin.Plugin { override def loadphase2 = Agent.instance() register new BlinkieService }
For now you have to include any eventual libraries needed by your plugin into the jar itself…sorry. Make sure you don't duplicate what's in MUTANT/lib -
Debugging
These events in the log should clarify any issues: INIT_PLUGIN and FOUND_PLUGINS