Devoxx Hackergarten的企业Web应用程序原型

已经连续10年参加DevoxxBe了 这是我最喜欢的Java会议,但是谈话时间表并不总是最佳的:有时我想同时看2个精彩的谈话! 因此,在Devoxx的Hackergarten,在参加讲座之间,我们中的一些人开始构建Web应用程序以改善进度。 我们称其为原型OptaConf ,它已获得Apache许可。

在过去的4年中,我一直在世界各地工作(OptaPlanner,Drools等),因此我在其他企业Java技术(JEE)方面的经验有些陈旧。 演示文稿(例如Devoxx上的演示文稿)使我与不断变化的Java企业界保持了联系,但是通过编写现实的Web应用程序来获得一些个人动手经验无所不能。

我写了后端。 前端由其他Hackergarten与会者慷慨贡献:Ixchel,David,Anne Marije,Celestino和Federico。 特别感谢Hackergarten的主持人Andres将我们召集在一起,并感谢其他Hackergarten的与会者(有时是特定技术的项目负责人),以帮助我们克服陷阱。

后端

使用JEE 7技术,编写后端变得轻而易举:

  • 用纯Java建模领域类 ,例如SpeakerRoom等。
  • JAXRS公开REST服务以将数据提供给webUI。
    • 从字面上看,这就像在web.xml添加一些注释( @GET@GET @Path ,...)和简短条目一样简单。 辉煌。
    • 有关更多信息,请参见RESTEasy的文档
  • JsonReaderDevoxx CFP API导入演讲数据,然后将其转换为我们的域类。
    • 我没有使用JAXRS来读取该REST流,因为JsonReader为我提供了一种数据的DOM方法,然后我直接将其映射到我们的域类,而不必对它们的域类进行建模(对我们没有更多用处) 。
    • 感谢阿伦(Arun)和JEE 7示例,为我指出了适合这项工作的正确技术的方向。
  • OptaPlanner优化时间表
    • 这对我来说也很容易使用!
    • 有关更多信息,请参见OptaPlanner文档
  • CDI将其粘合在一起
    • 这有点困难:尽管最初的@Inject效果很好,但是使用生产者提供虚拟测试数据(在编写Devoxx CFP导入之前)使我陷入了一些陷阱:
      • 有两个名为@Produces注释,我自动导入了错误的注释。
      • 我在生产者和原始对象之间存在不明确的依赖关系,因此我不得不求助于在原始对象上添加@Vetoed ...
    • 有关更多信息,请参阅Weld的文档
  • WildFly 8部署Webapp。
    • 这是如此之快,太神奇了。 启动和部署Webapp大约需要3秒钟。
    • 使用maven-wildfly-plugin从命令行部署Webapp:
    • IntelliJ直接从我的IDE部署展开的Webapp
      • 它使用JBoss应用服务器插件,该插件仅在IntelliJ Enterprise可用,而在IntelliJ Community中不可用。
      • 首先,需要解决一个烦人的陷阱:展开的目录必须以.war结尾
    • 有关更多信息,请参见WildFly网站
  • JPA Hibernate保留数据
    • 尚未实现。 一旦会话过期(30分钟后),您的数据当前就会丢失。

总而言之,这一切都很好。 在不到1天的工作中,我能够实现整个后端:导入Devoxx,对其进行优化并将其公开为REST服务。 当然,让专家们立即解决陷阱对我们有所帮助。

我真正喜欢它的是pom.xml配置。 这是使所有这些技术可用的整个依赖树:

<dependencies>
  <dependency>
    <groupId>org.optaplanner</groupId>
    <artifactId>optaplanner-core</artifactId>
    <version>6.2.0.CR1</version>
  </dependency>
  <dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

前端

我自己没有在前端工作,所以很难发表评论(但这不会阻止我)。 我们有3个化身。 所有人都使用过AngularJS,其中一些带有凉亭和其他东西。 我个人觉得所有Web ui技术都是笨拙的:每年都有一种新技术被炒作,我们都应该迁移到该技术上。 有些(例如Flex)在不到一年的时间内就从炒作变成了死亡。

不管怎么说,前端人员做得很好,尤其是Celestino的贡献非常直观地显示了时间表:

之前:Devoxx 2014原始时间表

Devoxx Hackergarten的企业Web应用程序原型

以上是原始的Devoxx 2014周三时间表。 每个曲目(是一组相关的对话)都有自己的背景色。

请注意,在第一个时隙中,同时有2个Web和HTML5对话(紫色)。 在第二个时隙中,同时有2个Cloud&BigData对话(棕色)。 周三没有方法论讲座(绿色)! 这意味着方法学的谈话几乎在周四是不可避免的...哦,恐怖!

之后:POC优化的Devoxx 2014时间表

Devoxx Hackergarten的企业Web应用程序原型

以上是在星期三使用OptaPlanner优化后的时间表。 请注意,我现在如何观看整个曲目的所有演讲而不会错过任何一个。 这种优化已经考虑了说话人冲突。

其他约束应易于添加,例如:

  • 热门话题获得更大的空间
  • 跟踪房间的稳定性:最大程度地减少需要更换房间的人员
  • 同时没有2位摇滚明星演讲者
  • 摇滚明星获得黄金时段
  • 社交演讲者没有空位
  • …还有更多

我们只需要更多输入数据,例如:哪些演讲很受欢迎,哪些演讲者是摇滚明星,...

结论

在后端,它变得更加简单。 JEE 7可以正常工作。 它比以前的版本简单得多。 大多数粗糙的边缘都消失了。 要进行全面披露:我为Red Hat工作,因此只要有选择,我都会坚持执行它们。

但是在前端...技术之间有太多选择和太多折衷,我不愿意真正推荐任何东西:它们都以自己独特的方式吸引人。 您正在编写大量的无方向JavaScript,或者正在处理冗长的整体编译,或者陷入了过度设计的健谈生命周期。 这些只是前3个Web UI框架!

翻译自: https://www.javacodegeeks.com/2014/11/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html