记录您的里程和社区运行情况:Java EE 7真实体验

miles2run-徽标

miles2run.org是跟踪跑步活动并与亲朋好友共享的简便方法。 可以创建然后跟踪基于天或基于距离的目标。 它还允许创建社区运行目标,并使多个跑步者参与并跟踪他们朝着该目标的活动。 您也可以找出本地跑步者并与他们联系。

该项目已开始,以帮助跟踪#JavaOneStreak的运行活动。 目标是每天一直运行至少一英里,直到JavaOne为止,并使用此网站跟踪运行情况。 有大量复杂的应用程序和网站,可让您跟踪跑步活动。 它们中的大多数都与您的GPS手表,手机GPS和其他精美功能集成在一起。 其中一些甚至允许创建组,但是它们都不基于Java!

该应用程序以网站的形式托管,并使用HTML5和Java EE 7构建。 着陆页提供了有关跑步者总数,其城市/国家/地区,英里和迄今为止记录的小时数的摘要。

miles2run-landingpage

可以在台式机,平板电脑或手机上查看该网站。 跑步者可以使用常见的社交中介(例如Facebook,Google和Twitter)登录该网站。

任何机构都可以单击右上角的“社区运行”,以查看到目前为止已创建的所有组运行 。 这些只能由管理员创建。 JavaOne的团体跑步页面显示了有多少跑步者参加了这次跑步及其他统计信息。

miles2run-javaone-mainpage

每个跑步者都会看到一个仪表板,显示他们到目前为止已经跑了多少距离以及总计/完成/剩余/缺席的天数。

miles2run-javaone-dashboard1

显示了进度的可视化表示和活动日历的热图:

miles2run-javaone-dashboard2

显示了几天的里程折线图:

miles2run-javaone-dashboard3

然后还显示了过去几个月的活动摘要:

miles2run-javaone-dashboard4

跑步者还可以跟随其他跑步者并跟踪他们的活动。

这是应用程序的概念图:

miles2run体系结构

这是该应用程序的技术视图:

miles2run-tech

这是技术堆栈的简要说明:

  • 介绍
    • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle在group by时某列有多个值的拼接

最近编码过程中出现了group by后,某些列会有多个值,而我需要把这些多个值的列进行拼接的情况,和大家分享一下。 有如下表student: 我们希望以class分组,每组的信息平铺,效果如下 分组首先想到的肯定是group…

在Spring中使用Asciidoctor:使用Spring MVC渲染Asciidoc文档

Asciidoc是一种基于文本的文档格式,因此如果要将文档提交到版本控制系统中并跟踪不同版本之间的更改,它非常有用。 这使Asciidoc成为编写书籍,技术文档,常见问题解答或用户手册的理想工具。 创建Asciidoc文档后,很可能…

http强缓存在firefox和chrome之间的差异

最近回顾HTTP缓存知识的时候发现了一个问题,设置了强缓存和协商缓存的文件,点击浏览器的刷新按钮的时候在chrome和firefox中的表现不一样。具体表现为chrome走强缓存没有再次发起请求。firefox却在强缓存没有失效的情况下发了请求,返回了304走…

垃圾收集器–串行,并行,CMS,G1(以及Java 8中的新增功能)

4个Java垃圾收集器–错误的选择如何严重影响性能 在2014年,对于大多数开发人员来说,还有两件事仍然是个谜:垃圾收集和了解异性。 由于我对后者知之甚少,所以我认为我会对前者大吃一惊,特别是因为在该领域中&#xff0c…

基于webpack的react脚手架

一、前言:react的cli开发模式太过于简单,好多东西都要自己配置 二、这里有个简单的配置,可以直接上手开发(不熟悉webpack和npm的绕路),已经完成的配置如下 1:默认ejs模板 2:编译less、scss 3&#xff1…

不要错过使用jOOλ或jOOQ编写Java 8 SQL单行代码的机会

越来越多的人通过为他们的业务采用功能性编程来赶上我们平台的最新更新。 在Data Geekery ,我们将Java 8用于jOOQ集成测试,因为将新的Streams API与lambda表达式一起使用使生成临时测试数据变得非常容易。 但是, 我们并不认为JDK提供了尽可…

node实现简单的群体聊天工具

一、使用的node模块 1、express当做服务器 2、socket.io 前后通信的桥梁 3、opn默认打开浏览器的模块(本质上用不到) 难点:前后通信 源码地址:https://github.com/wjf444128852/SimpleChat 欢迎clone并运行、扩展改进、issues 二、基础样子&#…

