JFinal+Hessian调用远程服务

本文介绍如何在JFinal项目中利用Hessian调用远程服务。通过一个抽象类来配置远程服务,任务业务类继承抽象类并调用对应的方法。依赖于服务端的Spring+Hessian配置,具体服务URL需要根据实际访问路径设置。

【前言】接前文「JFinal+Quartz动态任务调度控制台」,前面只完成了任务调度,本文使用JFinal+Hessian实现后台调用远程服务,服务端的Spring+Hessian不在本文重点讨论范围

【正文】
逻辑:后台通过一个抽象类完成远程服务配置,具体的任务业务类继承该抽象类,调用抽象类中的远程服务对象及相应的方法。(本需求是应对单一接口,每个任务业务类调用该接口中的一个方法)

maven依赖直接从服务端的pom.xml里面找

<dependency>
    <groupId>com.caucho</groupId>
    <artifactId>hessian</artifactId>
    <version>4.0.38</version>
</dependency>

任务抽象借口

public abstract class AbstractJob implements Job {

    public static final Logger      LOG                 = Logger.getLogger(AbstractJob.class);
    //这个变量存放远程服务地址,最好写到配置文件中,方便不同环境切换,此处简写方便理解
    public static final String SERVICE_URL = "http://127.0.0.1:8080/jobService";
    //这个接口是服务端api项目里的,所以pom.xml中要添加相应的api项目依赖
    private static JobService jobService;
    //单例模式
    public static synchronized JobService getInstance() throws Exception{
        if(jobService==null){
            HessianProxyFactory factory = new HessianProxyFactory();
            factory.setOverloadEnabled(true);
            jobService = (JobService) factory.create(JobService.class, SERVICE_URL);
            return jobService;
        }
        return jobService;
    }
}

注:上述代码中的SERVICE_URL具体内容按照服务端访问路径和服务接口的Hessian配置来决定。

任务业务类

public class DynamicJob extends AbstractJob{

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

        try {
            LOG.info("DynamicJob_START");
            //getInstance()获取远程服务对象
            //test()方法为目标服务,需要在服务端中实现。
            getInstance().test1();
            LOG.info("DynamicJob_SUCCESS");
        } catch (Exception e) {
            LOG.error("DynamicJob_FAIL_e=="+e);
        }
    }

}

不同的任务调用远程服务接口中不同的方法即可

public class DynamicJob2 extends AbstractJob{

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

        try {
            LOG.info("DynamicJob2_START");
            //getInstance()获取远程服务对象
            //test2()方法为目标服务,需要在服务端中实现。
            getInstance().test2();
            LOG.info("DynamicJob2_SUCCESS");
        } catch (Exception e) {
            LOG.error("DynamicJob2_FAIL_e=="+e);
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值