SCA Java 开发指南

日期: 2008-01-24 作者:姜晓东 来源:TechTarget中国

  本文是JAVA SCA项目的指导文档。

  一般指南
  获得源代码
  设置你的开发环境
  构建二进制和源代码分发包
  导入SCA模块到开发环境
  理解SCA代码路径
  编码指南
  测试
  Maven构建结构
  开发提示
  为Webapp示例建立Eclipse WTP Web工程
  在示例中为Ant创建依赖性

  一般指南

  欢迎大家到Tuscany SCA子项目。我们期待着您的参与并尽力帮助您上手。您可以在邮件列表自由的提问。

  这里是一些我们使用在项目中的一般性指导方针。

  JAVA SCA子项目的目标是提供基于SCA的企业级服务架构。
  Tuscany SCA不仅仅是一个参考实现。我们鼓励基于SCA规范的创新。我们所做的很多工作是对SCA规范的回馈。
  JAVA SCA架构应该提供伸缩性和选择性。它不应该限定编程模式,但支持很多。
  JAVA SCA架构是非常灵活的模块化设计,而且高度可扩展,因此用户可以定制,以适应用户的需求。

  获得源代码

  JAVA SCA项目的Subversion仓库地址是:https://svn.apache.org/repos/asf/incubator/tuscany/java/sca.

  也可通过以下地址浏览: http://svn.apache.org/viewvc/incubator/tuscany/java/

  任何人都可以签出代码,你只需要指定一个用户名和密码,以更新Subversion库,不过只有Tuscany开发组成员可以这样做。

  从Subversion签出代码

  使用以下命令(注意它使用的是HTTP协议,如果你需要更新它则需要换成https):

svn checkout http://svn.apache.org/repos/asf/incubator/tuscany/java/sca
提交变更到Subversion
  Tuscany开发组成员需要一个svn.apache.org上的帐户,在提交之前,你需要设定一个Subversion账户密码。要设置密码,你需要登入svn.apache.org并且执行svnpasswd命令。一旦设置好了密码,你就可以使用如下命令提交你的修改了:

  svn commit

  如果Subversion无法识别你的用户名,你可以明确的进行指定:

  svn –username <name> commit
  Subversion会询问你的密码,你输入了密码系统就会记住它。注意这是通过scnpasswd设置的svn库密码,而不是Shell或其他密码。

  设置开发环境
  先决条件

  JAVA SCA需要:

  JDK 5.0+ (J2SE 1.5.0+)
  Apache Maven (2.0.5)
  Subversion (1.2+)

  构建树结构

  构建树是设计用来促进模块化开发和发布。Maven模块是按它们发布的层次进行分组的。JAVA SCA目前的模块结构是:

  -java
   |– sca
     |– demos                SCA 演示程序
     |– distribution         SCA 分发包
     |– itest                SCA 集成测试
     |– modules              SCA 实现模块 (内核, 运行时, 分发包, 扩展,   etc)
     |– samples              SCA 示例程序
     |– tools                SCA 工具 (Eclipse plugins, wsdl2java,   java2wsdl, etc)
     |– tutorial             SCA 教程

  个别模块可独立编译,或者按照从上至下的顺序编译。

  自顶向下的构建(推荐的模式)
  签出全部JAVA源代码

  svn checkout http://svn.apache.org/repos/asf/incubator/tuscany/java
