栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

新一代VM简单使用与感想

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

新一代VM简单使用与感想


       一点一点靠近你,在了解新动向过程中,你会发现java还很年轻,还很有活力,还在追求,也许有天依然会重回霸主位置。比如你去了解下GraalVM,它不是什么无中生有的新玩意,但是你看它背后的加持,你会激动不已。

一、同了解共激动
  • 官网:https://www.graalvm.org/

  • 背书组织:基本3大巨头都为它背书,oracle、spring、eclipse
  • 有多强&能干啥:https://baijiahao.baidu.com/s?id=1709080667810830871&wfr=spider&for=pc
二、我觉得能干啥

       知道它在一点点强大,我做不到让它更强大,那我至少应该有用它的勇气吧。
       任何脱离场景的技术都是无用的,这是我的观点。所以我站在我的工作位置,结合业务场景,用它可以做我们行业内的设备接入、指令下行、数据上行、自定义暴露等等。

三、可行性用它

依赖引入



    org.eclipse.dirigible
    dirigible-engine-javascript-graalvm
    6.1.6

       这个包里的依赖引入就有graalVM,那是基底,可以点击骨架进去看具体依赖。这里我是试试js的执行引入,设想是暴露一个js入口给用户自定义,js是存文件还是方法片段存数据库,自行根据业务需要处理。今天这里我不分享思路,只验证可行性。
测试代码

    @Test
    void jsFunExecuteTest() {
        System.out.println("--GraalVM的js调用传参测试--");
        String dataStr = "{n" +
                "    "upPacketSN": "-1",n" +
                "    "deviceType": "",n" +
                "    "productId": "15093884",n" +
                "    "IMEI": "868913054378877",n" +
                "    "deviceId": "915b36e0f521453db77c04ec7d596806",n" +
                "    "protocol": "lwm2m",n" +
                "    "messageType": "dataReport",n" +
                "    "payload": "{\"gnss_time\":1637904695000,\"gnss_source\":1,\"cell_id\":149920338,\"gnss_data\":\"$GNRMC,053131.000,A,3028.31259,N,11419.04293,E,0.00,176.43,261121,,,A,V*0A\"}",n" +
                "    "assocAssetId": "",n" +
                "    "tenantId": "2000028028",n" +
                "    "IMSI": "460113182238259",n" +
                "    "topic": "v1/up/ad19",n" +
                "    "upDataSN": "-1",n" +
                "    "serviceId": "11",n" +
                "    "timestamp": "1637906446220"n" +
                "}";

        //js方法字符串
        String funStr = "n" +
                "function testGraalFun(dataStr) {n" +
                "    var parseResult = {};n" +
                "    parseResult.language = "js";n" +
                "    parseResult.protocol = "nbiot";n" +
                "    parseResult.method = "testGraalFun";n" +
                "    var dataArr = new Array();n" +
                "    if (dataStr != null && dataStr != "") {n" +
                "        var re = JSON.parse(dataStr);n" +
                "        Object.keys(re).forEach(function(k) {n" +
                "            var tmp = {};n" +
                "            tmp.enName = k;n" +
                "            tmp.cnName = "";n" +
                "            tmp.keyVal = re[k];n" +
                "            switch (k) {n" +
                "                case "upPacketSN":n" +
                "                    tmp.cnName = "上行包序号";n" +
                "                    break;n" +
                "                case "deviceType":n" +
                "                    tmp.cnName = "设备类型";n" +
                "                    break;n" +
                "                case "productId":n" +
                "                    tmp.cnName = "商品ID";n" +
                "                    break;n" +
                "                case "deviceId":n" +
                "                    tmp.cnName = "设备编码";n" +
                "                    break;n" +
                "                default:n" +
                "                    break;n" +
                "            }n" +
                "            dataArr.push(tmp);n" +
                "        });n" +
                "    }n" +
                "    if (dataArr.length > 0){n" +
                "        parseResult.data = dataArr;n" +
                "        return JSON.stringify(parseResult);n" +
                "    }n" +
                "    return parseResult;n" +
                "}";

        Context context = Context.newBuilder()
                .allowHostAccess(HostAccess.ALL)
                .allowHostClassLookup(s -> false)
                .build();

        context.eval(Source.create("js", funStr));

        //java通过graalvm调用并传参执行,返回结果
        Object obj = context.getBindings("js").getMember("testGraalFun").execute(dataStr);

        System.out.println("-----解析结果:" + obj.toString());
    }

测试类执行结果

四、总结

       其他编程语言各位可以勇敢的试试,你会发现多么的迷人,性能还特别高。以前也做过类似java调用dll文件之类的,那时候还会有好多限制,要语言指令转换包什么的。现在有了它,不得不说真香,而且未来绝对可期,说不定有一天它能重回霸主位。
       它还在不断迭代优化,oracle在积极推动,吸引大家换高版本的jdk,说不定有天你就是因为迷上了它。
       能用它干啥,这里至少抛砖引玉,大家大胆的自行fly your self。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630987.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号