SCA 之Tuscany 3 ——helloworld WebApp

来源:互联网 发布:图片推荐算法 编辑:程序博客网 时间:2024/04/30 11:53

  同REST的风格相对比,在使用webapp上,jsp内的java代码直接引用component进行返回值。这个和MVN的办法很不一样。

 一、布局


 二、web.xml内容,配置Tuscany监听和部署。

   

<web-app version="2.4"         xmlns="http://java.sun.com/xml/ns/j2ee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >  <display-name>Apache Tuscany Helloworld Sample</display-name>  <filter>    <filter-name>tuscany</filter-name>     <filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class>   </filter>  <filter-mapping>    <filter-name>tuscany</filter-name>     <url-pattern>/*</url-pattern>   </filter-mapping>  <welcome-file-list id="WelcomeFileList">      <welcome-file>hello.jsp</welcome-file>  </welcome-file-list></web-app>

待我们运行mvn jetty:run时,可发现在“webapp/WEB-INF/sca-contributions”内的组件被部署了:


三、Pom

<?xml version="1.0" encoding="UTF-8"?><!-- * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements.  See the NOTICE file * distributed with this work for additional information * regarding copyright ownership.  The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License.  You may obtain a copy of the License at *  *   http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied.  See the License for the * specific language governing permissions and limitations * under the License.    --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">   <modelVersion>4.0.0</modelVersion>   <parent>      <groupId>org.apache.tuscany.sca.samples</groupId>      <artifactId>tuscany-samples</artifactId>      <version>2.0-SNAPSHOT</version>      <relativePath>../../pom.xml</relativePath>   </parent>   <artifactId>helloworld-webapp</artifactId>   <version>2.0-SNAPSHOT</version>   <name>Apache Tuscany SCA Samples Helloworld WebApp</name>   <packaging>war</packaging>   <properties>      <tuscany.version>${project.version}</tuscany.version>   </properties>   <!-- ASF repositories so sample can be built from SVN without building trunk-->   <repositories><repository>       <id>apache.snapshots</id>       <name>Apache Snapshot Repository</name>       <url>http://repository.apache.org/snapshots</url>       <releases><enabled>false</enabled></releases>   </repository></repositories>   <pluginRepositories><pluginRepository>       <id>apache.snapshots</id>       <name>Apache Snapshot Repository</name>       <url>http://repository.apache.org/snapshots</url>       <releases><enabled>false</enabled></releases>   </pluginRepository></pluginRepositories>   <dependencies>      <dependency>         <groupId>org.apache.tuscany.sca</groupId>         <artifactId>tuscany-base-runtime</artifactId>         <version>${tuscany.version}</version>      </dependency>               <dependency>         <groupId>junit</groupId>         <artifactId>junit</artifactId>         <version>4.8.1</version>         <scope>test</scope>      </dependency>      <dependency>         <groupId>net.sourceforge.htmlunit</groupId>         <artifactId>htmlunit</artifactId>         <version>2.6</version>         <scope>test</scope>         <exclusions>             <exclusion>                 <groupId>xalan</groupId>                 <artifactId>xalan</artifactId>             </exclusion>          </exclusions>              </dependency>      <!-- replace HTMLUnit dependency with verstion that Tuscany is using -->      <dependency>          <groupId>xalan</groupId>          <artifactId>xalan</artifactId>          <version>2.7.0</version>          <scope>test</scope>          <exclusions>             <exclusion>                 <groupId>xml-apis</groupId>                 <artifactId>xml-apis</artifactId>             </exclusion>                                        </exclusions>                  </dependency>     </dependencies>    <build>       <plugins>          <!-- this copies the SCA contribution from the helloworld sample into this webapp -->          <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-dependency-plugin</artifactId>            <executions>              <execution>                <id>copy</id>                <phase>compile</phase>                <goals>                  <goal>copy</goal>                </goals>                <configuration>                   <artifactItems>                     <artifactItem>                       <groupId>org.apache.tuscany.sca.samples</groupId>                       <artifactId>helloworld</artifactId>                       <version>${project.version}</version>                       <!-- should really go in the target folder but i can't get jetty:run or tomcat:run to work using that -->                       <outputDirectory>src/main/webapp/WEB-INF/sca-contributions</outputDirectory>                     </artifactItem>                   </artifactItems>                </configuration>              </execution>            </executions>          </plugin>          <!-- to support running thw webapp with mvn tuscany:run -->         <plugin>            <groupId>org.apache.tuscany.sca</groupId>            <artifactId>tuscany-maven-plugin</artifactId>            <version>${tuscany.version}</version>         </plugin>          <!-- to support using mvn jetty:run and also to run the webapp for the integration test -->          <plugin>             <groupId>org.mortbay.jetty</groupId>             <artifactId>maven-jetty-plugin</artifactId>             <version>6.1.26</version>             <configuration>                <contextPath>helloworld-webapp</contextPath>                <stopKey>foo</stopKey>                <stopPort>9999</stopPort>             </configuration>             <executions>                <execution>                   <id>start-jetty</id>                   <phase>process-test-classes</phase>                   <goals>                       <goal>run</goal>                   </goals>                   <configuration>                       <scanIntervalSeconds>0</scanIntervalSeconds>                       <daemon>true</daemon>                       <connectors>                          <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">                             <port>8085</port>                          </connector>                       </connectors>                   </configuration>                </execution>                <execution>                   <id>stop-jetty</id>                   <phase>prepare-package</phase>                   <goals>                       <goal>stop</goal>                   </goals>                </execution>             </executions>          </plugin>          <!-- to support using mvn tomcat:run -->          <plugin>             <groupId>org.codehaus.mojo</groupId>             <artifactId>tomcat-maven-plugin</artifactId>             <version>1.1</version>          </plugin>       </plugins>    </build></project>

可见其添加了Tuscany 支持、jetty支持、tomcat支持。

四、web构件定义:

<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"           xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"           targetNamespace="http://samples"           name="Helloworld">    <component name="foo">        <implementation.web web-uri=""/>        <reference name="service" target="HelloworldComponent"/>    </component></composite>

我们定义了reference service来调用其他的component。

五、JSP内的调用

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://www.osoa.org/sca/sca_jsp.tld" prefix="sca" %><sca:reference name="service" type="sample.Helloworld" /><html>  <body >    <h2>Apache Tuscany Helloworld JSP Sample</h2>    Calling HelloworldService sayHello("world") returns:    <p>    <%= service.sayHello(",Liang.") %>  </body></html>

六、运行结果