清风飒影 Blog

自由、平等、随意、突破!

Jfinal集成dubbo

| 评论

通过我的推荐,公司上个产品使用了淘宝的dubbo框架,应用效果还不错。 后端技术使用的是:springmvc+hibernatejap+dubbo。 最近参与一个新的产品,想使用jfinal做后端,同时集成dubbo框架, 网上没有现成的集成例子,自己动手丰衣足食,其中也遇到了一些坑,为了 避免有同样需求的人出错,这里做个记录。 dubbo文档http://alibaba.github.io/dubbo-doc-static/Home-zh.htm

注意事项:由于阿里关闭了dubbo.xsd的线上路径。需要将dubbo.xsd文件导入到eclipse本地。 window->preferences->xml->xml catalog->add->catalog entity->file system ->dubbo.xsd文件在dubbo-2.5.3.jar中(不限版本,解压到磁盘目录)-> key=http://code.alibabatech.com/schema/dubbo/dubbo.xsd PS:直接导入后,key默认没有后面的/dubbo.xsd 要手动加上,再在项目上右键validate即可消除xml校验错误

步骤
1.  准备jar文件,拷贝jfinal的spring支持jar文件到web-inf/lib目录下

spring依赖

2.  拷贝dubbo依赖到web-inf/lib目录下。一定要拷贝到lib目录下并在eclipse中右键buildpath -> add to buildpath
    运行的时候,项目会验证dubbo.xsd文件。文件在dubbo.2.5.3.jar中。

dubbo依赖

3.  applicationContext.xml、consumer.xml文件放到eclipse项目的src根目录下
    applicationContext.xml内容
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:context="http://www.springframework.org/schema/context"  

    xsi:schemaLocation="
          http://www.springframework.org/schema/beans   
          http://www.springframework.org/schema/beans/spring-beans.xsd   
          http://www.springframework.org/schema/context   
          http://www.springframework.org/schema/context/spring-context.xsd   ">

    <import resource="consumer.xml"/>
</beans> 
    consumer.xml内容,注意接口的包路径一定要和提供者的package一致。不然找不到。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans        
    http://www.springframework.org/schema/beans/spring-beans.xsd        
    http://code.alibabatech.com/schema/dubbo        
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd 

    ">

    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="xjly3"  />

    <!-- 使用multicast广播注册中心暴露发现服务地址 -->
    <dubbo:registry  protocol="zookeeper"  address="127.0.0.1:2181" />
    <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
    <dubbo:reference id="demoService" interface="com.supermap.egispservice.base.service.DemoService" version="2.5.3" check="false"/>

</beans>
    provider.xml内容,这个文件是放在提供者项目中的。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="provider_menu" />

    <!--使用zookeeper注册中心暴露服务地址 -->
    <dubbo:registry  protocol="zookeeper"  address="127.0.0.1:2181" />
    <dubbo:protocol port="20821"/>
    <dubbo:service interface="com.supermap.egispservice.base.service.DemoService" version="2.5.3" ref="demoService"  timeout="30000" retries="0" async="false" loadbalance="leastactive" actives="200"/>
    <bean id="demoService" class="com.supermap.egispservice.base.service.DemoServiceImpl" />

</beans>
4.  JfinalConfig子类中添加springplugin
log.info("SpringPlugin spring");
me.add(new SpringPlugin("classpath:applicationContext.xml"));
5.  controller调用代码
import java.util.List;

import little.ant.platform.annotation.Controller;
import little.ant.platform.controller.BaseController;
import little.ant.platform.model.User;
import little.ant.platform.tools.ToolContext;
import little.ant.crm.model.Customer;
import little.ant.crm.model.Messenger;
import little.ant.crm.model.MessengerRemark;
import little.ant.crm.service.MessengerService;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import com.jfinal.aop.Before;
import com.jfinal.plugin.spring.Inject;
import com.jfinal.plugin.spring.IocInterceptor;
import com.supermap.egispservice.base.service.DemoService;

@Before(IocInterceptor.class)
@Controller(controllerKey = "/jf/crm/messenger")
public class MessengerController extends BaseController {

    @SuppressWarnings("unused")
    private static Logger log = Logger.getLogger(MessengerController.class);

    @Inject.BY_NAME
    private DemoService demoService;

    /**
     * 默认列表
     */
    public void index() {
        log.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
        log.info(demoService.sayHello("jfinal!"));
        log.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

        render("/crm/messenger/list.html");
    }
}

评论