基于playframework v1构建一个新的Java web应用框架

正在考虑基于playframework v1构建一个新的Java web应用框架

动机: 我非常喜欢 playframework v1 但对v2不太感冒 v1中哪些特性应该保留:

  • 字节码增强。 这个超酷的特性允许框架和插件作者在应用中插入需要的逻辑,比如AOP,而AOP也仅仅是其中之一而已。
  • 全栈框架。跟play一样,这个新框架应该能自己运行,而不是插入一个Servlet容器。当然也应该允许用户应用被包进Servlet。
  • 支持插件,虽然API应有所变化。
  • 为应用程序提供方便的工具库, 比如 IO, Codec, Images 等.
  • 内置简单的安全框架
  • 易用的DB 层,允许插入不同的实现,包括 JPA, EBean, Morphia 等.
  • 内置数据有效性检查
  • 方便易用的异步API。
  • Before, After, Final, Catch 等过滤器
  • 根据 request.format 自动匹配模板文件
  • 模板中支持JavaExtension
  • 最最重要的是 简洁易用!

哪些应该改变或者提高的:

  • 路由机制。优化路由性能,让框架在大型应用(100条路由以上)也能快速定位响应方法。优化的机制可能包括使用代码生成器生成为每条路由动态生成帮助类。
  • 响应方法启动机制. 提高性能,减少对 reflection, static methods 和 Exception的使用。但API应该保持play1的简洁易用。
  • 插件框架API。
  • 用Java和脚本替代play1发行包中的python部分
  • CRUD
  • 用Rythm替代Groovy作为缺省模板引擎
  • 用Ebean替代JPA作为缺省数据访问层
  • 增强对JSON的支持。
  • 用markdown替代textile作为文档语言

Proposed Controller API:

public class Orders extends Controller {
 
 
   // --- Parameters used in action handling methods
   @Bind(method = Bind.ByID)
   protected Order order; // will bind to http request params with Order.findById(params.get("orderId"))
 
   @Bind(method = Bind.ById)
   protected User user;
   // -- eof Parameters
 
   // this use new return style API
   @Required("orderId")
   public Result show() {
     return new Render(order);
   }
 
 
   // this use old style API
   @Required("orderId")
   public void saveUpdate() {
     notFoundIfNull(user);
     order.save();
     render(order, user);
   }
 
   // this action method will be executed in a separate thread
 @Async
   public Result report() {
     order.save();
     List<Order> orders = ...
     return new RenderPDF(orders);
   }
 
 }
 
Sample route file:
GET /orders/{orderId} Orders.show
 POST /orders/{orderId} Orders.saveUpdate
 GET /orderReport Orders.report
 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿天地

spring boot整合dubbox进行服务拆分

Dubbo是一个来自阿里巴巴的开源分布式服务框架,当当根据自身的需求,为Dubbo实现了一些新的功能,包括REST风格远程调用、Kryo/FST序列化等等。并...

1.7K10
来自专栏码匠的流水账

java9系列(二)docker运行java9

850
来自专栏晓晨的专栏

浏览器启动外部软件

3504
来自专栏后端云

部署实时OpenStack实例

最近的OpenStack nova版本增加了对实时实例的支持,即提供实时应用所需的确定性和性能保证的实例。这项工作在OpenStack Ocata发行版中最终标...

3423
来自专栏逆向技术

调试器编写第一讲,调试器基本框架

                  调试器编写第一讲,调试器基本框架 今天开始调试器第一讲,调试器的基本框架,我们用过很多调试器,比如 WinDbg,Olly...

2956
来自专栏JavaWeb

项目中Spring 声明式事务使用的一些坑点分析01

7718
来自专栏用户2442861的专栏

ubuntu16安装nginx

https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-...

1732
来自专栏Kubernetes

SkyDNS2源码分析

SkyDNS2是SkyDNS Version 2.x的统称,其官方文档只有README.md,网上能找到的资料也不多,因此需要我们自行对代码进行一定的分析,才能...

4116
来自专栏菩提树下的杨过

spring cloud 学习(1) - 基本的SOA示例

有过dubbo/dubbox使用经验的朋友,看到下面这张图,一定很熟悉,就是SOA架构的最基本套路。 ? 与dubbo对比,上图的3大要素中,spring cl...

3198
来自专栏AI-vell

java轻量RESTful api服务搭建(jersey+jetty)

由于开始要搭建一个java + python的服务,java端提供数据库增删改查逻辑供python端调用,第一时间想到了用REST(Representation...

5157

扫码关注云+社区

领取腾讯云代金券