Addon和AddonUpgrader

《hello world》 章节中,我们已经了解到,一个最基本的java插件项目,但是为了方便起见,并没有凸显出 AddonAddonUpgrader 这两个类的使用。

一个完整的 hello world 项目的目录结构应该如下:

  1. jpress-addon-helloworld
  2. ├── pom.xml
  3. └── src
  4. ├── main
  5. ├── java
  6. └── io
  7. └── jpress
  8. └── addon
  9. └── helloworld
  10. ├── HelloWorldAddon.java
  11. ├── HelloWorldAddonController.java
  12. ├── HelloWorldAddonHandler.java
  13. ├── HelloWorldAddonInterceptor.java
  14. └── HelloWorldUpgrader.java
  15. ├── resources
  16. ├── addon.txt
  17. └── config.txt
  18. └── webapp
  19. └── helloworld
  20. └── index.html
  21. └── test

在源码中,可以看到有 HelloWorldAddon 和 HelloWorldUpgrader 这两个类,他们分别是:

  • HelloWorldAddon:用于监听本插件在安装、卸载、启用和停止的动作,然后做对于的改变。
  • HelloWorldUpgrader:用户监听本插件在升级的过程中进行操作。

他们的代码分别如下:

HelloworldAddon.java :

  1. public class HelloWorldAddon implements Addon {
  2. @Override
  3. public void onInstall(AddonInfo addonInfo) {}
  4. @Override
  5. public void onUninstall(AddonInfo addonInfo) {}
  6. @Override
  7. public void onStart(AddonInfo addonInfo) {}
  8. @Override
  9. public void onStop(AddonInfo addonInfo) {}
  10. }
  • onInstall() : 用于在此插件被安装的时候执行,在这个插件的生命周期中只会执行一次,就是被安装的时候,在这个方法中,我们往往在这里创建需要的数据库表等。
  • onUninstall():用于在此插件被卸载的时候执行,这这个操作的往往是和 onInstall() 相反的,当 onInstall() 创建表或其他资源,我们应该在 onUninstall() 删除表或删除 onInstall() 创建的资源。
  • onStart():此方法用户可以在后台进行启动,当次插件被启动之后,以后只要重启容器比如tomcat、undertow等都会执行此方法。在此方法中,我们可以用来创建自己后台菜单、用户中心菜单等。
  • onStop():和 onStart() 相反,当在 onStart() 创建的资源应该在 onStop() 被销毁。

HelloWorldUpgrader.java :

  1. public class HelloWorldUpgrader implements AddonUpgrader {
  2. @Override
  3. public boolean onUpgrade(AddonInfo oldAddon, AddonInfo thisAddon) {}
  4. @Override
  5. public void onRollback(AddonInfo oldAddon, AddonInfo thisAddon) {}
  6. }
  • onUpgrade() : 当用户在后台对插件进行升级的时候,JPress会调用新插件的HelloWorldUpgrader.onUpgrade() 方法,在此方法中,我们可以对修插件的表结构进行修改等操作。
  • onRollback():当JPress调用新插件的 onUpgrade() 的时候出现了异常、或者此方法返回false,证明此插件安装失败,JPress会对整个插件进行回退到上一个版本,并会调用新插件的 onRollback() 方法。

备注:

HelloWorldAddon 和 HelloWorldAddonUpgrader 都不是必须的,当他们不存在的时候,JPress 在安装、卸载、升级等都不会执行该插件的任何方法。