我从 mavenized 泛光灯创建了一个 OSGi 包。我使用 blueprint config.xml 来激活捆绑包。这是蓝图 config.xml:
<bean id="flbean"
class="net.floodlightcontroller.core.FloodlightBean"
init-method="init" destroy-method="destroy">
</bean>
我创建了一个类 FloodlightBean,它提供了 init() 和 stop() 方法来启动和停止包:
public class FloodlightBean {
public void init() throws FloodlightModuleException {
System.out.println("start floodlight");
// Setup logger
System.setProperty("org.restlet.engine.loggerFacadeClass",
"org.restlet.ext.slf4j.Slf4jLoggerFacade");
CmdLineSettings settings = new CmdLineSettings();
/*CmdLineParser parser = new CmdLineParser(settings);
try {
parser.parseArgument(args);
} catch (CmdLineException e) {
parser.printUsage(System.out);
System.exit(1);
}*/
// Load modules
FloodlightModuleLoader fml = new FloodlightModuleLoader();
IFloodlightModuleContext moduleContext = fml
.loadModulesFromConfig(settings.getModuleFile());
// Run REST server
IRestApiService restApi = moduleContext
.getServiceImpl(IRestApiService.class);
restApi.run();
// Run the main floodlight module
IFloodlightProviderService controller = moduleContext
.getServiceImpl(IFloodlightProviderService.class);
// This call blocks, it has to be the last line in the main
controller.run();
}
public void destroy() {
System.out.println("stop floodlight");
}
}
对于 init() 方法,我只是将 net.floodlightcontroller.core.Main 中的代码复制到其中。现在可以在 OSGi 容器中启动 Floodlight。但问题是,一旦 Floodlight 捆绑包启动,它就会永远运行。我不知道如何实现 destroy() 来停止泛光灯。
我只是发现泛光灯是多线程的。所以我不能简单地为 net.floodlightcontroller.core.Main 中的代码创建一个线程。我想知道我是否可以为 init() 创建一个进程,并在 destroy() 中实现杀死该进程。谁能帮我这个?