基于playframework v1构建一个新的Java web应用框架
基于playframework v1构建一个新的Java web应用框架
罗格林 发表于5年前
基于playframework v1构建一个新的Java web应用框架
  • 发表于 5年前
  • 阅读 723
  • 收藏 4
  • 点赞 0
  • 评论 5

腾讯云 新注册用户 域名抢购1元起>>>   

正在考虑基于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
 

共有 人打赏支持
罗格林
粉丝 174
博文 24
码字总数 18714
作品 4
评论 (5)
罗格林
这篇博客同时也有英文版本发在blogger网站上:http://software-lgl.blogspot.com.au/2012/12/thinking-about-creating-new-java-web.html
JiangCretu
great idea !
风花狂月
我要反馈rythm的一个标签错误。。。@extends()这个标签~使用了以后,html根本生成不了
罗格林

引用来自“风花狂月”的评论

我要反馈rythm的一个标签错误。。。@extends()这个标签~使用了以后,html根本生成不了
在你的父模板里面有没有@render()或者@doLayout()? 参见:http://fiddle.rythmengine.org/#/editor/886606b3a7034088b991855bef8f89da
罗格林
这篇博客写作与3年半之前。作为后续,我已经开发出了一个新的框架:https://github.com/actframework/actframework。现已在公司商业项目中使用(重写以前用Jersey写的一个RESTFul的应用),效果非常好。框架功能已经基本完善,目前正在测试完善之中,文档工作也有待完善。希望能在今年年底之前正式发布
×
罗格林
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: