hope项目分两部分:
1.bonsai 与前端交互&&数据库操作
2.dataturks 网站后台主要逻辑实现部分,Controlcenter.java封装了很多数据处理操作
1.入口:
bonsai\dropwizard\core\MainApp.java
主要在run()方法,application初始化,配置参数初始化,数据库Dao类初始化,
2.API接口:
/resources/DataturksAPIEndPoint.java
DT annotations platform API access
/resources/DataturksEndpoint.java
DT annotations platform
这两个文件中定义所有后端与前端通信接口,如新增用户,删除project,上传下载请求
根据url返回包含对应页面数据的response
3.前端请求的数据封装
dataturks/response包
response包内定义,页面请求封装的数据,返回给前端 如 UserDetails UserHome为用户home页面提供数据
4.数据库操作封装
bonsai.dropwizard.dao
mysql操作封装,各张表数据的封装,如DUsers,DProjects,DSubscriptions
5.数据处理中心
Controlcenter.java
数据操作的实现类,大部分数据处理在此实现,如新用户注册,删除project,为project增删用户,文件上传下载操作....
6.工程概览
每个package主要模块介绍:
config:App配置 DBBasedConfigs存储在DB中的配置,比如上传路径
DB:只有一个Refresher.java封装数据库操作
dropwizerd:包含 /core/MainApp.java 主入口
DAO类
/resources/DataturksAPIEndPoint.java DT annotations platform API access
/resources/DataturksEndpoint.java
DT annotations platform 定义所有后端与前端通信接口,根据url返回包含对应页面数据的response
email:给用户发邮件,提醒标注任务
exceptions:异常类,目前只有 AuthException.java
sa:事件日志记录相关
security:LoginAuth.java用户登录验证相关 firebase等
utils:上传工具,json转换,变量类型转换
bonsai/Constants.java 定义一些常量,比如最大文件上传限制
7.数据库-表定义
configs 持久化存储项目配置
d_api_keys 用户有效性验证
d_hits 存储待标记文件
Data字段存储本地文件名,使用时和配置的存储路径拼接;或者存储为网络url,一般在云存储上
d_hits_result 存储已标记文件
1.标注框用json存储,矩形也存储四个点坐标,有冗余,应该是为了兼容多边形标注框。
[{
"label": ["face"],
"shape": "rectangle",
"points": [
[0.7173295454545454, 0.027659574468085105],
[0.7173295454545454, 0.2148936170212766],
[0.7926136363636364, 0.027659574468085105],
[0.7926136363636364, 0.2148936170212766]
],
"notes": "",
"imageWidth": 960,
"imageHeight": 640
},...]
2. Shape存储标注框类型,有rectangle,polygon,该字段为空则表示图片分类的label。
d_org_users 机构-用户列表
d_orgs 机构列表
d_projects 一个标注项目,分多种类型(type)
d_subscription_plans 用户订阅
d_users 用户
keyValues todo 未初始化
8.上传文件
1.DataturksEndpoint.java public UploadResponse fileUpload()
2. DataturksEndpoint.java public static UploadResponse handleFileUpload()
3.Controlcenter.handleFileUpload(reqObj, projectId, uploadedFile);
\dataturks\DataStorageHandler.java
单张图片上传文件缓存至 /tmp/xxxx.png on-prem模式存至本地/home/dataturks/bazaar/uploads 否则存至亚马逊aws
补充:
Dropwizard简介
Dropwizard的历史要早于Spring Boot最早是在2011.12发布的v0.1.0版本,Dropwizard是Coda Hale在Yammer公司时创立的,它旨在提升公司分布式系统的架构(现在叫:微服务)。它的目标是作为轻量化、为生产环境准备且容易使用的web框架。
Dropwizard与Spring Boot类似,也是构建微服务可选的工具,但是它显得比Spring Boot更加规范一些。它使用的组件一般不会做可选替换,而好处是可以不需要那么多的修饰,比如写基于REST的web服务。
比方说,Dropwizard选择使用Jetty作为Servlet容器,REST库使用Jersey,序列化和反序列化使用了Jackson,而想将其中的Jetty替换成Undertow就没有那么容易。
就像Spring Boot一样,Dropwizard推荐将整个工程打包成一个可执行的jar,通过这种方式开发人员不用在担心程序运行的应用服务器是什么,需要什么额外的配置,应用再也不需要被构建成war包了,而且也不会有那么多复杂层级的类加载器了。
Dropwizard中的类加载也是扁平结构的,它和我们常用的应用服务器不一样,应用服务器往往具备多层级如同图一般的类加载器,这会涉及到类加载器的优先级,而这些在不同的应用服务器的实现上都是大相径庭的。
运行在独立进程中的Dropwizard实例也便于进行各自的JVM调优和监控,因为运行在应用服务器上的多个应用,很可能由于一个应用导致的GC或者内存溢出,进而导致整个应用服务器的崩溃,毕竟它们是在同一个进程中。
DropWizerd项目执行逻辑分析
1). HelloWorldApplication --> main() --> initialize() --> getName()
先依次调用HelloWorldApplication的 main()方法 --> initialize()方法 --> getName()方法
2). HelloWorldApplication --> run(HelloWorldConfiguration configuration, Environment environment)
因为 HelloWorldApplication 继承了 Application<HelloWorldConfiguration>,所以在调用 HelloWorldApplication 的run()方法之前 dropwizard 会通过读取 hello-world.yml 文件来初始化run()方法的 configuration 参数。run()方法主要用来注册用户资源。
3). 执行 HelloWorldApplication 的 run() 方法,注册用户资源
比如当前的代码中,注册了用来整合返回值显示模板和默认访问用户的HelloWorldResource和用来检查自定义template是否符合标准的TemplateHealthCheck
4). 前三步执行完毕后,服务已经启动成功
5). 浏览器地址栏输入:http://localhost:8080/hello-world?name=zhangsan进行访问
DropWizerd项目部署
通过maven将项目打包成jar包,达到可以在cmd中可以 java -jar xxx.jar来运行
1. 打开cmd,进入到maven项目的根目录,执行mvn package
2. 打包成功后,根目录下回多出一个target目录,进入其中找到项目的jar包,如:XXXXXXXX-0.0.1-SNAPSHOT.jar
3. 将XXXXXXXX-0.0.1-SNAPSHOT.jar拷贝到一个指定目录,如:test,同时需要将dropwizard环境配置文件也拷贝到test目录下(即onprem.yml)
4. 启动cmd,进入到test目录下,执行如下命令java -jar XXXXXXX-0.0.1-SNAPSHOT.jar,如果成功,则输出信息也前面通过eclipse run启动时输出的信息基本一致。
bonsaiJS
bonsaiJS 是个轻量级的 JavaScript 图形库,提供直观的图形 API 和 SVG 渲染器。主要特性包括:架构分离的运行器和渲染器;iFrame,Worker 和 Node 运行上下文;形状,路径,Assets(音频,图像,字体,subMovies),Keyframe 和常规动画,等等。支持现代化浏览器: Safari, Chrome 和 Firefox。
两个概念
On-Premise 本地运维(部署)
On-Cloud 云端运维(部署)