miles2run.org是跟踪跑步活动并与亲朋好友共享的简便方法。 可以创建然后跟踪基于天或基于距离的目标。 它还允许创建社区运行目标,并使多个跑步者参与并跟踪他们朝着该目标的活动。 您也可以找出本地跑步者并与他们联系。
该项目已开始,以帮助跟踪#JavaOneStreak的运行活动。 目标是每天一直运行至少一英里,直到JavaOne为止,并使用此网站跟踪运行情况。 有大量复杂的应用程序和网站,可让您跟踪跑步活动。 它们中的大多数都与您的GPS手表,手机GPS和其他精美功能集成在一起。 其中一些甚至允许创建组,但是它们都不基于Java!
该应用程序以网站的形式托管,并使用HTML5和Java EE 7构建。 着陆页提供了有关跑步者总数,其城市/国家/地区,英里和迄今为止记录的小时数的摘要。
可以在台式机,平板电脑或手机上查看该网站。 跑步者可以使用常见的社交中介(例如Facebook,Google和Twitter)登录该网站。
任何机构都可以单击右上角的“社区运行”,以查看到目前为止已创建的所有组运行 。 这些只能由管理员创建。 JavaOne的团体跑步页面显示了有多少跑步者参加了这次跑步及其他统计信息。
每个跑步者都会看到一个仪表板,显示他们到目前为止已经跑了多少距离以及总计/完成/剩余/缺席的天数。
显示了进度的可视化表示和活动日历的热图:
显示了几天的里程折线图:
然后还显示了过去几个月的活动摘要:
跑步者还可以跟随其他跑步者并跟踪他们的活动。
这是应用程序的概念图:
这是该应用程序的技术视图:
这是技术堆栈的简要说明:
- 介绍
- JAX-RS呈现的Thymeleaf模板引擎视图
- 中间层
@Stateless
EJB用于所有事务性JPA交互,@Asynchronous
用于将状态发布到社交网络
- 后端
- 用于创建
EntityManagers
和其他配置对象(例如Redis连接池对象或MongoDB配置对象)的CDI生产者。
- 用于创建
平台外部的技术:
- JavaScript
- D3.js和C3.js用于吸引人的图形
- Google Geocoding API将位置文本转换为纬度和经度
- Jadira用户类型 ,用于在UTC中存储日期
- Joda-Time处理日期
- 使用Thymeleaf代替JavaServer Faces是因为:
- 允许JAX-RS用作MVC框架来呈现服务器端HTML页面和公开REST服务。
- Redis用于存储所有计数器,例如跑步人数,城市,特定于目标的计数器(例如目标覆盖的总距离等)。为了避免从数据库中进行大量读/写操作,使用了内存数据库,因此所有读写操作非常高效。 Redis计数器是原子的,这意味着没有与此相关的并发问题。 INCR和INCRBY Redis操作用于更新计数器。
- MongoDB用于位置数据。
工具集
- JDK 8
- 带有Maven的IntelliJ 13.1
- Wildfly 8.1.0.Final –使用本地WildFly实例完成开发,然后将其推送到OpenShift上的可伸缩WildFly实例进行部署。 HA Proxy用作负载平衡器。使用OpenShift的优点是应用程序中没有特定于OpenShift的代码。 因此,在本地工作的同一应用程序已部署到测试和生产环境。 您只需要使用环境变量来抽象出特定于环境的配置。
- Github
计划的更新
- 使用Jenkins进行持续集成并管理部署
- JPA 2.1转换器而不是Jadira
- Keycloak代替本地社交经纪人
- 开源应用程序
Java EE 8的愿望清单
- 与OAuth提供程序集成
- 真正的MVC框架,支持可插拔模板引擎
- 无缝使用NoSQL数据库
立即下载WildFly 8.1 ,通过阅读/尝试Java EE 7示例学习该技术,浏览Java EE 7资源 。
或者,如果您想站在最前沿,请查看WildFly 9.0 。
非常感谢Shekhar Gulati( @shekhargulati )编写了应用程序并提供了所有答案!
翻译自: https://www.javacodegeeks.com/2014/09/log-your-miles-and-community-runs-java-ee-7-real-world-experience.html