首页专业论文技术应用政策标准解决方案常用资料经验交流教育培训企业技术专家访谈电力期刊
您现在的位置:北极星电力网 > 技术频道 > 常用资料 > InstantMessagingSPI进行翻译

InstantMessagingSPI进行翻译

北极星电力网技术频道    作者:佚名   2008/8/6 13:42:53   

 关键词:  TM MES

级别:中级

BryanDaniel,软件工程师,IBM
ShivaNistala,高级Java顾问,AdeaGroup

2005年7月07日

破除语言的壁垒!本文将介绍如何使用LotusWorkplaceInstantMessagingSPI创建聊天会话的实时翻译,使两个不懂对方语言的人可以互相沟通。

今天,即时消息传递已经基本上无处不在了。对于有些人来说,它和电子邮件一样都是基本的通信工具,尤其是在需要及时响应的场合。随着在线感知技术在越来越多的应用程序(如IBMWorkplace产品)中普遍采用,即时消息传递会变得越来越普及。

当然,人类的所有通信手段,甚至包括面对面的谈话,都必须面对一个基本的事实:我们并非都说同一种语言。在当今这个由多个国家组成的世界里,我们之中很多人仍然需要考虑到语言的障碍。这常常成为沟通的挑战,特别是在必须清楚、快速地交换信息的时候。如果在与他人用即时消息传递功能进行聊天的时候,每条消息能够“立刻”自动进行翻译,以接收方的母语形式呈现,这难道不是一个很棒的想法吗?就在几年前,这种功能看起来似乎还像是科幻小说,但现在,这种功能实现起来却十分的容易,本文将介绍如何来实现这种功能。

本文讨论IBMWorkplaceInstantMessagingServiceProviderInterface(SPI)的用法。InstantMessagingSPI是IBMWorkplaceProductsAPIToolkit的一部分,开发人员可以利用它构建即时消息处理程序,在消息抵达接收方之前截获它。这种SPI最常见的功能是消息日志。但是也可实现其他功能,如消息翻译。(在附件中可以看到完整的示例代码。)

本文假设您是一位有经验的Java开发人员,并且对IBMWorkplaceProductsAPIToolkit有一定的了解。关于这种Toolkit的介绍,请参阅developerWorks:Lotus文章“向IBMWorkplaceportlet添加到场提醒”。也可以访问IBMWorkplace资源中心。

WorkplaceInstantMessagingSPIservlets
可以将利用WorkplaceInstantMessagingSPI的应用程序作为servlet部署在WebSpherePortal应用程序服务器实例上。该servlet应该配置成在启动应用程序服务器实例时自动加载。在init()方法中,servlet将自身作为监听程序添加到InstantMessagingService中。类似地,当servlet销毁时,还要从MessagingService监听程序中删除该servlet。因为这是一个事件监听程序,所以servlet必须实现onMessage方法,该方法在消息传递到接收方之前调用。消息的所有翻译和记录工作都要在该方法中处理。

本文的其余部分将说明如何创建一个简单的消息处理程序,它扩展了以前添加到PurchaseOrderportlet(在这篇文章中介绍)中的聊天功能。该处理程序将利用WebSphereTranslationServer在消息送达接收方之前对其进行翻译。我们的目标是说明开发一个即时消息处理程序并将它结合到IBMWorkplaceCollaborativeServices解决方案中是多么简单。这个例子还可以扩展,在执行翻译之前考虑使用配置信息,当然这不在本文的讨论范围之列。(比如,处理程序可以将消息翻译成接受方保存在LDAP服务器中的首选语言。)

注意:下面这些步骤假设您对使用IDE开发J2EE应用程序有一定了解,比如WebSphereStudioApplicationDeveloperV5.1或IBMRationalApplicationDeveloperV6.0。还应该安装带有英语和西班牙语翻译引擎的IBMWebSphereTranslationServer。(在下面的例子中假设使用的是RationalApplicationDeveloper。)

创建即时消息处理程序
打开开发环境如IBMRationalApplicationDeveloper(RAD)V6.0,创建一个新的DynamicWebProject,将其命名为IMTranslatorProj(如图1所示)。如果使用的是IBMRADV6.0,那么一定要将Web项目的部署目标设为WebSphereApplicationServerV5.0。

