@Rays
2016-12-21T08:19:25.000000Z
字数 3478
阅读 2437
摘要: 基于Java Stream的Speedment ORM发布了3.0.1版,其特性包括全新的声明式Java 8 Stream API、改进的用户接口以及更好的代码生成。本文是InofQ就此产品对Speedment CTO的访谈。
作者: Michael Redlich
正文:
Speedment发布了3.0.1版的Java工具包和运行时应用。Speedment是基于Java Stream的对象关系映射(ORM)产品,名称源自“速度”(Speed)和“开发”(Developement)两个词的混合。Speedment意在提高数据库程序的开发速度,最早面市于2015年6月,其技术措施包括降低ORM复杂度、抽象化数据库连接配置以及执行数据上的操作。
此次发布版本的新特性包括:
Speedment开源版支持下列数据库:
Speedment企业版支持Oracle等商业数据库。
下面的命令启动了一个Speedment的应用编译,其中使用了Maven和已有的MySQL数据库。
mvn archetype:generate -DgroupId=org.redlich.publications
-DartifactId=publications -DarchetypeArtifactId=speedment-archetype-mysql
-DarchetypeGroupId=com.speedment.archetypes -DinteractiveMode=false
-DarchetypeVersion=3.0.1 && cd publications && mvn speedment:tool
该命令将创建一个由-DartifactID选项所指定的子目录,改变工作路径至该目录,并启动如下图所示的Speedment工具:
在输入数据库名后,点击“Connect”按钮就会连接到MySQL数据集,并导入如下图所示的模式:
用户填写了项目信息后,点击“Generate”按钮,该工具就会生成操作数据库表的Java源代码,并生成可编辑的通用Main.java文件,在其中编写操作数据库的声明式Java Stream代码。
对于PostgreSQL和MariaDB数据库,下面的命令行参数需要替换为适当的内容:
-DarchetypeArtifactId=speedment-archetype-postgresql
-DarchetypeArtifactId=speedment-archetype-mariadb
这样在添加任何数据库操作代码之前,该项目就已可编译和运行:
mvn compile && mvn exec:java -Dexec.mainClass="{package}.Main"
Speedment的API入门指南页面中给出了实现初始化、持久化、更新和连接等数据库操作的Java 8 Stream代码例子。在Github代码库中还提供了一个完整项目的例子。
Speedment的CTO Per-Åke Minborg向InfoQ介绍了该产品的最新发布版本。
InfoQ:您在Speedment担任什么职位?
Minborg:我是Speedment的合伙创始人并任CTO。作为CTO,我领导了技术开发及Speedment对Java社区的贡献。
InfoQ:和Hibernate、jOOQ和Apache Torque等其它的Java ORM架构相比,Speedment具有哪些独到之处?
Minborg: Speedment解决了已有关系数据库与当前基于Java 8 Stream应用间的无缝关联问题。Java开发人员用声明式Stream操作方式表述他们所有的数据操作需求,由Speedment框架决定所创建的数据流水线中,哪些部分最好应由数据库引擎处理,哪些部分应交给JVM处理。这样Java应用代码就可以处理复杂的数据操作,无需使用任何数据查询语言。由于数据库接口代码是系统生成的,所以任何数据库数据模型的更改将会自动提交给Java应用,这使得当数据库模型随时间的不断变化时,开发人员可以使用编译器发现数据库和应用间所产生的所有不匹配。在https://dzone.com/articles/declarative-programming-with-speedment-30中给出了更详细的信息。应用数据处理的Java部分可用声明式方式实现,这种方式在Speedment之前没有任何产品提供。
与此形成对比的是,使用Hibernate的Java开发人员需要用特定的语言和数据库通信,数据库查询将表述为十分类似于SQL的HQL语言。这意味着如果数据库模型随时间发生了变化,在运行时将会发现所有应用代码上的不匹配。因此使用两种语言易于出错,并产生了高维护代价。此外,由Stream所提供的Java 8函数式编程模式在本质上是声明式的,Java和HQL间的语言障碍破坏了引入声明式编程的目的。在https://dzone.com/articles/streams-in-hibernate-and-beyond中给出了更多概念上的主要差异。
Hibernate假定Java开发人员需要直接面对查询语言。jOOQ同样基于此假定构建,它使得由Java构建实际SQL代码的过程更加清晰。虽然在很多方面上jOOQ比Hibernate更加简洁,但它与Hibernate一样是显式聚焦于查询语言上的,而这在Speedment中用抽象的方式实现。
Apache Torque假定数据使用XML建模,而非Java或SQL。这非常适合从头开始构建的项目,在项目中很少甚至不需要与需实际生成SQL的数据模型保持一致。正因为数据模型的表示是独立于数据库引擎之外的,Apache Torque不允许任何对已有关系数据库的完全迁移路径,也不允许用户使用任何数据库特有的特性。
Speedment架构在使用其它的数据源时,例如驻留JVM内存的数据库,可不必更改Java应用代码,而是通过配置实现,这是将查询语言从Java代码中抽象分离出来所提供的另一个特性。Speedment的数据操作流水线让Java应用去描述对数据所要做的操作,这样Speedment框架可以自由地决定操作的实现方式,这就是Speedment Insane Mode的工作方式。这种自由彻底地改变了数据的检索方式,而不会影响到Java应用逻辑。而上面所提到的所有框架都不具备这类能力,因为这些应用构建的框架是基于查询语言的,这将不可避免地绑定到特定的数据检索模型。
InfoQ:对于开发人员和组织在什么情况下应考虑选用Speedment企业版,您有哪些建议?
Minborg: Speedment开源版用于开源数据库。对于使用Oracle等商业数据库的用户,需要具有数据库连接器的企业版基本许可。该许可中包括了服务和支持。
此外,具有企业版高级许可的客户可使用Speedment Insame Mode功能,该功能可成倍地加速应用响应。
许可中还包括驻留JVM数据(In-JVM Data)技术,该技术可缓解性能瓶颈问题。
InfoQ:能为我们介绍一下Speedment的合作厂商和用户情况吗?
Minborg:我们已有数千遍布全球的开源产品用户。Speedment企业版也被一些大公司所使用,涉及了通信、银行、保险、能源和物流等行业。合作厂商和客户有Vaadin、Sencha、Higher Frequency Trading和 Extremely Heavy Industries等。
InfoQ:下一步Speedment将如何发展?
Minborg:我们正探索在产品试用版中添加更多的特性,使开发人员可在测试环境中免费使用软件。其中将会考虑把In-JVM-Memory Insane Mode作为开发人员许可的一部分。
我们将添加与Spring Boot和Vaadin框架的集成。我们也正在持续添加面向更多数据源的连接器。当然我们还将支持Java 9。