1、插件依赖类型:

       插件的依赖类型分为三种:插件、资源文件、服务文件

2、插件依赖的加载逻辑

       工程启动时,会检测插件的依赖,并通过日志信息,告知用户所依赖的是否存在。如果插件

依赖为插件或者资源文件时,会等到所有插件加载结束时,再判断插件依赖是否存在。如果插件

依赖为服务文件时,会在加载依赖的同时,启动服务。如果希望插件加载之前,服务就已经启动,

则在配置文件中,将依赖配置到需要依赖该服务的插件之前。

3、设计器端更新插件说明:

       当插件的依赖类型为插件时,用户在更新插件或者下载插件时,不会及时提醒用户下载依赖,

而是当设计器重新启动时,通过日志告知需要依赖某个插件,此时,用户可以根据日志信息继续

下载依赖的插件。

       当插件依赖的类型为资源文件或者服务文件是,用户在更新插件或者下载插件时,会提醒用户

需要依赖的资源文件或服务文件。用户可以选择下载或者不下载依赖。

4、平台更新插件说明:

       当插件的依赖类型为插件时,用户在更新插件或者下载插件时,不会同时下载依赖的插件。

       当插件依赖的类型为资源文件或者服务文件是,用户在更新插件或者下载插件时,会默认将依

赖同插件一起下载。

5、插件依赖配置说明:

       添加依赖的方法是在插件配置文件的dependence属性中添加依赖节点DependenceUnit,节点的

属性为依赖的标志号dependenceID、依赖的类型dependenceType、依赖的安装地址dependenceDir

如果插件的类型为service时,可设置启动服务的处理类class,

6、插件配置示例:

 <dependence>
            <DependenceUnit dependenceID="plugin.geojson" dependenceType="file" dependenceDir="/resources/geojson"/>
            <DependenceUnit dependenceID="plugin.phantomjs" dependenceType="service" dependenceDir="/resources/phantomjs" class="com.fr.plugin.chart.export.pool.ServerObjectFactoryInterface"/>
 </dependence>

7、插件依赖类型为服务时的使用方法:

      a:管理

            所有的服务都在服务管理器中进行管理,插件启动时,会启动插件中定义好的具体服务,并加入

      到管理器中统一管理,每个服务都有一个独特的ID

      b:接口说明

            使用服务时,调用服务的fetchServiceData方法,传入请求携带的数据。设计器会检测是本地环境

     还是远程环境,如果是本地环境,会调用服务的localServiceAction方法,如果是远程环境,则会调用

     服务的remoteServiceAction方法。方法的具体实现由具体的服务实现。接口如下:

public interface PluginServiceCreator{
    public void startService();

    public void destroyService();

    public String localServiceAction(String req) throws Exception;

    public String remoteServiceAction(String req) throws Exception;

    public String fetchServiceData(String req);
}

    c:使用方法

          具体服务时,只需要继承已经写好的抽象类PluginService,实现其中的本地方法,以及返回一个自定义

    服务的ID,即可支持本地和远程服务。具体服务类实现方法如下:

import com.fr.dependservice.PluginService;

public class MyService extends PluginService {
    @Override
    public void startService() {
        //自定义启动服务代码
    }

    @Override
    public void destroyService() {
        //自定义销毁服务代码
    }

    @Override
    public String localServiceAction(String req) throws Exception {
        //本地服务处理方法
        return null;
    }

    @Override
    protected String getServiceID() {
        //自定义服务ID
        return null;
    }
}

8、可能存在的问题

     当两台主机相互远程时,可能会有问题