SCA开发:开发示例 SCA 应用程序(三)

日期: 2007-12-13 作者:Sreedevi Penugonda 来源:TechTarget中国

  创建 innovasolutions.webclientmodule

  在此部分,我们将创建 Innova Solutions Web 应用程序,以访问名为 payroll service 的外部服务,此服务使用了本地服务组件、SCA 范围管理、JSP 和 Servlet。Innova Solutions Web 应用程序允许其员工登录并使用范围确定为 HTTP 会话的本地服务跟踪自己的概要,还向其提供了对工资单系统的访问和显示他们每月的工资单。它将首先把用户导航到登录页,然后前进到工资单系统,在其中显示每月的工资单。

  以下各个部分将说明如何创建 InnovaSolutions Web 应用程序外部的各个 SCA 服务,即 login、user profile 和 payroll。然后我们将了解如何由 Servlet、JSP 和标记库访问这些服务,以提供用户界面。

  我们将首先实现 LoginServiceImpl,此服务负责将用户登录到应用程序中。LoginServiceImpl 提供服务 LoginService,该服务在 innovasolutions.webclientmodule 中向员工提供 LoginService 接口。

  首先,我们创建名为 services/profile 的子文件夹,并将属于 LoginServiceImpl 实现的所有文件放入其中。

  清单 15 显示了 LoginService Java 接口。

  清单 15. LoginService Java 接口
       
package services.profile;
public interface LoginService{
public static final int SUCCESS = 1;
                  public static final int INVALID_LOGIN = -1;
public static final int INVALID_PASSWORD = -2;
public int login(String employeeID, String password);
}

  接下来,编写实现 LoningService 接口的 LoginServiceImpl Java 实现,该实现使用其接口 profileservice 引用本地服务。

  清单 16 给出了 LoginServiceImpl Java 实现。

  清单 16. LoginServiceImpl Java 实现
 
package services.profile;
import org.osoa.sca.annotations.Service;
import org.osoa.sca.annotations.Reference;
@Service(LoginService.class)
public class LoginServiceImpl implements LoginService{
@Reference
private ProfileService profileService;
public int login(String employeeID, String password) { …. }
}

  上面的 LoginServiceImpl 实现了 LoginService 接口,并使用其接口 profileservice 引用本地服务。

  Login Component:此处我们将通过配置 LoginServiceImpl 实现来创建 LoginServiceComponent。让我们看看显示包含 LoginServiceComponent 的 innovasolutions.webclientmodule 的 sca.module 文件的代码。

  清单 17 显示了 innovasolutions.webclientmodule 的 sca.module 文件。

  清单 17. innovasolutions.webclientmodule 的 sca.module 文件
 
<?xml version="1.0" encoding="ASCII"?>
<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
name="innovasolutions.webclientmodule">
<component name="LoginServiceComponent">
<implementation.java class="services.profile.LoginServiceImpl"/>
</component>
</module>

  Profile Service Implementation:在此部分,我们将简要地给出 profileServiceImpl,此实现提供了由接口 ProfileService 访问的服务。通过使用 ProfileService,可以在用户的 Web 应用程序内导航时跟踪用户状态。我们使用前面创建的子文件夹 services/profile 来放置组成 profileServiceImpl 实现的所有文件。

  profileService Java 接口使用 @Scope Annotation 来声明 ProfileServiceImpl 实例的范围由会话确定。
 
  清单 18 显示了 ProfileService Java 接口。

  清单 18. ProfileService Java 接口
   
package services.profile;
import org.osoa.sca.annotations.Scope;
@Scope("session")
public interface ProfileService{
public String getFirstName();
public void setFirstName(String pName);
public String getLastName();
public void setLastName(String pName);
public boolean isLoggedIn();
public void setLoggedIn(boolean pStatus);
public String getId();
public void setId(String pId);
}

  ProfileServiceImpl 实现了 ProfileService Java 接口。清单 19 说明了 ProfileServiceImpl Java 实现。

  清单 19. ProfileServiceImpl Java 实现
   
package services.profile;
import org.osoa.sca.annotations.Property;
import org.osoa.sca.annotations.Scope;
import org.osoa.sca.annotations.Service;
@Service(ProfileService.class")
@Scope("session")
public class ProfileServiceImpl implements ProfileService{
@Property
private String firstName;
. . . . . .
}
}
 
  Profile Service Component:现在我们将清单 20 中所示的代码片段添加到 innovasolutions.webclientmodule 的 sca.module 文件中,从而创建 ProfileServiceComponent。

  清单 20. 添加了额外代码行的 sca.module 文件