图1.创建动态Web项目

要使用InstantMessagingSPI和WebSphereTranslationServerAPI,则必须能够访问lwpapi25_imspi.jar和wts.jar文件。将这两个JAR文件导入Web项目的WebContentWEB-INFlib文件夹(参见图2)。(下载并解压工具箱后,可以在目录lwpapi25\imspi\lib中找到lwpapi25_imspi.jar文件。wts.jar文件位于安装WebSphereTranslationServer的目录中。)

图2.lwpapi25_imspi.jar和wts.jar文件

在项目中创建一个新的servlet,将其命名为IMTranslator。该servlet也应该包含init()和destroy()方法(这些可能需要手工输入)。将下列代码添加到servlet代码的开始位置,以便引入正确的包:

importcom.ibm.workplace.services.messaging.*;importcom.ibm.lt.*;

接收消息事件的servlet必须实现MessagingListener接口。将servlet类的定义修改为:

publicclassIMTranslatorextendsHttpServletimplementsServlet,MessagingListener{

现在,新的servlet的代码应该如下所示(忽略该错误,因为您将在下一步中纠正它):

importjava.io.IOException;importjavax.servlet.*;importjavax.servlet.http.*;importcom.ibm.workplace.services.messaging.*;importcom.ibm.lt.*;publicclassIMTranslatorextendsHttpServletimplementsServlet,MessagingListener{publicIMTranslator(){super();}protectedvoiddoGet(HttpServletRequestarg0,HttpServletResponsearg1)throwsServletException,IOException{}protectedvoiddoPost(HttpServletRequestarg0,HttpServletResponsearg1)throwsServletException,IOException{}publicvoidinit(ServletConfigarg0)throwsServletException{}publicvoiddestroy(){}}

要实现MessageListener接口,servlet必须提供onMessage()方法的实现。该方法在消息传递给接收方之前调用。在servlet中添加onMessage()方法,代码如下(应根据具体环境更改翻译服务器主机名的值):

publicbyte[]onMessage(StringfromPresentityId,StringfromContactId,java.util.CollectiontoPresentities,java.util.CollectiontoContacts,StringsessionId,StringcontentType,byte[]data){Stringmsg=newString(data);StringconvertedMsg=msg;try{//TranslationserverhostnameStringhostname="portal14.dfw.ibm.com";//ConvertfromenglishtospanishStringfromto="enes";//ConnecttoserverandsubmittranslationrequestLTinterfaceservice=(LTinterface)LTengine.GetService(hostname,fromto);Objecthandle=service.jltBeginTranslation("*format=text");convertedMsg=service.jltTranslate(handle,msg);service.jltEndTranslation(handle);}catch(Throwablet){System.out.println(t.getMessage());t.printStackTrace();}returnconvertedMsg.getBytes();}

消息事件通知的servlet必须将自身注册为MessagingService的监听程序。可以在servlet的init()方法中完成这一操作,该方法在第一次加载servlet时调用。向init()方法添加适当的代码,如下所示:

publicvoidinit(ServletConfigarg0)throwsServletException{MessagingServicemessagingService=MessagingServiceFactory.getMessagingService();if(messagingService==null){System.err.println("IMTranslator:MessagingServiceisNULL");return;}messagingService.addMessagingListener(this);}

在卸载servlet时,应该从MessagingService监听程序中删除这个servlet。可以在servlet的destroy()方法中完成这一操作,该方法在servlet卸载之前调用。向destroy()方法添加适当的代码,如下所示:

publicvoiddestroy(){MessagingServicemessagingService=MessagingServiceFactory.getMessagingService();if(messagingService==null){System.err.println("IMTranslator:MessagingServiceisNULL");return;}messagingService.removeMessagingListener(this);}

默认情况下,servlet在第一次请求时启动。该servlet将悄悄地处理消息,因此应该配置成应用程序启动时自动加载。为此,要通过打开部署描述文件(web.xml)来打开Servlet选项卡,然后选中LoadOnStartup选择框并保存所做的更改(参见图3)。

图3.LoadonStartup选项

保存修改后,将Web项目导出为WAR文件。在IBMRationalApplicationDeveloper中,可以通过右击项目并选择Export来完成这一操作。然后选择WAR文件,单击Next。在输入文件名后,单击Finish完成导出操作。

Web应用程序WAR文件应该部署在IBMWorkplace服务的WebSpherePortal应用程序服务器实例中。通过http://<workplace_server>:9091/admin访问WebSphereApplicationServerAdministrativeConsole。登录后导航到ApplicationsInstallNewApplication。选择上一步中导出的WAR文件,输入/IMTranslator作为上下文根。单击Next继续后面的操作。按照向导的提示安装Web应用程序。在向导的第1和第2步中,接受默认设置。第3步(映射模块到应用程序服务器)中将Web应用程序映射到WebSpherePortal应用程序服务器(如图4所示):

图4.映射模块到应用程序服务器

完成向导之后,可以看到一条消息,告知应用程序已经成功安装。选择“Savetomasterconfiguration”链接并单击Save按钮保存所做的修改。

运行即时消息处理程序
要启动IMTranslator即时消息处理程序,首先要导航到ApplicationsEnterpriseApplications。选择IMTranslatorProj应用程序并单击Start按钮。状态符号(statussymbol)的变化表示该应用程序已经启动了。与该处理程序有关的消息记录在WebSpherePortal标准输出和标准错误日志文件中,该文件位于C:/WebSphere/PortalServer/log目录下。

启动消息处理程序后,就可以与另一个用户打开聊天会话。英语消息在传递给接收方之前将被翻译成西班牙语,反之亦然。比如图5中显示的消息:

图5.西班牙语消息

显示给接受方的内容如图6所示:

图6.翻译成英语的消息

前已述及,该应用程序还可以进一步扩展,根据消息接收方的首选语言(通常保存在LDAP服务器中)进行翻译。

结束语
WorkplaceProductsAPIToolkit中的InstantMessagingSPI允许开发人员在消息发送到接收方之前截获和处理该消息,从而可以完成消息记录、监控和翻译这样一些功能。本文中描述了使用RationalApplicationDeveloperV6.0这类开发环境创建实现MessagingListener接口的servlet,将即时消息从英语翻译成西班牙语需要的步骤。在servlet的init()方法中添加了将servlet注册为MessagingService监听程序的代码。destroy()方法包含删除servlet监听程序的代码。要实现MessageListener接口,servlet必须实现在消息送达前调用的onMessage()方法。利用IBMWebSphereTranslationServer翻译消息所需要的业务逻辑就是在该方法中处理的。最后,我们将这个servlet安装到WebSpherePortal应用程序服务器实例中。

总之,这是一个实现起来相当容易的应用程序。但这种不太复杂的servlet在多语言环境中可能很有用,可以作为InstantMessagingSPI强大功能的一个例证。

我们希望本文能给您帮助。为了清楚起见,本文的例子尽量保持简单,但是您完全可以在自己的即时消息传递应用程序中发挥创造力,实现更多的功能。

来源:互连网
友情链接
北极星工程招聘网北极星电气招聘网北极星火电招聘网北极星风电招聘网北极星水电招聘网北极星环保招聘网北极星光伏招聘网北极星节能招聘网招标信息分类电子资料百年建筑网PLC编程培训

广告直拨:   媒体合作/投稿:陈女士 13693626116

关于北极星 | 广告服务 | 会员服务 | 媒体报道 | 营销方案 | 成功案例 | 招聘服务 | 加入我们 | 网站地图 | 联系我们 | 排行

京ICP证080169号京ICP备09003304号-2京公网安备11010502034458号电子公告服务专项备案

网络文化经营许可证 [2019] 5229-579号广播电视节目制作经营许可证 (京) 字第13229号出版物经营许可证新出发京批字第直200384号人力资源服务许可证1101052014340号

Copyright © 2022 Bjx.com.cn All Rights Reserved. 北京火山动力网络技术有限公司 版权所有