基于SOA的分布式水果商店系统

Kanagawa

发布日期: 2021-03-06 10:35:23 浏览量: 191
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、项目介绍

1.1 项目简介

基于SOA的分布式电商客户端系统,各服务和总线之间采soap1.2协议。

1.2 采用关键技术

  • CXF3.7框架

  • Spring

  • JSP&Servlet

  • JSTL

  • EL表达式

  • c3p0连接池

  • DbUtils数据访问框架

  • BeanUtils

  • jQuery

  • Ajax

  • 自定义事务管理机制MannagerThreadLocal

  • SOAP1.2协议

1.3 开发环境

  • jdk1.7

  • tomcat8.5、8.0

  • MySql5.5.27

  • MyEclipse Enterprise Workbench 2017 CI 7

  • 字符集编码:utf-8

1.4 项目演示

主页

登录

注册

购物车

水果列表

历史订单

二、源码简析

2.1 架构设计

ws-fruitshop-bus 总线
ws-fruitshop-fruit 提供水果服务
ws-fruitshop-order 提供订单服务
ws-fruitshop-user 提供用户服务

2.2 接口描述

服务接口 方法 描述 发布地址 Wsdl文件
UserServiceInterface login() 为总线提供登录服务 http://127.0.0.1:8081/ws-fruitshop-user/ws UserServiceInterface_wsdl.xml
UserServiceInterface regist() 为总线提供注册服务 http://127.0.0.1:8081/ws-fruitshop-user/ws UserServiceInterface_wsdl.xml
FruitServiceIntergface findFruitPage() 为总线提供水果页服务 http://127.0.0.1:8084/ws-fruitshop-fruit/ws FruitServiceInterface_wsdl.xml
FruitServiceIntergface findFruitById() 为总线提供查询水果服务 http://127.0.0.1:8084/ws-fruitshop-fruit/ws FruitServiceInterface_wsdl.xml
FruitServiceInterface2 updateReserve() 为order服务提供更新水果库存服务 http://127.0.0.1:8084/ws-fruitshop-fruit/ws FruitServiceInterface2_wsdl.xml
OrderServiceInterface findOrderByUserID() 为总线提供根据用户ID查找订单服务 http://127.0.0.1:8087/ws-fruitshop-order/ws FruitServiceInterface2_wsdl.xml
OrderServiceInterface addOrder() 为总线提供添加订单服务 http://127.0.0.1:8087/ws-fruitshop-order/ws FruitServiceInterface2_wsdl.xml

2.3 数据库

ws-fruitshop-user项目使用mysql5.5.27

ws-fruitshop-order项目使用mysql5.5.27

ws-fruitshop-fruit项目使用mysql5.5.27

2.4 webservice服务开发

  • 下载cxf框架,并配置系统环境变量。本次开发使用apache-cxf-3.2.7

  • 创建web项目,并导入CXF下lib文件夹里的所有jar包

  • 创建SEI接口,注意加入‘@WebService’标签,如:

  • 创建SEI实现类,如

  • 配置spring配置文件applicationContext.xml发布服务,配置服务地址、服务接口和服务实现类。如:

  • 配置web.xml,配置spring配置文件和加载的listener,配置CXF的servlet

  • 将项目部署到tomcat下,启动tomcat

  • 测试服务

WSDL地址规则

如:http://localhost:8081/ws-fruitshop-user/ws

2.5 webservice服务生成客户端并部署

= 配置客户端spring配置文件applicationContent.xml

  • 根据wsdl说明书使用生成代码来调用远程服务

2.6 服务业务关键代码

  • 三个服务项目和一个总线项目统一采用MVC风格,包的命名格式类似下图:

  • Dao层使用C3P0连接池和Apache.commons.dbutils框架对数据库进行操作

  • 事务管理,自定义线程管理类ManagerThreadLocal

  • 使用Apache.commons.beanutils工具封装从前端传入后端的数据

  • 使用JSTL的<c:forEach >标签水果展示、购物车信息、历史订单信息等都采用了动态表单

  • 登录、注册、修改信息,使用jQuery在前台拦截可以不访问数据库确认的错误,减少数据库约束。以注册的jQuery为例,提前写好错误提示的div文字,当检测出需要拦截时,jQuery.css()方法响应对应div的id,更改样式

三、项目部署简介

注:因为在本地测试,所有的服务和总线都部署在本地。

  • 在MyEclipse或Eclipse下打开四个项目

  • 分别右键每个“工程 -> Properties -> Java Build Path -> Add JARs”导入所有“外部jar包”文件夹下的jar包

  • 在项目文件中,已经包含了服务所生成的客户端代码。注意生成的客户端代码还是java源码,并没有进行打包处理,已经导进了项目源码中

  • 向数据库中导入三个数据库脚本fruit.sql、order.sql、user.sql,会生成三个数据库,数据库中已经存在一些开发时测试用的数据

  • 根据本地数据库信息配置ws-fruitshop-fruit、ws-fruit-order和ws-fruit-user三个服务项目src下的c3p0-config.xml

  • 准备4个tomcat服务器,先将提供服务的ws-fruitshop-fruit、ws-fruit-user项目部署在相应的两个服务器上

  • 由于服务项目ws-fruitshop-order和总线ws-fruit-bus都用到了其他服务提供的接口,所以先配置ws-fruitshop-order项目config下的applicationContext.xml的fruit服务地址。只需根据ws-fruitshop-fruit所在服务器的端口号修改端口号即可。配置完成后,将项目ws-fruitshop-order部署在第三个服务器上,并启动

  • 再配置ws-fruitshop-bus项目config下的applicationContext.xml。根据前三个服务所在服务器的端口号修改端口号即可

  • 再将ws-fruitshop-bus部署到第四个服务器上并启动访问:localhost:8080/ws-fruitshop-bus/index.jsp。当然端口号还是修改为总线项目部署服务器的端口号

注意

  • 在步骤“3”中讲到,所有服务的客户端代码已经生成,并且以java源代码的形式添加到相应项目的相应包中。当然,可按照该文档“webservice服务生成客户端并部署”进行重新生成。生成之后在替换相应包中的源码即可,所以下面给出各项目用到其他外部服务的客户端代码所放的位置

    • 在ws-fruitshop-bus中com.fruitshop.fruit.service存放ws-fruitshop-fruit提供的FruitServiceInterface服务。com.fruitshop.order.service存放ws-fruitshop-order提供的OrderServiceInterface服务。com.fruitshop.user.service存放ws-fruitshop-user提供的UserServiceInterface服务
    • 在ws-fruitshop-order中com.fruit.service2存放ws-fruitshop-fruit提供的FruitServiceInterface2服务
  • 各服务提供方的发布地址也是能修改的,例如:http://127.0.0.1:8084/ws-fruitshop-fruit/ws/fruit?wsdl

    • ‘127.0.0.1’ 是服务发布的服务器地址
    • ‘8084’是服务器发布服务的相应端口号
    • ‘ws-fruitshop-fruit’是服务项目名称
    • ‘ws’是CXF的servletd的url-pattern,可在WebRoot/WEB-INF/web.xml中修改
    • ‘fruit’是服务接口的地址可在config/applicationContext.xml中配置
上传的附件 cloud_download 基于SOA的分布式水果商店系统.7z ( 85.32mb, 7次下载 )
error_outline 下载需要9点积分

发送私信

世間萬物不及你眼中點點星辰

19
文章数
18
评论数
最近文章
eject