基于Java技术的企业应用集成解决方案探讨:JNI、JMS、XML与J2EE应用
Java 是一种广泛应用的编程语言,基于 Java 的技术在企业应用集成领域有着重要的地位。宁芊、殷国富和宋翠家来自四川大学制造科学与工程学院,他们的研究探讨了基于 Java 技术的 EAI 解决方案。其中包括利用 JNI 来实现 EAI,通过分布式企业通信范型来解决 EAI 问题,以及借助 JMS、XML 和 J2EE 连接程序来实现 EAI 等方面。

缺乏可重用的应用等。
解决这些问题需要仔细考虑,其基础在于新开发的应用程序能够与其他企业应用程序或者传统(已有)企业应用程序进行良好的集成。
企业应用集成,也就是 EAI,它需要去解决这样一个问题,那就是如何把传统或辅助系统里的数据以及逻辑,集成到当前和未来的企业系统框架里面去。
企业内部有管理传统或辅助应用程序等情况,由此产生了一个内部 EAI 问题,针对这个问题能够提供更灵活且可控制性更强的解决方案。
传统/辅助企业应用程序若位于企业外部,这些外部 EAI 问题可能会极为复杂。因为必须让多个企业就系统如何集成达成一致,此类问题常常需要借助 B2B 应用程序来决策如何在企业间交换数据[2]。
EAI 解决方案中包含诸多技术、技巧和产品,本文着重探讨的是怎样借助 Java 以及 Java 企业技术,来给 Java 企业应用程序提供 EAI 解决方案。
利用 JNI 来实现 EAI ,如 图 1 所示。Java 本地接口(JNI)已被整合到标准的 Java 平台中,这使得 Java 代码能够直接与特定操作系统和硬件平台上的本地共享二进制库进行相互作用。
JNI 提供了一种方法,能够把其他语言所实现的传统应用程序代码整合到 Java 企业应用程序当中。
图 1 的 Java 本地接口(JNI)体系结构,倘若目标本地平台所使用的语言为 C 或 C++,因为 Java 平台已经为这些语言提供了代码转换支持,所以创建基于 JNI 的代码转换是很方便的。
8. 执行 Java 应用程序,将共享库放置在 Java 应用程序的 124 库路径中,库路径的搜索机制与特定的操作系统平台相关。
使用 JNI 有不足之处。在 JNI 中,内存资源与线程资源以及共享库代码值中的线程资源,是以不同的方式进行管理的。所以在使用 JNI 时,必须十分谨慎,要考虑到这些资源不匹配所引发的问题。
因此,将 JNI 用作 EAI 解决方案的方式主要适宜于较为简单的企业应用程序的集成工作。
很多企业环境需要对特定辅助企业应用程序提供的服务进行分布式访问。有些企业环境使用上面介绍的 JNI 进行企业应用程序集成时,无法实现分布式处理方法。在这种情况下,可以直接从 J2EE EJB 组件或 J2EEWeb 组件的角度来实现其中的某些分布式通信方法。
一种重要的技术是利用分布式企业通信范型。它能在辅助企业应用程序或传统企业应用程序与 Java 企业应用程序之间提供 EAI 连接方法。
当分布式辅助应用程序需要一个简单的接口时,能够借助 TCP/IP 来实现 EAI,不过这需要进行大量的手工编码;对于低成本的 EAI 解决方案,可通过 HTTP 来提供 EAI 功能;在基于 Java 应用程序的情形下,RMI 可以当作实现分布式 EAI 的方式。
RMI 属于标准的 EJB 接口技术。所以,在 Java 企业应用程序里,RMI 能够在所有的 J2EE 和 EJB 环境中实现最大程度的互操作性。
传统或辅助企业应用程序若使用基于 Windows 的主机平台,DCOM 便是实现该应用程序与 Java 企业应用程序环境连接性的最佳方式。
在辅助应用程序端使用基于 Windows 的 DCOM,以提供一个分布式接口,此接口能够便于用于创建原始应用程序的各种库和语言。
在分布式通信的范型当中,实现 EAI 的最为重要的技术是把 CORBA 利用起来以实现 EAI。
CORBA 是一种分布式通信解决方案,它独立于语言与平台。所以,为传统/辅助应用程序提供基于 CORBA 的接口,就可以实现与其他应用程序进行高级的 EAI。
在传统或辅助企业应用程序端,要为应用程序提供本地语言的 CORBA 包装实现。同时,通过 CORBA IDL 来定义分布式接口。还可以使用 Java JNI 桥接本地辅助应用程序与通过 Java IDL 所实现的分布式 CORBA 接口。另外,基于 Java 的商业 CORBA ORB 也可以实现相关功能。
利用消息服务与 JMS 实现 EAIEAI 所使用的分布式通信范型,依赖于能够对将要被集成的传统/辅助企业应用程序进行同步调用的能力。这种实现 EAI 的方式,适合一些特定的内部 EAI 工程。然而,对于外部 EAI 工程或外部 B2B 工程来说,这种方法存在着明显的不足之处。
在需要进行外部EAI时,最好能够考虑使用异步消息通信机制。
异步通信可以轻松地达成系统之间的高级耦合。同时,它能够借助消息服务供应商,实现对可靠消息队列的集中管理。
在 J2EE 环境以及 Java 企业环境里,Java 消息服务(即 Java Messaging Service,JMS)是一种较为理想的消息服务技术。
图2给出在EAI解决方案中使用JMS的基本体系结构。
JMS 中采用了基于服务供应商接口(Service ProviderInterface,SPI)的体系结构,所以在 J2EE 企业应用程序里能够集成任何特定供应商的消息服务实现,同时这些消息服务实现还能提供关于 JMS 的 SPI 实现。
如果辅助应用程序对本组织而言是外部的应用程序,那么辅助系统所提供的特殊消息服务系统就能够较为容易地实现与 Java 企业应用程序的集成。
此外,进行传统或辅助企业应用程序集成时可使用的选项,会仅被辅助应用程序语言与平台所提供的消息服务接口的能力所限制。
图 2 借助 JMS 来达成 EAI。XML 可在 Java 应用环境中用于数据表示,并且在大多数其他企业应用环境中,它也是正被广泛运用的数据表示技术,已有诸多 EAI 供应商把 XML 整合进了 EAI 产品供应商的体系结构之中。
XML能够用来对从一个系统传递到另一个系统的那些数据进行表示。所以在达成 EAI 的过程中,XML 已经逐渐成为用于进行消息传递的标准语言。
在希望集成在一起的系统之间,能够定义一种标准的文档类型定义(Document Type Definition,DTD),并且可以将其共享出去,这种 DTD 是用来对系统之间交换的 XML 文档进行解释的。
利用某些技术,比如 XML 样式标记语言(eXtensible Stylesheet Language,XSL)规范里的 XSL 转换(XSL Trans-formation,XSLT)技术,能够达成 XML 文档从一个系统环境向另一个系统环境的转换。
图 3 展示了这样一种情况,即通过 XML 来实现 Java 企业环境与传统/辅助企业应用程序环境的集成,呈现出了基本的体系结构。
传统/辅助企业应用程序要构造与分析 XML 文档,就必须具备 XML 文档创建器/分析器,或者有能力对其进行扩展。
目前,对于大多数具备 API 支持的平台来说,已经存在着各种语言版本的商业化工具。这些工具能够支持 XML 文档的创建工作,也能够支持 XML 文档的分析工作。
图 3 通过 XML 来实现。EAIXML 既可以表示简单的数据,也可以表示复杂的数据。在 125 页第 2 期的宁芊等文章中,提到在库路径中,库路径的搜索机制与特定的操作系统平台存在关联。
使用JNI的不足之处在于,JNI之中的内存资源与线程资源以及共享库代码值中的线程资源是按照不同的方式进行管理的,在使用JNI时必须非常谨慎,必须考虑这些资源不匹配所带来的问题。
因此,使用JNI作为EAI解决方案的方法主要适合于简单的企业应用程序集成工作。
3利用分布式企业通信范型实现EAI很多企业环境需要对由特定辅助企业应用程序所提供的服务实现分布式访问,使用上面介绍的JNI进行企业应用程序集成不能实现分布式处理方法,这时可以直接从J2EE EJB组件或从J2EEWeb组件的角度实现其中的某些分布式通信方法。
另外一种重要的技术就是利用分布式企业通信范型,在辅助企业应用程序或传统企业应用程序与Java企业应用程序之间提供EAI连接方法。
当分布式辅助应用程序需要一个简单的接口时,能够借助 TCP/IP 来实现 EAI,不过这需要进行大量的手工编码;对于成本较低的 EAI 解决方案,可通过 HTTP 来提供 EAI 功能;在基于 Java 应用程序的情形下,RMI 可以当作实现分布式 EAI 的方式。
RMI是标准的EJB接口技术,因此,在Java企业应用程序中,RMI能够保证在所有J2EE,EJB环境中实现最大限度的互操作性。
如果传统/辅助企业应用程序使用的是基于Windows的主机平台,那么DCOM是实现应用程序与Java企业应用程序环境连接性的最佳途径。
在基于Windows的辅助应用程序端使用DCOM,用来提供一个分布式接口,能够容易地用于创建原始应用程序的任何库与语言。