<component name="ProfileServiceComponent">
<implementation.java class="services.profile.ProfileImpl"/>
<properties>
<v:firstName>Anonymous</v:firstName>
</properties>
</component>

  清单 21 显示了在 component 元素下添加的三行代码 LoginServiceComponent。

  清单 21. LoginServiceComponent
 
<references>
<v:profileService>ProfileServiceComponent</v:profileService>
</references>

  Payroll Service Web Service External Service:在此部分,我们将创建名为 PayrollService 的外部服务,该接口在 innovasolutions.webclientmodule 中向用户提供名为 PayrollService 的接口。

  我们首先创建一个名为 services/payroll 的子目录,以将 PayrollService 外部服务所需的所有文件放入其中。此外部服务提供一个 PayrollService.wsdl 文件。我们为 wsdl portType 创建对应的 Java 接口,即 PayrollService、PayrollStatement 和 PaySplitUP,以便在使用 PayrollService 时处理静态 Java 类型。

  最后,我们添加清单 22 中所示的代码,以在 innovasolutions.webclientmodule 的 sca.module 文件中创建名为 PayrollService 的外部服务。

  清单 22. 经过修改以创建 PayrollService 的 sca.module 文件
 
<externalService name="PayrollService">
<interface.java interface="services.account.PayrollService"/>
<binding.ws port="http://www.innovasolutions.com/PayrollService#
wsdl.endpoint(PayrollService/PayrollServiceSOAP)"/>
</externalService>

  Login HTML 页:login.html 页将当前用户的用户名和密码发送给 login Servlet。

  Login Servlet:login Servlet 处理从 login.html 获得的用户名和密码,并使用 ModuleContext API 调用 login 本地服务。CurrentModuleContext.getContext() 返回当前的模块上下文,并随后调用 locateService("LoginServiceComponent") 查询本地服务。

  Payroll Statement JSP: PayrollStatement.JSP 显示 payroll 服务返回的员工的所有工资单信息。为了让 Payroll Statement 页不受实现细节的限制,Payroll Statement.jsp 使用了一系列 JSP 标记,即 login 标记、service 标记和 payroll status 标记。

  部署

  以下部分对子系统构件进行说明。

  创建 innovasolutions.payrollsubsystem

  在此部分,我们将创建 innovasolutions.payrollsubsystem,此子系统对 innovasolutions.payroll 模块进行配置。首先,在文件系统中创建名为 innovasolutions.payrollsubsystem 的文件夹,并在根目录放置 sca.subsystem 文件。

  清单 23 显示了 innovasolutions.payrollsubsystem 的 sca.subsystem 文件。

  清单 23. innovasolutions.payrollsubsystem 的 sca.subsystem 文件

<?xml version="1.0" encoding="ASCII"?>
<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9"
       name="innovasolutions.payrollsubsytem">
<moduleComponent
   name="PayrollModuleComponent"module="innovasolutions.payrollmodule"/>
</subsystem>

  创建 innovasolutions.webclientsubsystem

  在此部分,我们将创建 innovasolutions.webclientsubsystem,此子系统对 innovasolutions.webclient 模块进行配置。首先,在文件系统中创建名为 innovasolutions.webclientsubsystem 的文件夹,并在根目录放置一个 sca.subsystem 文件。

  清单 24 显示了 innovasolutions.webclientsubsystem 的 sca.subsystem 文件。

  清单 24. innovasolutions.webclientsubsystem 的 sca.subsystem 文件
   
<?xml version="1.0" encoding="ASCII"?>
<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9"
    xmlns_v="http://www.osoa.org/xmlns/sca/values/0.9"
    name="innovasolutions.webclientsubsytem">
<moduleComponent name="WebClientModuleComponent"
module="innovasolutions.webclientmodule">
<references>
<v:PayrollService>innovasolutions.payrollsunbsystem/
PayrollModuleComponent/PayrollService</v:PayrollService>
</references>
</moduleComponent>
</subsystem>

  结束语

  我们已经演示了应用程序 Innova Solutions 开发过程,以帮助您使用 SCA 客户机和实现模型利用 Java 编程语言构建和集成应用程序。SCA 应用程序提供了服务的可移植性、可重用性和灵活性,从而将开发人员从中间件编程的复杂性中解放出来。

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