【发布时间】:2012-06-22 21:01:34
【问题描述】:
这个问题和this one很相似,但是我需要专注于不同的问题。
假设我有一个带有大型数据库(即电影数据库)的应用程序。应用程序的用户应该能够添加自己的插件并能够运行它们。
场景可能如下所示:
- 启动主应用程序
- 将 stats-plugin.jar 放在 /app/plugins 目录中
- 告诉主应用加载新插件
- 告诉应用列出插件
- 选择一个插件(例如刚刚安装的那个)并运行它
- stats-plugin.jar 查询电影数据库并统计恐怖电影,返回计数
- 主应用显示结果
每个插件都可以有几个标准方法(一个常见的Plugin 接口)可以被调用,例如onInitialize、onRun等
主应用需要保证的是,如果插件崩溃(例如除以 0),主应用将保持稳定(例如会显示错误对话框,但不会自行崩溃)。还应该可以限制执行时间并检查插件正在执行的操作。
这一切都归结为一个沙盒插件环境。最重要的事情是:插件式的可扩展性和沙箱插件 - 只允许安全操作(例如读取数据库,但不更新它)。
插件不必用 Java 编写。它需要以某种方式可执行......它甚至可以是一个 JavaScript 文件......如果可能的话。
你会如何处理这样的任务?
【问题讨论】: