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