在 Web服务中使用 SDO 动态数据 API(四)

日期: 2007-12-13 来源:TechTarget中国

  清单 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>&nbsp;</P>

<FORM action="HelloWorld.jsp" method="get">Name
    please:&nbsp;&nbsp;&nbsp; <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")%>&nbsp;<%=person.get("firstName")%>
&nbsp;<%=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

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • SAP收购CallidusCloud 与Salesforce竞争

    一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]

  • 事件驱动框架和SOA在空军的应用

    空军正在利用SOA来改善数据共享,并实时跟踪战机,美国空军机动司令部的Michael Marek解释了企业可从中学习的经验。

  • 揭秘New Relic APM技术细节

    New Relic应性能管理(APM)套件主要用于Web软件开发。它允许用户在面向服务的架构(SOA)上跟踪关键事务性能,并且支持代码级别的可见性来评估特定代码段和SQL语句对性能的影响

  • 仅凭SOA和云无法解决业务数据管理风险问题

    SOA和云可以是某些恼人问题高效的解决方案;这一点我们已经知道了。但是也要记住它们并不是所有事情的直接答案,特别是当你的问题是业务数据管理风险,而不是技术问题时。