linux下c++通过JNI调用JAVA的jar实现跨语言集成

5 篇文章 0 订阅
3 篇文章 0 订阅

 

      做系统集成,有时可能会遇到各种需求和问题。跨语言之间如何通信集成更是平常的工作。最近遇到的问题就时,有一个系统服务是c++编写的,其中需要接收外部的消息然后存储到hbase集群中。

      服务基本完成后,测试写入速度性能,居然每秒最多才500条,每掉数据也不是很大8k左右。因为hbase对java意外的支持是通过thrift2中间件实现的,与java的API机制不同,看了下所有gen cpp的代码,发现没有相关类似java高性能写入的方法。而java的高性能写入,同样的数据大小可以达到每秒3000个。

      于是解决有2个方案:1.存储写入单独使用java程序实现;2.c++调用java代码实现。对于方案一的缺点就是增加了系统应用部署和维护的繁杂度。虽然方案二在整个应用集成后的稳定性上有风险,但相信可以克服。

      整体的代码就不粘贴了,仅对主要的点进行记录。

      主要处理流程:调起jvm-》方法查询-》方法调用。

      调起jvm是需要对jvm进行参数设置,主要是"-Djava.class.path"的配置。对于目标集成的java代码如果是按package存储的文件目录,直接设置"-Djava.class.path=顶层包所在目录",比如要在当前目录下查找com.test.MyTest这个类,直接设置"-Djava.class.path=."即可。

     如果要调用的java是较复杂的程序,且是通过jar包发布的,就需要配置为"-Djava.class.path=.:jar文件路径名称",比如要在当前目录下的mytest.jar中查找调用类,则配置为"-Djava.class.path=.:mytest.jar"即可。

   注意:发布的jar应用存在依赖,那么发布时需要将这些依赖unpack,即应用中依赖的jar包都需要解压成包目录。

c++和java之间的调用,注意参数的类型的转换即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值