先前做过一个项目,是个j2ee项目,其中需要与tuxedo通讯,当时对jolt不熟,首先考虑的是用tuxedo的动态库和tuxuedo服务器通讯,由于我的开发环境是ubuntu,生产环境是windows,当时选择了这么个方案
在开发环境下使用lazarus编写一个.so给java调用,在生产环境用delphi编写一个.dll给java调用,lazarus和delphi共用对tuxedo调用的代码。换平台只要重新编译就可以了。
正式这个方案让我走了小一个月的弯路,现在想起来也许我从项目开始的时候就不该使用linux开发,直接用windows会省下不少力气,或者干脆用gcc做一个共享库也没问题,可偏偏用了倒霉的lazarus.
项目开发完了,测试的时候发现了很严重的问题。jvm会在ubuntu下崩溃,也许是几分种也许是几小时,总之一定会崩溃。
崩溃的问题应该是我开发的共享库造成的,但找来找去也没有发现是哪部分代码造成了崩溃,后来发现程序迁移到windows下就很稳定,这就排除了程序代码的问题了。
我在linux下专门用lazarus为共享库写了一个测试程序,但测试没有发现问题。这个问题百思不得其解,后来终于想明白了,估计问题出在java原声类型在jni/jna调用时和lazarus的类型稍微的有些差异,这样在传入/传出参数时会造成内存非法访问,这就是jvm不定期崩溃的原因吧。
虽然windows下用delphi编译的dll不会造成jvm崩溃,但我最后还是放弃了共享库/动态库这个方案,改用纯java的jolt实现了于tuxedo的通讯。
Lazarus编写JNI/JNA的问题
时间:2015-01-28 13:05 来源: 我爱IT技术网 作者:小搜
Lazarus编写JNI/JNA的问题
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
