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企业相关推荐

  1. vert.x_使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务

    vert.x 中断了将近半年后发表了一篇新文章. 在本文中,我们将快速了解如何开始使用vert.x,更有趣的是,如何使用RxJava简化异步系统的编程. 我们将涵盖以下主题: 使用Maven创建一个空 ...

  2. java icomparer_集合数据处理(C#、JavaScript 和 Java)

    Java 丢了好多年,最近在拣起来,首先当然是了解这么多年来它的变化,于是发现了 Java 8 的java.util.stream.在学习和试验的过程中,相比较于 C# 和 javascript,有那 ...

  3. vert.x_选择Vert.x的3个理由

    vert.x Vert.x是用于JVM的轻量级高性能应用程序平台 现代Web应用程序和移动客户端的兴起重新定义了Web服务器的期望. Node.js是第一个识别范式转换并提供解决方案的技术. 应用程序 ...

  4. JavaScript与Java的关系(联系与区别)

    JavaScript和Java是两种不一样的语言,但是它们之间存在联系. 背景方面 Javascript(1995年,Netscape公司雇佣了程序员Brendan Eich开发这种网页脚本语言)最初 ...

  5. js 系统教程-01-JavaScript 的历史,JavaScript 与 Java 的关系,JavaScript 与 ECMAScript 的关系,JavaScript的版本

    目录 目录 JavaScript 语言的历史 诞生 JavaScript 与 Java 的关系 JavaScript 与 ECMAScript 的关系 JavaScript的版本 原文地址 目录导航 ...

  6. javascript与java的不同之处

    javascript与java的不同之处 虽然很像,但不是一种语言. 二者的区别体现在: 首先,它们是两个公司开发的不同的两个产品,Java是SUN公司推出的新一代面向对象的程序设计语言,特别适合于I ...

  7. JavaScript与Java函数的比较

    JavaScript与Java函数的比较 学习了两天的JavaScript,会觉得这是一门和Java类似但又有很大不同的语言.很想将这种感受写下来并举例做一些分享. 函数成为了对象? 你很难想到,在学 ...

  8. android 调用java类_Android中在WebView里实现Javascript调用Java类的方法

    搜索热词 为了方便网页和Android应用的交互,Android系统提供了WebView中JavaScript网页脚本调用Java类方法的机制.只要调用addJavascriptInterface方法 ...

  9. javascript rsa java,用javascript与java执行 RSA加密与解密

    用javascript与java执行 RSA加密与解密 2009-12-12 14:58:30   出处:https://www.yqdown.com 这几天一直做安全登录,网上查了好多资料,不尽如意 ...

最新文章

  1. 世界机器人领域12个前沿技术趋势
  2. 二值网络--XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
  3. java 重载 返回_java – 返回方法重载
  4. 贝叶斯、先验估计、后验估计、最大似然估计、最大后验估计
  5. Java IO流及应用(一)
  6. 2.5d generator 2.0_ps插件【2.5D插件】
  7. 撰写paper时,如何在word里输入图片或其他文献(PDF)里的公式?(更新时间2022.03.01)
  8. 用JAVA制作小游戏——飞机大战(三)
  9. 搜索引擎算法的139个相关因素【SEO】
  10. 共享内存及其用mmap实现共享内存
  11. [转载] python可视化分析(matplotlib、seaborn、ggplot2)
  12. FusionCharts 学习总结
  13. Linux源码安装Mysql5.7
  14. 产品经理,该如何做好「自己」这款产品?
  15. multisim 14.2 添加模型
  16. 华为、科达、海康、大华等厂家摄像头通过非标方式(RTSP)接入流媒体服务实现WEB直播与录像...
  17. 拉仇恨!李想靠微博股票赚了两三倍,只有千把万
  18. Redis(学习笔记)
  19. Android GUI系统框架介绍
  20. 沈孝钧计算机算法基础答案,计算机算法基础教学课件ppt作者沈孝钧第12章-PPT-N2课件.pptx...

热门文章

  1. 如何关闭kafka的控制台日志
  2. 工作流的节点关系详解
  3. 关于Kafka高性能的几个问题
  4. Netty入门教程——初识Netty
  5. rocketMq发送事务消息
  6. 这个时代会残酷惩罚不肯改变的人
  7. NandFlash启动理解(S3C2410)
  8. 关于 php 用webservice传输数据的问题(nosoap与.NET对接)此处一直困扰三天时间,终于解决...
  9. linux下的Apache2 + mysql5 + php5 源码完整安装详解
  10. Python——使用Flask框架封装接口