记录您的里程和社区运行情况: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,一经查实,立即删除!

相关文章

poj 1308 Is It A Tree?

// 题意: 给出一些边&#xff0c;由所给出的边能否构成一棵树.&#xff08;节点数<100&#xff09;// 思路: n个顶点的树具有3个特点:连通,不含环,恰好包含n-1条边.只要有任意两个,就能推导出第3个// 所以我们可以通过是否连通和不含环来判断可以构成树.// 不含环: 通过并查…

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

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

自求

最近在写代码的时候发现了一个问题&#xff0c;总是在完成一个复杂的逻辑后不自信&#xff0c;不自信逻辑没有问题或者说没有其他问题。仔细注意这种感觉是怎么来的就会发现&#xff0c;在梳理完逻辑写代码的时候总也会出现一些小问题&#xff0c;这些小问题的出现和处理就是问…

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

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

移动端meta整理

<!doctype html><html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1" /><!-- 默认使用最新浏览器 --><meta http-equiv"Cache-Control" content&qu…

字符数组和字符串的小细节

目录 1. 背景知识2. 指向字符串的指针2.1 代码A2.2 代码B2.3 结论3. 字符数组3.1 代码C3.2 总结4. 拓展1. 背景知识 1、字符串就是一个地址。 2. 指向字符串的指针 2.1 代码A const char *a "unix"; char *b "hello";pritnf("%s \n", a); a b…

POJ1459-Power Network

转载请注明出处&#xff1a;優YoU http://user.qzone.qq.com/289065406/blog/1299339754 提示&#xff1a;BFS找增广链 压入重标法 解题思路&#xff1a;多源多汇最大流问题题目给出很多都是废话&#xff0c;特别是符号s(u)&#xff0c;d(u)&#xff0c;Con还有那条公式都别管…

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

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

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

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

基于webpack的react脚手架

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

从数学到密码学(八)

数学基础&#xff08;三&#xff09; 从本节起&#xff0c;我们开始进入大学数学的领域&#xff0d;&#xff0d;近世代数&#xff08;也称抽象代数&#xff09;。 先给出几个基本概念/定义。 [代数运算]&#xff1a;对于集合A的任意元素a、b&#xff0c;如果按某一运算法则&am…

Oracle.ManagedDataAccess 连接数据库用户名密码错误

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy] “Enabled” dword&#xff1a;00000000 转载于:https://www.cnblogs.com/Elcser/p/11134100.html

IE9下apply的使用方式

起初看到这段代码的时候先不管在干啥&#xff0c;仅仅是尝试理解就发现很绕&#xff0c;现记下以便回顾。 Function.prototype.apply.call(console.error, console, args);其实主要做的事情就是console.error(array)&#xff0c;使用数组作为参数调用console.error。 分解&am…

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

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

Redis---概述

1.概述 Redis是速度非常快的非关系型&#xff08;NoSQL&#xff09;内存键值数据库&#xff0c;可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串&#xff0c;值支持五种数据类型&#xff1a;字符串&#xff0c;列表&#xff0c;集合&#xff0c;散列表&#xf…

AJAX Control Toolkit——DropShadow(阴影和圆角框)

该控件的效果就是可以使相应的Panel产生阴影和圆角框的效果&#xff0c;要说的是该控件在CSS3来临之际并不存在多大的意义了&#xff0c;因为在CSS3中同样可以实现而且更加理想的效果。 但是要说明的是不要为目标Panel添加过多的CSS属性&#xff0c;不然会出现预料之外的效果&a…

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

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

CSS中的三种样式来源:创作人员、读者和用户代理

查看原文&#xff1a;https://www.cnblogs.com/JJJJJKKKKK/articles/4542545.html CSS中的样式一共有三种来源&#xff1a;创作人员、读者和用户代理&#xff0c;来源的不同会影响到样式的层叠方式&#xff0c;很多第一次学习CSS的朋友&#xff0c;对这三种来源可能会存在一些…

具有jOOQ和Java 8的CompletableFuture的异步SQL执行

响应式编程是一个新的流行词&#xff0c;它实际上仅表示异步编程或消息传递。 事实是&#xff0c;函数语法极大地帮助构建了异步执行链&#xff0c;今天&#xff0c;我们将看到如何使用jOOQ和新的CompletableFuture API在Java 8中做到这一点。 实际上&#xff0c;事情很简单&…

关于模板引擎handlebars.js基本用法

说明&#xff1a;模板引擎主要针对于渲染DOM&#xff0c;取代了字符串拼接&#xff0c;用下面的代码亲测handlebars模板引擎比字符串拼接渲染DOM慢了20ms&#xff0c; 这里配置一个在线DEMO&#xff0c;简单说明下handlebars.js的基本用法&#xff0c;需要根据获取的数据去渲染…