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

262 篇文章 3 订阅
261 篇文章 0 订阅
本文介绍了基于SOA的分布式水果商店系统,采用CXF3.7框架、Spring、JSP和Servlet等技术。系统各服务间通过SOAP1.2协议通信,涉及数据库管理、事务处理和Web服务开发。详细讲解了项目部署、架构设计和关键业务代码。
摘要由CSDN通过智能技术生成
源码下载  http://www.byamd.xyz/hui-zong-1/

ws-fruitshiop

项目介绍

  1. 项目简介

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

  2. 采用关键技术

CXF3.7框架

Spring

JSP&Servlet

JSTL

EL表达式

c3p0连接池

DbUtils数据访问框架

BeanUtils

jQuery

Ajax

自定义事务管理机制MannagerThreadLocal

SOAP1.2协议

  1. 开发环境

jdk1.7

tomcat8.5、8.0

MySql5.5.27

MyEclipse Enterprise Workbench 2017 CI 7

字符集编码:utf-8

  1. 项目演示
  • 主页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Gdm6SVp-1617337855910)(media/64bd2dc7a0d326b97062b3f675a0d57b.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d7d9YKwa-1617337855913)(media/56696f072de998204f2fd4a43ff1f23e.png)]

  • 登录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5IX5wrj2-1617337855916)(media/eeedb648794ddd9c4480495bf355b3df.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OWDyjBkf-1617337855919)(media/e05a8dcd92209565db28df4d9a2be69b.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MrxGeao2-1617337855922)(media/52e82432ae1c80c7d0e47adb503cb714.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kAHaDxF6-1617337855924)(media/5f6ffc22e2010cc1f2c58e95ce8450d0.png)]

  • 注册

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0RKWBKWZ-1617337855926)(media/ba77985d341f636bce3751ad4e479982.png)]

  • 购物车

  • 水果列表

  • 历史订单

源码简析

  • 架构设计
ws-fruitshop-bus总线
ws-fruitshop-fruit提供水果服务
ws-fruitshop-order提供订单服务
ws-fruitshop-user提供用户服务

  • 暴露接口描述
服务接口方法描述发布地址Wsdl文件
UserServiceInterfacelogin()为总线提供登录服务http://127.0.0.1:8081/ws-fruitshop-user/wsUserServiceInterface_wsdl.xml
regist()为总线提供注册服务
FruitServiceIntergfacefindFruitPage()为总线提供水果页服务http://127.0.0.1:8084/ws-fruitshop-fruit/wsFruitServiceInterface_wsdl.xml
findFruitById()为总线提供查询水果服务
FruitServiceInterface2updateReserve()为order服务提供更新水果库存服务FruitServiceInterface2_wsdl.xml
OrderServiceInterfacefindOrderByUserID()为总线提供根据用户ID查找订单服务http://127.0.0.1:8087/ws-fruitshop-order/wsFruitServiceInterface2_wsdl.xml
addOrder()为总线提供添加订单服务

C:\Users\lenovo-aa\Desktop\分布式组件与Web服务\picture\ws-fruitshop\soap\order.png

  • 数据库

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

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

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

  • webservice服务开发

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

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

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

  1. 创建SEI实现类,如

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

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

  2. 将项目部署到tomcat下,启动tomcat

  3. 测试服务

    WSDL地址规则:http://ip:端口号/项目名称/servlet拦截路径

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

  • webservice服务生成客户端并部署
  1. 在客户端项目下引入CXF下lib文件夹里的所有jar包。

  2. 使用CXF提供的wsdl2java工具生成客户端代码。

如:wsdl2java -p com.fruitshop.service.user -d .
http://localhost:8081/ws-fruitshop-user/ws/user?wsdl

  1. 配置客户端spring配置文件applicationContent.xml。

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

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

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

  1. 事务管理,自定义线程管理类ManagerThreadLocal。

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

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

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

项目部署简介

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

  1. 在MyEclipse或Eclipse下打开四个项目。

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

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

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

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

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

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

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

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

    注意:

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

  11. 在ws-fruitshop-order中com.fruit.service2存放ws-fruitshop-fruit提供的FruitServiceInterface2服务

    1. 各服务提供方的发布地址也是能修改的,例如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中配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值