创建SCA源代码是很简单的。

  cd java/sca
  mvn

  即使你从一个本地的Maven空库开始,它就应该会工作。但是呢,如果你是第一次进行编译Tuscany的话,将需要下载很多它所依赖的库,所以,第一次编译可能会需要稍长一点的时间,或许它还会因为第三方库的原因编译失败。

  从远程Maven库下载的时候有可能因为网络方面而定原因而出现问题,这时尝试重新下载可以解决这种问题。

  主干代码有可能因为你本地的第三JAR包过期而出现构建出错,这时可以尝试更新本地库。

  mvn -U

  一旦你完成了自顶向下的构建,并且你更新了本地的maven仓库,这时你可以离线使用Maven以加速构建速度。

  mvn -o

  编译二进制和源代码发布包
  二进制和源代码的分发包是通过在发布目录使用Maven创建的,例如:

  cd java/sca/distribution
  mvn clean install -o

  这些发布文件也可以在发布文件夹的target文件夹找到。

  导入SCA模块到开发环境IDE
  使用Eclipse

  如果这时你第一次在你的workspace使用maven m2本地库,你可能需要在Eclipse进行设置仓库文件夹的位置,你可以通过如下命令完成:

  mvn -Declipse.workspace=[path-to-eclipse-workspace] eclipse:add-maven-repo
  要产生必需的工程文件以将SCA模块导入Eclipse,你可以使用maven的Eclipse插件:

  cd java/sca
  mvn -Peclipse eclipse:eclipse

  现在,启动Eclipse,依次点击菜单:File->Import->Existing projects into Workplace,接下来选择SCA基目录,然后点击Finish按钮,现在应该已经将SCA模块导入到你的Eclipse工作空间了。

  理解SCA代码路径

  这里有一个关于关键方法/函数的教程,以帮助你快速上手SCA的开发。

  代码指南

  下面是一些在JAVA SCA开发中的指南:

  在 Sun Java coding standards 提到的是基本的编码方式,但主要问题是要符合现行规则,所以举例来说,如果你更新一个括号在同一行的方法,则不要使用竖括号的方式添加代码。  

  始终在所有的文件头包含Apache的授权信息(包括源代码文件和资源文件例如XML文档)

  为签入的文件包含一个描述信息,例如“解决一个××问题”
  命名规则,以增加一致性
  文件夹名称:请在文件夹命名中使用全部小写和连接符(像JAR文件名称那样)

  Maven标识ID:tuscany-<文件夹名称>

  包名称:模块内的包名称应该包括模块名,这样在源代码树可以更容易的定位。因此,举例来说,java/sca/module/implementation-java 会在以下包结构中:org.apache.tuscany.implementation.java.*.

  测试

  Tuscany使用简单的Junit测试用例去做单元和集成测试,并且在大部分用例中,它们被配置成符合**/*TestCase.java 文件命名规则。正因为如此,如果你的测试用例使用一个完全不同的名称,你可能可以在你的IDE中可以执行它,但Maven会无法识别从而无法编译执行。

  /**
   * Description of your test case and necessary details you find necessary
 */
public class YourTestCase extends TestCase {
    private SCADomain domain;
    private YourService service;

    @Override
    protected void setUp() throws Exception {
        domain = SCADomain.newInstance("YourTest.composite");
        service = domain.getService(YourService.class, "serviceName");
    }

    @Override
    protected void tearDown() throws Exception {
        domain.close();
    }

   …
}

  注意

  Maven构建结构
  我们使用模块这个术语来指maven树的一个节点。

  sca/pom.xml的父节点为pom/parent/pom.xml
  其他Pom会使用它的父文件夹中的Pom作为自己的父Pom
Group id: org.apache.tuscany.sca 
  我们模块的版本会在java/sca/pom.xml中进行指定,子poms因为它们是从它们的父节点获取的因此不需要指定版本
  poms命名始自Apache Tuscany SCA
  使用mvn -Peclipse eclipse:eclipse命令为所有构建模块创建Eclipse工程
添加一个新模块,但并不准备整合?
  ’work-in-progress’ 模块可以在同一个源代码树上工作并且在自顶向下的构建中并不中断,你可以通过不把你的模块列在java/sca/modules/pom.xml实现这一点。

  开发提示

  为Webapp示例建立Eclipse WTP Web工程
  如果你正在使用Eclipse WTP,并希望让WTP WEB工程产生我们Webapp中的示例,你可以简单的-Dwtpversion=1.5 选项到mvn eclipse:eclipse命令,正如这样:

  mvn -Dwtpversion=1.5 -Peclipse eclipse:eclipse

  神奇的-Dwtpversion=1.5 选项会在Maven
  pom.xml中使用<packaging>war</packaging>为Eclipse工程添加WTP WEB特性。你可以添加这些工程到一个WTP Tomcat或者Geronimo 服务器配置中,通过你的Eclipse工作区去发布和运行。

  在示例中为Ant创建依赖性
  计算出这些包的依赖关系以包含在Ant build.xml中是一件痛苦的事情,这里有一个快捷的脚本,可以在linux环境下处理War文件。

  jar tvf sample-feed-aggregator-webapp.war | grep .jar | awk ‘{ printf "%s ", $8 }’ | sed -e "s/WEB-INF/lib///" | awk ‘{ printf "<include name="%s"/> ", $1 }’ | grep -v tuscany

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国