本文将介绍">开发人员如何利用此框架将他们在 IBM® WebSphere® Application Server 上部署的 J2EE 应用程序与这些 C++ 库相集成。
IBM® WebSphere® Application Server 是一个兼容 Java® EE 6 的、健壮且高度可用的中间件环境,它提供了一个平台来托管和管理各种不同的企业应用程序。一些用户可能遇到过这样的场景,他们需要将基于 Java 的应用程序与基于 C/C++ 的原生实现相集成。例如,涉及国防、航空、天气预报的应用程序以及其他科学应用程序包含某些算法,这些算法只能使用这些原生语言实现,并且在 Java 中实现起来太复杂、太困难或风险太高。
要将这些基于 C 的实现与 Java 程序相集成,您需要以某种方式在两种编程语言 API 之间建立连接。Java 原生接口 (JNI) 提供了这种衔接方式在 Java 与 C/C++ API 之间交换数据。要实现此解决方案,您需要在 Java 中使用您希望向其他 Java 类公开的方法定义该接口,从该接口的已编译代码生成头文件,然后将此头文件导入到原生的共享库模块中,比如针对 Windows® 的动态链接库 (.dll) 和针对基于 UNIX® 的系统的共享对象 (.so) 库。这些模块可通过多家供应商提供的各种工具来创建。
本文介绍的步骤将简化通过 Java 原生接口 (JNI) 将部署在 WebSphere Application Server 上的基于 Java 的应用程序与基于 C 的实现相集成的过程。掌握本文的内容之后,您就能够为 WebSphere Application Server 创建、配置和调用共享库。
这里包含的信息适用于 IBM WebSphere Application Server V6.1、V7 和 V8,并且假设您熟悉相应的 IBM Rational® 工具。请注意,这里提供的示例非常基本,仅用于演示所涉及的高级开发过程,不包含典型的应用程序开发中通常包含的数据验证或其他优秀实践。
创建原生的共享库
打开 IBM Integration Designer 并创建一个独立 Java 项目(参见图 1)。
图 1. 创建独立项目
创建一个 Java 类,其中包含您希望与原生访问相关联的方法(参见图 2)。方法声明将依赖于您希望调用的 C 方法的签名。在本例中,假设一个第三方 C API 需要简单类型和一个数据数组(在本例中,为一个双精度数组)。(要调用另一个原生库,您需要通过在头文件实现期间导入它的头文件,将该文件与您的 DLL 相关联。)
图 2. 创建 Java 类