java vert.x_使用Vert.x将JavaScript引入Java企业
java vert.x
如果您是Java程序员,则很有可能您过去曾经使用JavaScript,或者在不久的将来会使用JavaScript。 它不仅是最流行(也是最有用)的编程语言之一,了解一些JavaScript功能可以帮助您构建下一个超级受欢迎的Web应用程序。
服务器上JavaScript
在服务器上运行JavaScript的想法并不新鲜; 实际上,在1995年12月,发布用于浏览器JavaScript之后不久,Netscape引入了用Netscape Enterprise Server进行服务器端脚本编写的语言实现。 微软还在Internet Information Server上采用了JScript,它是Netscape JavaScript的反向工程实现。
企业和JVM
许多企业已将Java虚拟机(JVM)标准化为运行关键任务业务应用程序的首选平台,并且已在JVM上进行了大量投资,因此对于那些组织而言,寻找基于JVM的组织是有意义JavaScript运行时。
Eclipse Vert.x是可在JVM上运行的多语言React式运行时。 将Eclipse Vert.x与JavaScript一起使用与从Node.js期望的并没有太大不同。 存在局限性,例如JVM JavaScript引擎与ES6标准不完全兼容,并且并非所有Node.js软件包管理器(npm)模块都可以与之一起使用。 但是它仍然可以做一些有趣的事情。
为什么选择Eclipse Vert.x?
在JVM上进行大量投资并且不希望切换到其他运行时,可能足以使企业对Eclipse Vert.x感兴趣。 但是其他好处是它可以与任何现有的Java应用程序进行交互,并且可以在JVM上提供最佳性能之一。
为了演示,让我们看一下Vert.x如何与现有的业务规则管理系统一起工作。 想象一下,我们的虚构企业在JBoss Drools中运行着一个关键任务应用程序。 现在,我们需要创建一个可以与此旧版应用程序进行交互的新Web应用程序。
为了简单起见,假设我们现有的规则是一个简单的Hello World:
package drools
//list any import classes here.
//declare any global variables here
rule "Greetings"
when
greetingsReferenceObject: Greeting( message == "Hello World!" )
then
greetingsReferenceObject.greet();
end
当该引擎运行时,我们会看到“ Drools Hello World!”。 这并不令人惊奇,但让我们想象这是一个非常复杂的过程。
实施Eclipse Vert.x JavaScript项目
与其他任何JavaScript项目一样,我们将使用标准的npm命令来引导项目。 这是引导项目
drools-integration并准备使用Vert.x的方法:
# create an empty project directory
mkdir drools-integration
cd drools-integration
# create the initial package.json
npm init -y
# add a couple of dependencies
npm add vertx-scripts --save-dev
# You should see a tip like:
#Please add the following scripts to your 'package.json':
# "scripts": {
# "postinstall": "vertx-scripts init",
# "test": "vertx-scripts launcher test -t",
# "start": "vertx-scripts launcher run",
# "package": "vertx-scripts package"
# }
# add
npm add @ vertx / web --save-prod
我们已经初始化了一个准项目,因此我们可以开始编写JavaScript代码。 我们将首先添加一个公开简单API的简单HTTP服务器。 每次对URL
http://localhost:8080/greetings
进行请求时,我们都应该在终端中看到现有Drools引擎的执行结果。
首先创建一个index.js
文件。 如果您使用的是VisualStudio代码,明智的做法是将以下两行添加到文件的开头:
/// <reference types="@vertx/core/runtime" />
/// @ts-check
这些行将提供全面支持,并检查代码中的语法错误。 它们不是必需的,但是在开发阶段肯定会有所帮助。
接下来,添加简单的HTTP服务器。 在JVM上运行与在Node上运行并不完全相同,并且许多库将不可用。 将JVM视为无头浏览器,在许多情况下,在浏览器中运行的代码可以在JVM上运行。 这并不意味着我们不能拥有高性能的HTTP服务器; 实际上,这正是Vert.x所做的。 让我们开始编写服务器:
import { Router } from '@vertx/web' ;
// route all request based on the request path
const app = Router. router ( vertx ) ;
app. get ( '/greetings' ) . handler ( function ( ctx ) {
// will invoke our existing drools engine here...
} ) ;
vertx
// create a HTTP server
. createHttpServer ( )
// on each request pass it to our APP
. requestHandler ( function ( req ) {
app. accept ( req ) ;
} )
// listen on port 8080
. listen ( 8080 ) ;
该代码并不复杂,应该是不言自明的,因此让我们集中讨论以Drools规则的形式与现有JVM代码和库的集成。 由于Drools是基于Java的工具,因此我们应该使用
java构建工具来构建应用程序。 幸运的是,由于在后台, vertx-scripts
将JVM位委托给Apache Maven,因此我们的工作很容易。
mkdir -p src/main/java/drools
mkdir -p src/main/resources/drools
接下来,我们添加文件
src/main/resources/drools/rules.drl ,内容如下:
package drools
//list any import classes here.
//declare any global variables here
rule "Greetings"
when
greetingsReferenceObject: Greeting( message == "Hello World!" )
then
greetingsReferenceObject.greet();
end
然后,我们将添加文件
src/main/java/drools/Greeting.java ,内容如下:
package drools ;
public interface Greeting {
String getMessage ( ) ;
void greet ( ) ;
}
最后,我们将添加帮助程序实用程序类
src/main/java/drools/DroolsHelper.java :
package drools ;
import org.drools.compiler.compiler.* ;
import org.drools.core.* ;
import java.io.* ;
public final class DroolsHelper {
/**
* Simple factory to create a Drools WorkingMemory from the given `drl` file.
*/
public static WorkingMemory load ( String drl ) throws IOException , DroolsParserException {
PackageBuilder packageBuilder = new PackageBuilder ( ) ;
packageBuilder. addPackageFromDrl ( new StringReader ( drl ) ) ;
RuleBase ruleBase = RuleBaseFactory. newRuleBase ( ) ;
ruleBase. addPackage ( packageBuilder. getPackage ( ) ) ;
return ruleBase. newStatefulSession ( ) ;
}
/**
* Simple factory to create a Greeting objects.
*/
public static Greeting createGreeting ( String message, Runnable andThen ) {
return new Greeting ( ) {
@Override
public String getMessage ( ) {
return message ;
}
@Override
public void greet ( ) {
andThen. run ( ) ;
}
} ;
}
}
我们不能直接使用该文件; 我们需要流
drools 。 为此,我们向package.json
添加一个名为mvnDependencies
的自定义属性(遵循通常的模式):
{
"mvnDependencies": {
"org.drools:drools-compiler": "6.0.1.Final"
}
}
当然,由于我们更新了项目文件,因此我们应该更新npm:
npm install
现在,我们进入该项目的最后一步,将Java和JavaScript混合在一起。 我们之前有一个占位符,所以让我们填补空白。 我们首先使用助手Java类创建引擎(您现在可以看到Vert.x的功能,这是一个真正的多语言运行时),然后在HTTP请求到达时调用我们的引擎。
// get a reference from Java to the JavaScript runtime
const DroolsHelper = Java. type ( 'drools.DroolsHelper' ) ;
// get a drools engine instance
const engine = DroolsHelper. load ( vertx. fileSystem ( ) . readFileBlocking ( "drools/rules.drl" ) ) ;
app. get ( '/greetings' ) . handler ( function ( ctx ) {
// create a greetings message
var greeting = DroolsHelper. createGreeting ( 'Hello World!' , function ( ) {
// when a match happens you should see this message
console. log ( 'Greetings from Drools!' ) ;
} ) ;
// run the engine
engine. insert ( greeting ) ;
engine. fireAllRules ( ) ;
// complete the HTTP response
ctx. response ( ) . end ( ) ;
} ) ;
结论
如这个简单的示例所示,Vert.x允许您成为真正的多语种。 选择Vert.x的原因不是因为它是另一个JavaScript运行时,而是允许您重用已有的运行时并使用运行Internet的工具和语言快速构建新代码的运行时。 我们在这里没有谈到性能(因为它本身就是一个主题),但是我鼓励您参考独立的基准测试(例如TechEmpower)来探讨该主题。
翻译自: https://opensource.com/article/18/4/benefits-javascript-vertx
java vert.x
java vert.x_使用Vert.x将JavaScript引入Java企业相关推荐
- vert.x_使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务
vert.x 中断了将近半年后发表了一篇新文章. 在本文中,我们将快速了解如何开始使用vert.x,更有趣的是,如何使用RxJava简化异步系统的编程. 我们将涵盖以下主题: 使用Maven创建一个空 ...
- java icomparer_集合数据处理(C#、JavaScript 和 Java)
Java 丢了好多年,最近在拣起来,首先当然是了解这么多年来它的变化,于是发现了 Java 8 的java.util.stream.在学习和试验的过程中,相比较于 C# 和 javascript,有那 ...
- vert.x_选择Vert.x的3个理由
vert.x Vert.x是用于JVM的轻量级高性能应用程序平台 现代Web应用程序和移动客户端的兴起重新定义了Web服务器的期望. Node.js是第一个识别范式转换并提供解决方案的技术. 应用程序 ...
- JavaScript与Java的关系(联系与区别)
JavaScript和Java是两种不一样的语言,但是它们之间存在联系. 背景方面 Javascript(1995年,Netscape公司雇佣了程序员Brendan Eich开发这种网页脚本语言)最初 ...
- js 系统教程-01-JavaScript 的历史,JavaScript 与 Java 的关系,JavaScript 与 ECMAScript 的关系,JavaScript的版本
目录 目录 JavaScript 语言的历史 诞生 JavaScript 与 Java 的关系 JavaScript 与 ECMAScript 的关系 JavaScript的版本 原文地址 目录导航 ...
- javascript与java的不同之处
javascript与java的不同之处 虽然很像,但不是一种语言. 二者的区别体现在: 首先,它们是两个公司开发的不同的两个产品,Java是SUN公司推出的新一代面向对象的程序设计语言,特别适合于I ...
- JavaScript与Java函数的比较
JavaScript与Java函数的比较 学习了两天的JavaScript,会觉得这是一门和Java类似但又有很大不同的语言.很想将这种感受写下来并举例做一些分享. 函数成为了对象? 你很难想到,在学 ...
- android 调用java类_Android中在WebView里实现Javascript调用Java类的方法
搜索热词 为了方便网页和Android应用的交互,Android系统提供了WebView中JavaScript网页脚本调用Java类方法的机制.只要调用addJavascriptInterface方法 ...
- javascript rsa java,用javascript与java执行
RSA加密与解密
用javascript与java执行 RSA加密与解密 2009-12-12 14:58:30 出处:https://www.yqdown.com 这几天一直做安全登录,网上查了好多资料,不尽如意 ...
最新文章
- 世界机器人领域12个前沿技术趋势
- 二值网络--XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
- java 重载 返回_java – 返回方法重载
- 贝叶斯、先验估计、后验估计、最大似然估计、最大后验估计
- Java IO流及应用(一)
- 2.5d generator 2.0_ps插件【2.5D插件】
- 撰写paper时,如何在word里输入图片或其他文献(PDF)里的公式?(更新时间2022.03.01)
- 用JAVA制作小游戏——飞机大战(三)
- 搜索引擎算法的139个相关因素【SEO】
- 共享内存及其用mmap实现共享内存
- [转载] python可视化分析(matplotlib、seaborn、ggplot2)
- FusionCharts 学习总结
- Linux源码安装Mysql5.7
- 产品经理,该如何做好「自己」这款产品?
- multisim 14.2 添加模型
- 华为、科达、海康、大华等厂家摄像头通过非标方式(RTSP)接入流媒体服务实现WEB直播与录像...
- 拉仇恨!李想靠微博股票赚了两三倍,只有千把万
- Redis(学习笔记)
- Android GUI系统框架介绍
- 沈孝钧计算机算法基础答案,计算机算法基础教学课件ppt作者沈孝钧第12章-PPT-N2课件.pptx...