Skip to content

环境搭建与快速体验

sunlet edited this page May 29, 2022 · 12 revisions

概念简介

JPlugin应用系统是完全由一系列插件组成的系统,我们基于JPlugin开发应用就是开发一些插件。实质上,JPlugin-core、JPLugin-das、JPlugin-mvc本身也是一系列列插件(Plugin)。 每个插件由插件类和插件资源组成。插件类一般命名为Plugin.java,插件资源为Plugin.java所在的包以及子包所包含的所有代码。

体验一:创建并运行HelloWord工程

设置父POM

在你的Maven工程 pom.xml中增加下面一段,设置父POM:

	<parent>
		<groupId>net.jplugin.pom</groupId>
		<artifactId>base-pom-core</artifactId>
		<version>2.6.0-SNAPSHOT</version>
	</parent>

创建系统启动类 AppMain.java

代码如下

package jplugin.demo.helloworld;

import net.jplugin.core.kernel.PluginApp;
import net.jplugin.core.kernel.api.PluginAutoDetect;

public class AppMain
{
    public static void main( String[] args )
    {
        //让你的Plugin能被自动扫描检测
        PluginAutoDetect.addAutoDetectPackage("jplugin.demo");

        //启动项目
        PluginApp.main(args);
    }
}

创建一个最简单的Plugin

代码如下。注意为了让框架能认出这是一个需要加载的Plugin类,@PluginAnnotation注解不可或缺。

package jplugin.demo.helloworld;

import net.jplugin.core.kernel.api.AbstractPlugin;
import net.jplugin.core.kernel.api.PluginAnnotation;

@PluginAnnotation
public class Plugin extends AbstractPlugin {
    public Plugin(){

    }
    @Override
    public int getPrivority() {
        return 0;
    }

    @Override
    public void init() {
        System.out.println("My Plugin Initing........");
    }
}

启动工程

使用AppMain启动你的项目,会发现执行异常:Can't find the config dir, jplugin.home is D:\Work\git-repository\jplugin-demo\hello-world. 这是因为系统启动需要一个config目录,在MAVEN工程的 src/main/resources目录下面创建config目录,再次运行AppMain,会在控制台看到系统正常启动,并看到“My Plugin Initing........”信息。

控制台信息解读

下面列出来关键的控制台日志的解释:


$$$ plugin.home=D:\Work\git-repository\jplugin-demo\hello-world\.  解释:jplugin-home目录
$$$ ConfigDir=D:\Work\git-repository\jplugin-demo\hello-world\./src/main/resources/config   解释:配置目录
$$$ WorkDir=D:\Work\git-repository\jplugin-demo\hello-world\.   解释:工作目录,日志会放到这个目录的log子目录下面

... ...

==Now to init plugins==
StartPlugin :[0] net.jplugin.core.kernel.Plugin   解释:系统核心插件kernel启动
StartPlugin :[1] net.jplugin.core.config.Plugin   解释:系统配置插件config启动
StartPlugin :[2] net.jplugin.core.service.Plugin  解释:系统服务插件service启动
StartPlugin :[3] net.jplugin.core.log.Plugin      解释:系统日志插件log启动
StartPlugin :[4] net.jplugin.core.rclient.Plugin  解释:系统rclient插件启动
StartPlugin :[5] jplugin.demo.helloworld.Plugin   解释:这是重点,您自己编写的插件启动了!!!

日志文件

上面控制台打印的 WorkDir下面的log目录,会保存系统日志,可以看到两个日志文件。

  • jplugin-start.log 保存系统启动过程的日志
  • app.elk.log 保存系统运行过程的日志

体验二:创建一个单例的服务(JavaBean)

创建GreetService服务

创建一个Service,GreetService.java,注意需要用@BindService注解它是一个服务,代码如下

package jplugin.demo.helloworld.service;

import net.jplugin.core.service.api.BindService;

@BindService
public class GreetService {
    public String getGreeting(String name){
        return "################## Hello "+name;
    }
}

创建AppService服务

为了引用GreetService服务,我们创建一个新的服务AppService服务,并在属性上通过@RefService自动注入访问GreetService,代码如下

package jplugin.demo.helloworld.service;

import net.jplugin.core.kernel.api.Initializable;
import net.jplugin.core.service.api.BindService;
import net.jplugin.core.service.api.RefService;

@BindService
public class AppService implements Initializable {
    @RefService
    GreetService greetService;

    @Override
    public void initialize() {
        System.out.println(this.greetService.getGreeting("Tom"));
    }
}

重新运行AppMain,会看到控制台有对应的输出:“#################### Hello Tom”

在Plugin.java当中调用GreetService服务

除了可以在一个服务调用另一个服务,我们在Plugin.java类当中也可以调用服务。我们修改前面的Plugin.java类,修改后代码如下

@PluginAnnotation
public class Plugin extends AbstractPlugin {
    public Plugin(){

    }
    @Override
    public int getPrivority() {
        return 0;
    }

    @RefService
    GreetService greetService;
    
    @Override
    public void init() {
        System.out.println(this.greetService.getGreeting("Tom"));
    }
}

重新运行AppMain,会看到控制台有对应的输出:“#################### Hello Jack”

体验三:体验Jplugin-mvc

JPlugin-core是一个插件式应用框架,如果需要开发Web应用,需要结合jplugin-mvc或者Spring-boot,二者选择一个即可。本节介绍使用jplugin-mvc。

修改父pom,增加对jplugin-mvc的依赖

pom.xml中parentpom部分修改为

	<parent>
		<groupId>net.jplugin.pom</groupId>
		<artifactId>base-pom-mvc</artifactId>
		<version>2.6.0-SNAPSHOT</version>
	</parent>

在依赖部分,增加对嵌入式tomcat插件的依赖

		<dependency>
			<groupId>net.jplugin.extension</groupId>
			<artifactId>jplugin-embed-tomcat</artifactId>
		</dependency>

编写一个Controller

以下注意使用@BindController注解,controller中依然可以使用RefXXX来注入引用

package jplugin.demo.helloworld.controller;

import jplugin.demo.helloworld.service.GreetService;
import net.jplugin.core.service.api.RefService;
import net.jplugin.ext.webasic.api.AbstractExController;
import net.jplugin.ext.webasic.api.BindController;

@BindController(path = "/greetService")
public class GreetController extends AbstractExController {
    @RefService
    GreetService greetService;
    public void greet(){
        String name = getReq().getParameter("name");
        if (name==null || name.equals("")){
            name = "Peter ";
        }
        renderJson(greetService.getGreeting(name));
    }
}

访问服务

用浏览器访问 http://localhost:8080/greetService/greet.do ,会看到页面显示 #################### Hello Petter 。 用浏览器访问 http://localhost:8080/greetService/greet.do?name=Ketty ,会看到页面显示 #################### Hello Ketty。

体验四:体验Jplugin与Spring的结合使用

注意:JPlugin-core是一个插件式应用框架,如果需要开发Web应用,需要结合jplugin-mvc或者Spring-boot,二者选择一个即可。本节介绍jplugin-core和spring-boot的结合使用。

和spirng-boot一起使用时,jplugin管理的Bean(包括Service等各种扩展)可以通过@AutoWire等注解引用Spring容器的bean,Spring的Bean中也可以通过RefXXX等注解引用JPlugin管理的各种bean。