SCA 之Tuscany 3 ——helloworld WebApp

  同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>

六、运行结果







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值