使用Spring Security的多租户应用程序的无状态会话

从前, 我发表了一篇文章,解释了构建无状态会话的原理 。 巧合的是,我们再次针对多租户应用程序执行同一任务。 这次,我们将解决方案集成到Spring Security框架中,而不是自己构建身份验证机制。 本文将解释我们的方法和…

What?一个 Dubbo 服务启动要两个小时!

前言 前几天在测试环境碰到一个非常奇怪的与 dubbo 相关的问题,事后我在网上搜索了一圈并没有发现类似的帖子或文章,于是便有了这篇。 希望对还未碰到或正在碰到的朋友有所帮助。 现象 现象是这样的,有一天测试在测试环境重新部署一个 dubbo …

使用Project Lombok减少Java应用程序中的样板代码

对Java编程语言最常提出的批评之一是它需要大量的样板代码 。 对于简单的类尤其如此,该类只需要存储一些值就可以。 您需要这些值的getter和setter,也许您还需要一个构造函数,覆盖equals()和 hashcode(&am…

十六、CI框架之数据库操作get用法

一、使用数据库的Get方法读取内容,如下代码: 二、数据库如下: 二、效果如下: 转载于:https://www.cnblogs.com/tianpan2019/p/11141809.html

WCF系列(二) -- 使用配置文件构建和使用WCF服务

当然,配置一个ServiceHost除了上面说的完全使用代码的方式,更好的方式是使用配置文件,把一些可能需要修改的属性跟代码分离,放到配置文件中,这样可以提供服务配置的灵活性,也更容易维护。 看看前面那个不用…

如何使用github搭建个人博客

1、去github官网注册个人帐号:没有的:猛戳这里去注册,比如我的账户名:wjf444128852,我的已经汉化(可在github里搜索github如何汉化有插件) 2、点击仓库-新建,仓库名字必须是:你的github帐号.git…

Spring Boot和Spring Data REST –通过REST公开存储库

使用Spring Boot和Spring Data REST,通过REST公开Spring Data存储库非常容易。 使用最少的代码,您可以创建遵循HATEOAS原理的JPA实体的REST表示。 我决定重用Spring PetClinic的JPA实体(业务层)作为本文的基础。 应用基础 PetCli…

jQuery Ajax – Servlets集成:构建完整的应用程序

网上有很多教程,它们解释了有关使用servlet和JSP页面进行Java Web开发的一些知识,但是,我从来没有找到对于初学者来说足够简洁,简单的教程。 这样的教程应该解释创建一个简单的Web应用程序的整个过程,包括前端&#xf…

信息系统开发平台OpenExpressApp - 应用模型ApplicationModel

下图为OpenExpressApp的系统架构图,其中在应用模型是作为一种元数据贯穿于整个架构,应用模型运行在OpenExpressApp框架之上。应用模型是OEA的核心,理解好应用模型才能更好的使用OEA。 应用模型贯穿于整个架构层 模型关注what OEA希望从重复的…

关于页面布局间距使用的经验之谈

在页面布局的时候遇到一个问题在此记录。 有如下布局需求。页面上大多数都是这样的,一块一块从上到下排列。 块与块之间的间距需要固定由谁来负责。例如第一个块和第二个块之间的间距,就需要第二个块的margin-top完成,文字和第二个块之间的间…

canvas绘制经典折线图(一)

最终效果图如下&#xff1a; 实现步骤如下&#xff1a;注-引用了jQuery HTML代码 <!doctype html><html lang"en"><head><meta charset"UTF-8"><meta name"Generator" content"EditPlus"><meta nam…

win7笔记本为手机共享wifi

1、cmd netsh wlan set hostednetwork modeallow ssidyourname keyyourpassword 开启win7的虚拟wifi&#xff0c;让电脑变成无线路由器 这时&#xff0c;网络连接中会多出一个网卡为“Microsoft Virtual WiFi Miniport Adapter”的无线连接2。如果没有&#xff0c;需要更新无线…

createjs中shape的属性regX和regY

官方文档说regX和regY是图形与注册点的距离。 那么注册点是什么呢&#xff1f; 我理解注册点就是图形的x/y对应的点图形动效的原点就是注册点 如果修改图形的regX和regY值图形在画布上的位置是会被改变的&#xff0c;但是注册点其实并没有被改变。因为图形的x/y值并没有被改…