Jhonney的专栏

   ----人见人爱
随笔 - 49, 文章 - 1, 评论 - 23, 引用 - 0
数据加载中……

Lingo介绍

在上一篇文章(Spring和Message Bean的整合)中,我们介绍了如何在Spring中整合Message Bean,这虽然是一个非常简单的方法,但是Message的使用始终有一定的局限性。我们知道软件的设计应该尽量面向对象,而MQ是面向数据的,而不是面向对象的,如果能够在设计中介入异步方法那将比Message更加方便,更加利于理解。Lingo就是为了解决这样的问题而诞生的。

Lingo是一个轻量级消息开发包,它基于Spring的Remoting机制并对JMS做了扩展,支持消息的同步或异步传递。Lingo非常高效,在线程、连接、会话和事务处理等方面都做了很好的处理,在服务器端可以和JCA整合起来,更加方便。在一定程度上,Lingo和微软的Indigo和JSR 181类似,都允许同步和异步函数调用,同时支持对POJO的绑定,简化对远程服务的调用。当前Lingo只支持JMS的实现,在以后将实现更多的远程协议,如web service等。注:CRISPY是另一款远程调用框架,实现的目标同样如此,目前一直支持多种协议。

讲了这么多,让我们看看如何将上一篇文章中的MDP转换为异步方法调用。首先我们需要先下载Lingo,你可以通过 http://lingo.codehaus.org 下载。因为是异步调用,这里同样需要MQ的支持,我们采用ActiveMQ,同时以Embed模式运行。

首先创建一个服务接口,然后实现该接口。在Lingo中,返回值为void类型,且不抛出任何异常的函数方法才可以为异步函数(还需要声明),其他都为同步函数,这里我们要实现一个异步调用函数,就是一个简单的方法 public void sayHello(String name)。

接下来我们要将服务的实现和MQ的Queue或Topic关联起来,这里我们只需调用Lingo的JmsServiceExporter将服务发布出来,我们将这些信息写在applicationContext_lingo_service.xml文件中,然后通过Spring的配置文件使其生效。我们编写了一个普通的java类,运行该程序就可以实现异步调用的服务器端。


public class StartMQFromSpring
{
public static void main(String[] args)
{
new ClassPathXmlApplicationContext( new String[]
{
"/applicationContext_lingo_service.xml"}
);
}
}

接下来创建一个异步调用的客户端,这里我们在applicationContext_lingo_client.xml中进行设定,然后通过一个Spring的测试用例完成客户端的模拟操作。


public class SpringLingoTest extends AbstractDependencyInjectionSpringContextTests
{
protected String[] getConfigLocations()
{
return new String[]{"classpath*:applicationContext_lingo_client.xml"};
}
public void testAsyncronizeInvoke() throws Exception
{
HelloService service = (HelloService) applicationContext.getBean("client"); service.sayHello("jacky");
}
}

最后让我们运行测试,首先运行StartMQFromSpring,然后运行SpringLingoTest测试用例,这样就可以实现一个异步方法调用的例子。

总结:MDP和异步方法调用都是异步调用非常好的方法,但是异步方法调用对OO设计更加有帮助,而Message Bean则面向数据,这两者可自行选择。和Spring整合,更加方便地实现方法的异步调用,可以让你的设计更加简洁。

posted on 2007-06-20 02:38 Jhonney 阅读(483) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: