WEB开发网
开发学院WEB开发Xml JMS、XML和异构企业 阅读

JMS、XML和异构企业

 2010-10-18 09:34:51 来源:WEB开发网   
核心提示:大多数计算环境更多地是由不同平台组成,而不是固守任何一个平台,JMS、XML和异构企业, Java 消息服务 (JMS) ,与可扩展标记语言 (XML) 一起,如果XML是通过用户输入创建的,那么验证XML的合法性是非常必要的,满足了这种异构环境集成的愿望,这篇文章演示了如何使用 JMS 来创建基于 XML 的消息并将

大多数计算环境更多地是由不同平台组成,而不是固守任何一个平台。 Java 消息服务 (JMS) ,与可扩展标记语言 (XML) 一起,满足了这种异构环境集成的愿望。这篇文章演示了如何使用 JMS 来创建基于 XML 的消息并将这些消息同样分发到 Java 和非 Java 应用程序。

经过几年构建、扩展和维护庞大的分布式应用之后,程序员逐步体会到平台无关的行为和平台无关的数据的好处了。

Java 编程语言已经向满足平台无关的行为(尽管例如 TCL 这样的脚本语言在一段或更长时间内还受到关注)的需要迈进了一步。而且 XML(可扩展标记语言)正在成为开放、平台无关的数据解决方案的中坚力量。

本文演示了在与 Java 消息服务 (JMS) 一起使用的情况下,XML 如何满足平台无关的数据的愿望。

消息传递将它们联系在一起

JMS 为消息服务定义了通用 Java 语言接口。它支持最常见的消息传递模型(包括发布/订阅和点到点)。

首先将平台无关的数据与 Java 技术放在一段文字中提及看起来比较奇怪。然而,既然JMS是一种基于 Java(因此是平台无关的)的技术,我们为什么在使用 JMS 时需要平台无关的数据呢?

答案来源于经常使用消息传递的环境。消息传递的一个最大优点体现在应用集成领域。被集成的应用多半不全是 Java 应用。

在这种情况下 JMS 非常理想,因为它是一种接口规范 -- 而不是实现。这意味着JMS位于已经有了相当的应用现有技术的上面一层。(当然,所有 Java 实现也能利用这种 JMS 和 XML 的解决方案。)

图 1. 位于专有消息服务上层的 JMS

图 1 说明了这样一种环境。非 Java 应用与专用消息服务直接进行通信。Java 应用通过 JMS 通信。每一样是无缝的,对吗?

但不完全是。数据仍然是一个需要解决的问题。

平台无关的数据解决了问题

请考虑 JMS 的五种消息类型。JMS 提供了三种结构化或半结构化的消息类型(MapMessage、ObjectMessage 和 StreamMessage)以及两种非结构化的或自由格式的消息类型(TextMessage 和 BytesMessage)。

结构化的消息格式只代表了众多处理结构化数据方法中的少数几种(只有映射表、序列化对象和数据元素流是直接表示的)。更重要的是,它们引发了与非 Java 应用交互操作的问题。转换或映射,特别是在转换涉及到序列化的类时是如何实现的呢?

非结构化的消息格式似乎能够更好地进行交互操作,但这仅仅是因为它们在消息上很少利用结构。然而这个很小的便利却为每个接受者加重了语法分析和确认的负担。

XML 减轻了这种负担。它为丰富的功能性数据结构提供了清晰的标准化途径,并通过越来越多的工具来支撑它,这些工具是用来执行语法分析和确认这些费力的工作的。

通过在环节中使用 XML,每一样都是无缝的。

代码

以下两段代码说明了如何传送 XML 消息。因为 XML 基本上是文本,所以它在 TextMessage 实例的主体中传送。两个示例都假设有 XMLValidator 类存在。这个类是许多基于 Java 的 XML 语法分析和确认工具之一的一个简单封装。

发送方是非常简单的。清单 1 中的代码说明了如何找到 Queue 和 QueueConnectionFactory、如何创建连接和会话、如何将 XML 填充到 TextMessage,以及如何将消息发送给队列。

清单 1. 发送 XML 消息的示例

public
static
void
send(
String stringQueue,
String stringQueueConnectionFactory,
XMLValidator xmlvalidator,
String stringXML)
throws
NamingException,
JMSException,
XMLValidationException {
//在一个名为JNDI和目录服务中查找Queue 和 QueueConnection 类厂,或者直接创建它们
Context context = new InitialContext();
Queue queue = null;
queue = (Queue)context.lookup(stringQueue);
QueueConnectionFactory queueconnectionfactory = null;
queueconnectionfactory =
(QueueConnectionFactory)context.lookup(stringQueueConnectionFactory);
QueueConnection queueconnection = null;
queueconnection = queueconnectionfactory.createQueueConnection();
QueueSession queuesession = null;
queuesession =
queueconnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建 QueueSender.
QueueSender queuesender = null;
queuesender = queuesession.createSender(queue);
//首先在XML中创建一个TextMessage,如果XML是通过用户输入创建的,那么验证XML的合法性是非常必要的。然后发送它。
xmlvalidator.validate(stringXML);
TextMessage textmessage;
textmessage = queuesession.createTextMessage();
textmessage.setText(stringXML);
queuesender.send(textmessage);
}

 

1 2  下一页

Tags:JMS XML 企业

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接