清单 6. HelloWorldImpl.java:服务的 Java 实现
package helloworld;
import java.rmi.RemoteException;
import org.osoa.sca.annotations.Service;
import commonj.sdo.DataObject;
import commonj.sdo.helper.DataFactory;
/**
* This class implements the HelloWorld service.
*/
@Service(HelloWorldService.class)
public class HelloWorldImpl implements HelloWorldService {
DataFactory dataFactory = DataFactory.INSTANCE;
public commonj.sdo.DataObject getGreetings(String name) throws RemoteException {
DataObject person = dataFactory.create("http://helloworld", "Person");
String[] names = name.split(" ");
person.setString("firstName", names[0]);
person.setString("lastName", names[1]);
person.setString("greeting", "Hello");
return person;
}
}
清单 6 中的代码显示了 HelloWorldService 接口的实现,可允许服务使用者使用个人的全名调用 getGreetings 操作或方法。该代码预期接受包含该人的问候消息的 SDO。
在此 getGreetings(String) 方法中,将使用 DataFactory.create 方法并传入命名空间(在 WSDL 中定义)及类型的名称(在本例中为 Person)来创建新 SDO。这将创建 Person 类型的 SDO。然后使用 commonj.sdo.DataObject 提供的 API 来设置 Person 类型的属性。
HelloWorld Web 客户机——Web 服务使用者
在清单 7 中所示的 Web 服务应用程序的客户机部分中,HelloWorld.jsp 首先使用 HTML <Form> 标记提示用户输入名称。输入了用户全名后,JSP 会转向 Web 服务提供者 (HelloWorldService) 检索用户的问候信息并进行显示。为此,JSP 首先通过调用 CurrentCompositeContext.getContext() 来获取 SCA 组合的上下文。接下来,JSP 按照在 default.scdl 中定义的 SCA 组件名称查找 HelloWorldService。然后,JSP 调用前面部分中描述的 getGreetings 操作。将向 JSP 返回包含三个属性(firstName、lastName 和 greeting)的动态 SDO,以向用户显示。
清单 7. HelloWorld.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" session="true" autoFlush="true"
isThreadSafe="true" isErrorPage="false"
import="java.lang.reflect.Method"
import="java.io.PrintWriter"
import="java.io.StringWriter"
import="org.osoa.sca.CurrentCompositeContext"
import="org.osoa.sca.CompositeContext"
import="commonj.sdo.DataObject"
import="commonj.sdo.helper.XSDHelper"
import="helloworld.HelloWorldService"
%>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<META name="GENERATOR" content="IBM Software Development Platform">
<TITLE>HelloWorld Dynamic SDO Web Application Sample</TITLE>
<%
String name = request.getParameter("name");
%>
</HEAD>
<BODY>
<H2>HelloWorld Dynamic SDO Web Application Sample</H2>
<P> </P>
<FORM action="HelloWorld.jsp" method="get">Name
please: <INPUT type="text" id="i1" name="name"
size="40" maxlength="220"
value="<%= null == name ? "John Doe" : name %>"> <BR>
<BR>
<INPUT type="submit" name="submit" value="Submit"></FORM>
<BR>
<%
try {
if (null != name) {
CompositeContext compositeContext = CurrentCompositeContext.getContext();
System.out.println("compositeContext is: " + compositeContext);
// Locate the HelloWorld service
HelloWorldService helloworldService =
(HelloWorldService)compositeContext.locateService
(HelloWorldService.class, "HelloWorldServiceComponentDSDOClient");
// Invoke the HelloWorld service
DataObject person =
<HR>
<P><%=person.get("greeting")%> <%=person.get("firstName")%>
<%=person.get("lastName")%>!!!!
<%}
}catch(Exception e){
e.printStackTrace();
StringWriter sw= new StringWriter();
PrintWriter pw= new PrintWriter(sw);
e.printStackTrace(pw);
pw.flush();
%>
Whoops!<BR clear="all">
<PRE>
Exception "<%=e.getClass().getName()%>"
Exception message: "<%=e.getMessage()%>"
<BR clear="all">
<%=sw.toString() %>
</PRE>
<%
}%>
</BODY>
</HTML>
为了从动态 SDO 检索属性,必须按照与创建数据对象时设置属性类似的方法使用 commonj.sdo.DataObject 接口提供的 API。
运行示例应用程序的步骤
随本文提供的 hwddynamicsdo-service.jar 和 hwddynamicsdo-reference.war 示例应用程序包含 HelloWorld Web 服务及客户机应用程序的源代码和二进制文件,可以将其部署在 IBM WebSphere Application Server Version 6.1 Feature Pack for SOA 的 Beta1 版上。示例应用程序提供了本文中的概念的工作示例,遵循了图 2 中所示的关系图。下面的步骤说明了如何安装和运行这些应用程序。在此示例中,WebSphere 实例使用 9080 缺省端口作为 HTTP 端口。(请参见下面的说明。)
要安装 HelloWorld Web 服务应用程序,请执行以下步骤:
安装 WAS 6.1。
安装 IBM WebSphere Application Server Version 6.1 Feature Pack for SOA 的 Beta1 版。
将 hwddynamicsdo-service.jar 下载到 <WAS_ROOT>/installableApps 目录,如 C:/WebSphere/AppServer/installableApps。
使用以下步骤安装 HelloWorld Web 服务应用程序:
运行 wsadmin –lang jython –conntype NONE,以进入 wsadmin 控制台。
运行 AdminTask.listBLAs(),以列出所有已安装的 SOA 应用程序。
运行 AdminTask.createBLA(‘-name hwdsdo –source C:/WebSphere/AppServer/installableApps/hwddynamicsdo-service.jar’),以安装应用程序。
运行 AdminConfig.save(),以保存已安装的应用程序配置。
如果需要删除已安装的 SOA 应用程序,请运行 AdminTask.deleteBLA(‘-blaID WebSphere_appName=hwdsdo’)。
启动服务器。
将浏览器指向 http://localhost:9080/HWWSSDO/services。浏览器应该显示图 3 中所示的页面。这表明 HelloWorld Web 服务应用程序在正确运行。
图 3. 正在运行的 HelloWorld Web 服务
要安装 HelloWorld Web 客户机应用程序,请执行以下步骤:
将浏览器指向 http://localhost:9060/ibm/console/,以启动 WebSphere 管理控制台。
登录后,选择 Applications,然后选择 Install New Application。这将安装 <WAS_ROOT>/installableApps/hwddynamicsdo-reference.war 中的 HelloWorld Web 客户机应用程序,如图 4 中所示。接受所有安装缺省设置。
选择 Applications,然后选择 Enterprise Applications,以启动应用程序。选中 hwddynamicsdo-reference.war 旁边的复选框,然后单击页面顶部的 Start。
将浏览器指向 http://localhost:9080/hwddynamicsdo。
单击 Submit。将看到图 5 中所示的页面。
图 4. HelloWorld Web 客户机应用程序安装
图 5. 运行 HelloWorld Web 客户机的结果
结束语
本文简要介绍了服务数据对象,说明了 SDO 的动态和静态数据 API 间的主要区别,并重点说明了使用动态 SDO 来将数据从 Web 服务提供者传输到客户机的应用程序的要点。另外还提供了可部署在 WebSphere Application Server Version 6.1 Feature Pack for SOA 的 Beta1 版上的一个示例应用程序,还对此技术进行了说明。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
SAP收购CallidusCloud 与Salesforce竞争
一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]
-
事件驱动框架和SOA在空军的应用
空军正在利用SOA来改善数据共享,并实时跟踪战机,美国空军机动司令部的Michael Marek解释了企业可从中学习的经验。
-
揭秘New Relic APM技术细节
New Relic应性能管理(APM)套件主要用于Web软件开发。它允许用户在面向服务的架构(SOA)上跟踪关键事务性能,并且支持代码级别的可见性来评估特定代码段和SQL语句对性能的影响
-
仅凭SOA和云无法解决业务数据管理风险问题
SOA和云可以是某些恼人问题高效的解决方案;这一点我们已经知道了。但是也要记住它们并不是所有事情的直接答案,特别是当你的问题是业务数据管理风险,而不是技术问题时。