gdaniels    02/04/22 11:06:54

  Added:       java/test/concurrency PackageTests.java
                        TestApplicationScope.java TestService.java
  Log:
  Add test for application scope.
  
  Revision  Changes    Path
  1.1                  xml-axis/java/test/concurrency/PackageTests.java
  
  Index: PackageTests.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package test.concurrency;
  
  import junit.framework.Test;
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  
  /**
   *  Test package for concurrency tests
   */
  public class PackageTests extends TestCase {
  
      public PackageTests(String name) {
          super(name);
      }
  
      public static Test suite() throws Exception {
          TestSuite suite = new TestSuite();
  
          suite.addTestSuite(TestApplicationScope.class);
  
          return suite;
      }
  }
  
  
  
  1.1                  xml-axis/java/test/concurrency/TestApplicationScope.java
  
  Index: TestApplicationScope.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package test.concurrency;
  
  import junit.framework.TestCase;
  import org.apache.axis.configuration.BasicServerConfig;
  import org.apache.axis.server.AxisServer;
  import org.apache.axis.providers.java.RPCProvider;
  import org.apache.axis.handlers.soap.SOAPService;
  import org.apache.axis.transport.local.LocalTransport;
  import org.apache.axis.client.Call;
  import org.apache.axis.client.Service;
  import org.apache.axis.AxisFault;
  
  /**
   * Test the "application" scope option - lots of threads call the same service
   * multiple times, and we confirm that only a single instance of the service
   * object was created.
   *
   * @author Glen Daniels ([EMAIL PROTECTED])
   */
  public class TestApplicationScope extends TestCase {
      private BasicServerConfig config;
      private AxisServer server;
      private String SERVICE_NAME = "TestService";
  
      public TestApplicationScope(String s) {
          super(s);
      }
  
      protected void setUp() throws Exception {
          config = new BasicServerConfig();
          server = new AxisServer(config);
  
          // Deploy a service which contains an option that we expect to be
          // available by asking the MessageContext in the service method (see
          // PropertyHandler.java).
  
          RPCProvider provider = new RPCProvider();
          SOAPService service = new SOAPService(provider);
          service.setName(SERVICE_NAME);
          service.setOption("className", TestService.class.getName());
          service.setOption("scope", "application");
          service.setOption("allowedMethods", "*");
          config.deployService(SERVICE_NAME, service);
      }
  
      public class TestRunnable implements Runnable {
          private int reps;
  
          public TestRunnable(int reps) {
              this.reps = reps;
          }
  
          public void run() {
              LocalTransport transport = new LocalTransport(server);
              transport.setRemoteService(SERVICE_NAME);
              Call call = new Call(new Service());
              call.setTransport(transport);
  
              for (int i = 0; i < reps; i++) {
                  try {
                      String ret = (String)call.invoke("hello", null);
                      if (!ret.equals(TestService.MESSAGE)) {
                          setError(new Exception("Messages didn't match!"));
                          return;
                      }
                  } catch (AxisFault axisFault) {
                      setError(axisFault);
                      return;
                  }
              }
          }
      }
  
      private Exception error = null;
      synchronized void setError(Exception e) {
          if (error == null) {
              error = e;
          }
      }
  
      public void testApplicationScope() throws Exception {
          int threads = 50;
          int reps = 10;
  
          ThreadGroup group = new ThreadGroup("TestThreads");
  
          for (int i = 0; i < threads; i++) {
              TestRunnable tr = new TestRunnable(reps);
              Thread thread = new Thread(group, tr, "TestThread #" + i);
              thread.start();
          }
  
          while (group.activeCount() > 0 && error == null) {
              Thread.sleep(100);
          }
  
          if (error != null) {
              throw error;
          }
      }
  }
  
  
  
  1.1                  xml-axis/java/test/concurrency/TestService.java
  
  Index: TestService.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package test.concurrency;
  
  /**
   * An Axis service to test application scope.  There should be exactly one
   * instance of this class, if we end up with more then application scope
   * isn't working correctly.
   *
   * @author Glen Daniels ([EMAIL PROTECTED])
   */
  public class TestService {
      private static TestService singleton = null;
      public static final String MESSAGE = "Hi there, come here often?";
  
      public TestService() throws Exception {
          if (singleton != null) {
              // We're not the first/only one, so throw an Exception!
              throw new Exception("Multiple instances of TestService created!");
          }
  
          singleton = this;
      }
  
      public String hello() {
          return MESSAGE;
      }
  }
  
  
  


Reply via email to