stevel      2004/08/04 15:03:47

  Modified:    src/main/org/apache/tools/ant/taskdefs Rmic.java
               src/main/org/apache/tools/ant/taskdefs/rmic KaffeRmic.java
                        RmicAdapter.java RmicAdapterFactory.java
                        SunRmic.java WLRmic.java
               src/testcases/org/apache/tools/ant/taskdefs RmicTest.java
               docs/manual/CoreTasks rmic.html
  Added:       src/main/org/apache/tools/ant/taskdefs/rmic
                        ForkingSunRmic.java
               src/testcases/org/apache/tools/ant/taskdefs
                        RmicAdvancedTest.java
               src/etc/testcases/taskdefs/rmic rmic.xml
               src/etc/testcases/taskdefs/rmic/src RemoteTimestamp.java
                        RemoteTimestampImpl.java
  Log:
  rmic gets a fork option. 
  
  Most of the changes here are actually adding tests, which was surprisingly 
hard work.
  
  Revision  Changes    Path
  1.56      +21 -15    ant/src/main/org/apache/tools/ant/taskdefs/Rmic.java
  
  Index: Rmic.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Rmic.java,v
  retrieving revision 1.55
  retrieving revision 1.56
  diff -u -r1.55 -r1.56
  --- Rmic.java 9 Mar 2004 16:48:06 -0000       1.55
  +++ Rmic.java 4 Aug 2004 22:03:46 -0000       1.56
  @@ -26,6 +26,7 @@
   import org.apache.tools.ant.Project;
   import org.apache.tools.ant.taskdefs.rmic.RmicAdapter;
   import org.apache.tools.ant.taskdefs.rmic.RmicAdapterFactory;
  +import org.apache.tools.ant.taskdefs.rmic.KaffeRmic;
   import org.apache.tools.ant.types.FilterSetCollection;
   import org.apache.tools.ant.types.Path;
   import org.apache.tools.ant.types.Reference;
  @@ -106,14 +107,17 @@
       private FileUtils fileUtils = FileUtils.newFileUtils();
   
       private FacadeTaskHelper facade;
  +    public static final String ERROR_UNABLE_TO_VERIFY_CLASS = "Unable to 
verify class ";
  +    public static final String ERROR_NOT_FOUND = ". It could not be found.";
  +    public static final String ERROR_NOT_DEFINED = ". It is not defined.";
  +    public static final String ERROR_LOADING_CAUSED_EXCEPTION = ". Loading 
caused Exception: ";
  +    public static final String ERROR_NO_BASE_EXISTS = "base does not exist: 
";
  +    public static final String ERROR_NOT_A_DIR = "base is not a directory:";
  +    public static final String ERROR_BASE_NOT_SET = "base attribute must be 
set!";
   
       public Rmic() {
  -        try {
  -            Class.forName("kaffe.rmi.rmic.RMIC");
  -            facade = new FacadeTaskHelper("kaffe");
  -        } catch (ClassNotFoundException cnfe) {
  -            facade = new FacadeTaskHelper("sun");
  -        }
  +        String facadeName=KaffeRmic.isAvailable()?"kaffe":"sun";
  +        facade = new FacadeTaskHelper(facadeName);
       }
   
       /**
  @@ -433,12 +437,14 @@
        */
       public void execute() throws BuildException {
           if (baseDir == null) {
  -            throw new BuildException("base attribute must be set!", 
getLocation());
  +            throw new BuildException(ERROR_BASE_NOT_SET, getLocation());
           }
           if (!baseDir.exists()) {
  -            throw new BuildException("base does not exist!", getLocation());
  +            throw new BuildException(ERROR_NO_BASE_EXISTS+baseDir, 
getLocation());
  +        }
  +        if ( !baseDir.isDirectory() ) {
  +            throw new BuildException(ERROR_NOT_A_DIR+baseDir, getLocation());
           }
  -
           if (verify) {
               log("Verify has been turned on.", Project.MSG_VERBOSE);
           }
  @@ -595,14 +601,14 @@
               }
               return isValidRmiRemote(testClass);
           } catch (ClassNotFoundException e) {
  -            log("Unable to verify class " + classname
  -                + ". It could not be found.", Project.MSG_WARN);
  +            log(ERROR_UNABLE_TO_VERIFY_CLASS + classname
  +                + ERROR_NOT_FOUND, Project.MSG_WARN);
           } catch (NoClassDefFoundError e) {
  -            log("Unable to verify class " + classname
  -                + ". It is not defined.", Project.MSG_WARN);
  +            log(ERROR_UNABLE_TO_VERIFY_CLASS + classname
  +                + ERROR_NOT_DEFINED, Project.MSG_WARN);
           } catch (Throwable t) {
  -            log("Unable to verify class " + classname
  -                + ". Loading caused Exception: "
  +            log(ERROR_UNABLE_TO_VERIFY_CLASS + classname
  +                + ERROR_LOADING_CAUSED_EXCEPTION
                   + t.getMessage(), Project.MSG_WARN);
           }
           // we only get here if an exception has been thrown
  
  
  
  1.16      +16 -1     
ant/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java
  
  Index: KaffeRmic.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- KaffeRmic.java    9 Mar 2004 16:48:41 -0000       1.15
  +++ KaffeRmic.java    4 Aug 2004 22:03:46 -0000       1.16
  @@ -21,6 +21,7 @@
   import java.lang.reflect.Method;
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Project;
  +import org.apache.tools.ant.util.facade.FacadeTaskHelper;
   import org.apache.tools.ant.types.Commandline;
   
   /**
  @@ -29,6 +30,7 @@
    * @since Ant 1.4
    */
   public class KaffeRmic extends DefaultRmicAdapter {
  +    public static final String RMIC_CLASSNAME = "kaffe.rmi.rmic.RMIC";
   
       public boolean execute() throws BuildException {
           getRmic().log("Using Kaffe rmic", Project.MSG_VERBOSE);
  @@ -36,7 +38,7 @@
   
           try {
   
  -            Class c = Class.forName("kaffe.rmi.rmic.RMIC");
  +            Class c = Class.forName(RMIC_CLASSNAME);
               Constructor cons = c.getConstructor(new Class[] 
{String[].class});
               Object rmic = cons.newInstance(new Object[] 
{cmd.getArguments()});
               Method doRmic = c.getMethod("run", null);
  @@ -56,6 +58,19 @@
                   throw new BuildException("Error starting Kaffe rmic: ",
                                            ex, getRmic().getLocation());
               }
  +        }
  +    }
  +
  +    /**
  +     * test for kaffe being on the system
  +     * @return
  +     */
  +    public static boolean isAvailable() {
  +        try {
  +            Class.forName(RMIC_CLASSNAME);
  +            return true;
  +        } catch (ClassNotFoundException cnfe) {
  +            return false;
           }
       }
   }
  
  
  
  1.15      +1 -1      
ant/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.java
  
  Index: RmicAdapter.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- RmicAdapter.java  9 Mar 2004 16:48:41 -0000       1.14
  +++ RmicAdapter.java  4 Aug 2004 22:03:46 -0000       1.15
  @@ -23,7 +23,7 @@
   import org.apache.tools.ant.util.FileNameMapper;
   
   /**
  - * The interface that all rmic adapters must adher to.
  + * The interface that all rmic adapters must adhere to.
    *
    * <p>A rmic adapter is an adapter that interprets the rmic's
    * parameters in preperation to be passed off to the compiler this
  
  
  
  1.14      +10 -3     
ant/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
  
  Index: RmicAdapterFactory.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- RmicAdapterFactory.java   9 Mar 2004 16:48:41 -0000       1.13
  +++ RmicAdapterFactory.java   4 Aug 2004 22:03:46 -0000       1.14
  @@ -27,6 +27,8 @@
    * @since 1.4
    */
   public class RmicAdapterFactory {
  +    public static final String ERROR_UNKNOWN_COMPILER = "Cannot find the 
compiler or class: ";
  +    public static final String ERROR_NOT_RMIC_ADAPTER = "Not an rmic 
adapter: ";
   
       /** This is a singleton -- can't create instances!! */
       private RmicAdapterFactory() {
  @@ -41,6 +43,8 @@
        * <li>kaffe = Kaffe's rmic
        * <li><i>a fully quallified classname</i> = the name of a rmic
        * adapter
  +     * <li>weblogic = weblogic compiler
  +     * <li>forking = Sun's RMIC by forking a new JVM
        * </ul>
        *
        * @param rmicType either the name of the desired rmic, or the
  @@ -57,6 +61,8 @@
               return new KaffeRmic();
           } else if (rmicType.equalsIgnoreCase("weblogic")) {
               return new WLRmic();
  +        } else if (rmicType.equalsIgnoreCase("forking")) {
  +            return new ForkingSunRmic();
           }
           return resolveClassName(rmicType);
       }
  @@ -76,10 +82,11 @@
               Object o = c.newInstance();
               return (RmicAdapter) o;
           } catch (ClassNotFoundException cnfe) {
  -            throw new BuildException(className + " can\'t be found.", cnfe);
  +            throw new BuildException(ERROR_UNKNOWN_COMPILER+className,
  +                    cnfe);
           } catch (ClassCastException cce) {
  -            throw new BuildException(className + " isn\'t the classname of "
  -                                     + "a rmic adapter.", cce);
  +            throw new BuildException(ERROR_NOT_RMIC_ADAPTER+className,
  +                    cce);
           } catch (Throwable t) {
               // for all other possibilities
               throw new BuildException(className + " caused an interesting "
  
  
  
  1.15      +18 -6     
ant/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
  
  Index: SunRmic.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- SunRmic.java      9 Mar 2004 16:48:41 -0000       1.14
  +++ SunRmic.java      4 Aug 2004 22:03:46 -0000       1.15
  @@ -33,6 +33,21 @@
    */
   public class SunRmic extends DefaultRmicAdapter {
   
  +    /**
  +     * name of the class
  +     */
  +    public static final String RMIC_CLASSNAME = "sun.rmi.rmic.Main";
  +
  +    /**
  +     * name of the executable
  +     */
  +    public static final String RMIC_EXECUTABLE = "rmic";
  +    public static final String ERROR_NO_RMIC_ON_CLASSPATH = "Cannot use SUN 
rmic, as it is not "
  +                                         + "available.  A common solution is 
to "
  +                                         + "set the environment variable "
  +                                         + "JAVA_HOME or CLASSPATH.";
  +    public static final String ERROR_RMIC_FAILED = "Error starting SUN rmic: 
";
  +
       public boolean execute() throws BuildException {
           getRmic().log("Using SUN rmic compiler", Project.MSG_VERBOSE);
           Commandline cmd = setupRmicCommand();
  @@ -43,7 +58,7 @@
                                                        Project.MSG_WARN);
   
           try {
  -            Class c = Class.forName("sun.rmi.rmic.Main");
  +            Class c = Class.forName(RMIC_CLASSNAME);
               Constructor cons
                   = c.getConstructor(new Class[]  {OutputStream.class, 
String.class});
               Object rmic = cons.newInstance(new Object[] {logstr, "rmic"});
  @@ -55,16 +70,13 @@
                                          (new Object[] {cmd.getArguments()}));
               return ok.booleanValue();
           } catch (ClassNotFoundException ex) {
  -            throw new BuildException("Cannot use SUN rmic, as it is not "
  -                                     + "available.  A common solution is to "
  -                                     + "set the environment variable "
  -                                     + "JAVA_HOME or CLASSPATH.",
  +            throw new BuildException(ERROR_NO_RMIC_ON_CLASSPATH,
                                        getRmic().getLocation());
           } catch (Exception ex) {
               if (ex instanceof BuildException) {
                   throw (BuildException) ex;
               } else {
  -                throw new BuildException("Error starting SUN rmic: ",
  +                throw new BuildException(ERROR_RMIC_FAILED,
                                            ex, getRmic().getLocation());
               }
           } finally {
  
  
  
  1.21      +10 -7     
ant/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java
  
  Index: WLRmic.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- WLRmic.java       9 Mar 2004 16:48:41 -0000       1.20
  +++ WLRmic.java       4 Aug 2004 22:03:46 -0000       1.21
  @@ -29,6 +29,12 @@
    * @since Ant 1.4
    */
   public class WLRmic extends DefaultRmicAdapter {
  +    public static final String WLRMIC_CLASSNAME = "weblogic.rmic";
  +    public static final String ERROR_NO_WLRMIC_ON_CLASSPATH = "Cannot use 
WebLogic rmic, as it is not "
  +                                         + "available.  A common solution is 
to "
  +                                         + "set the environment variable "
  +                                         + "CLASSPATH.";
  +    public static final String ERROR_WLRMIC_FAILED = "Error starting 
WebLogic rmic: ";
   
       public boolean execute() throws BuildException {
           getRmic().log("Using WebLogic rmic", Project.MSG_VERBOSE);
  @@ -39,26 +45,23 @@
               // Create an instance of the rmic
               Class c = null;
               if (getRmic().getClasspath() == null) {
  -                c = Class.forName("weblogic.rmic");
  +                c = Class.forName(WLRMIC_CLASSNAME);
               } else {
                   loader
                       = 
getRmic().getProject().createClassLoader(getRmic().getClasspath());
  -                c = Class.forName("weblogic.rmic", true, loader);
  +                c = Class.forName(WLRMIC_CLASSNAME, true, loader);
               }
               Method doRmic = c.getMethod("main",
                                           new Class [] {String[].class});
               doRmic.invoke(null, new Object[] {cmd.getArguments()});
               return true;
           } catch (ClassNotFoundException ex) {
  -            throw new BuildException("Cannot use WebLogic rmic, as it is not 
"
  -                                     + "available.  A common solution is to "
  -                                     + "set the environment variable "
  -                                     + "CLASSPATH.", 
getRmic().getLocation());
  +            throw new BuildException(ERROR_NO_WLRMIC_ON_CLASSPATH, 
getRmic().getLocation());
           } catch (Exception ex) {
               if (ex instanceof BuildException) {
                   throw (BuildException) ex;
               } else {
  -                throw new BuildException("Error starting WebLogic rmic: ", 
ex,
  +                throw new BuildException(ERROR_WLRMIC_FAILED, ex,
                                            getRmic().getLocation());
               }
           } finally {
  
  
  
  1.1                  
ant/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java
  
  Index: ForkingSunRmic.java
  ===================================================================
  /** (C) Copyright 2004 Hewlett-Packard Development Company, LP
  
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
  
   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.
  
   You should have received a copy of the GNU Lesser General Public
   License along with this library; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  
   For more information: www.smartfrog.org
  
   */
  
  
  package org.apache.tools.ant.taskdefs.rmic;
  
  import org.apache.tools.ant.BuildException;
  import org.apache.tools.ant.Project;
  import org.apache.tools.ant.taskdefs.Rmic;
  import org.apache.tools.ant.taskdefs.Java;
  import org.apache.tools.ant.taskdefs.Execute;
  import org.apache.tools.ant.taskdefs.LogStreamHandler;
  import org.apache.tools.ant.types.Commandline;
  
  import java.io.IOException;
  
  /**
   * This is an extension of the sun rmic compiler, which forks rather than
   * executes it inline. Why so? Because rmic is dog slow, but if you fork the
   * compiler you can have multiple copies compiling different bits of your 
project
   * at the same time. Which, on a multi-cpu system results in significant 
speedups.
   *
   * @since ant1.7
   */
  public class ForkingSunRmic extends DefaultRmicAdapter {
  
      /**
       * exec by creating a new command
       * @return
       * @throws BuildException
       */
      public boolean execute() throws BuildException {
          Rmic owner=getRmic();
          Commandline cmd = setupRmicCommand();
          Project project=owner.getProject();
          //rely on RMIC being on the path
          cmd.setExecutable(SunRmic.RMIC_EXECUTABLE);
  
          //set up the args
          String[] args=cmd.getCommandline();
  
          try {
              Execute exe = new Execute(new LogStreamHandler(owner,
                      Project.MSG_INFO,
                      Project.MSG_WARN));
              exe.setAntRun(project);
              exe.setWorkingDirectory(project.getBaseDir());
              exe.setCommandline(args);
              exe.execute();
              return exe.getExitValue()==0;
          } catch (IOException exception) {
              throw new BuildException("Error running "+ SunRmic.RMIC_EXECUTABLE
                      +" -maybe it is not on the path" ,
                      exception);
          }
      }
  }
  
  
  
  1.8       +15 -3     
ant/src/testcases/org/apache/tools/ant/taskdefs/RmicTest.java
  
  Index: RmicTest.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/RmicTest.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- RmicTest.java     9 Mar 2004 16:48:57 -0000       1.7
  +++ RmicTest.java     4 Aug 2004 22:03:46 -0000       1.8
  @@ -18,9 +18,9 @@
   package org.apache.tools.ant.taskdefs;
   
   import org.apache.tools.ant.Project;
  -
   import junit.framework.TestCase;
   
  +
   /**
    * Testcase for <rmic>.
    *
  @@ -44,6 +44,19 @@
       }
   
       /**
  +     * test for a compiler class existing
  +     * @param compilerClass
  +     * @return
  +     */
  +    private boolean hasCompiler(String compilerClass) {
  +        try {
  +            Class.forName(compilerClass);
  +            return true;
  +        } catch (ClassNotFoundException cnfe) {
  +            return false;
  +        }
  +    }
  +    /**
        * Test nested compiler args.
        */
       public void testCompilerArg() {
  @@ -99,5 +112,4 @@
           assertNotNull(compiler);
           assertEquals("kaffe", compiler);
       }
  -
   }
  
  
  
  1.1                  
ant/src/testcases/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java
  
  Index: RmicAdvancedTest.java
  ===================================================================
  /** (C) Copyright 2004 Hewlett-Packard Development Company, LP
  
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
  
   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.
  
   You should have received a copy of the GNU Lesser General Public
   License along with this library; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  
   For more information: www.smartfrog.org
  
   */
  
  
  package org.apache.tools.ant.taskdefs;
  
  import org.apache.tools.ant.BuildFileTest;
  import org.apache.tools.ant.taskdefs.rmic.RmicAdapterFactory;
  
  /**
   * Date: 04-Aug-2004
   * Time: 22:15:46
   */
  public class RmicAdvancedTest extends BuildFileTest {
  
      public RmicAdvancedTest(String name) {
          super(name);
      }
  
      private final static String TASKDEFS_DIR = 
"src/etc/testcases/taskdefs/rmic/";
  
      /**
       * The JUnit setup method
       */
      public void setUp() {
          configureProject(TASKDEFS_DIR + "rmic.xml");
      }
  
      /**
       * The teardown method for JUnit
       */
      public void tearDown() {
          executeTarget("teardown");
      }
  
      /**
       * A unit test for JUnit
       */
      public void testRmic() throws Exception {
          executeTarget("testRmic");
      }
      /**
       * A unit test for JUnit
       */
      public void testKaffe() throws Exception {
          executeTarget("testKaffe");
      }
  
      /**
       * A unit test for JUnit
       */
      public void testWlrmic() throws Exception {
          executeTarget("testWlrmic");
      }
  
      /**
       * A unit test for JUnit
       */
      public void testForking() throws Exception {
          executeTarget("testForking");
      }
  
      /**
       * A unit test for JUnit
       */
      public void testBadName() throws Exception {
          expectBuildExceptionContaining("testBadName",
                  "compiler not known",
                  RmicAdapterFactory.ERROR_UNKNOWN_COMPILER);
      }
  
      /**
       * A unit test for JUnit
       */
      public void testWrongClass() throws Exception {
          expectBuildExceptionContaining("testWrongClass",
                  "class not an RMIC adapter",
                  RmicAdapterFactory.ERROR_NOT_RMIC_ADAPTER);
      }
  }
  
  
  
  
  1.15      +1 -0      ant/docs/manual/CoreTasks/rmic.html
  
  Index: rmic.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/CoreTasks/rmic.html,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- rmic.html 9 Feb 2004 21:50:05 -0000       1.14
  +++ rmic.html 4 Aug 2004 22:03:46 -0000       1.15
  @@ -37,6 +37,7 @@
     <li>sun (the standard compiler of the JDK)</li>
     <li>kaffe (the standard compiler of <a href="http://www.kaffe.org"; 
target="_top">Kaffe</a>)</li>
     <li>weblogic</li>
  +  <li>forking - the sun compiler forked into a separate process</li>
   </ul>
   
   <p>The <a href="http://dione.zcu.cz/~toman40/miniRMI/";>miniRMI</a>
  
  
  
  1.1                  ant/src/etc/testcases/taskdefs/rmic/rmic.xml
  
  Index: rmic.xml
  ===================================================================
  <?xml version="1.0"?>
  <project name="rmic" default="teardown" basedir=".">
  
    <property name="rmic.dir" location="." />
    <property name="src.dir" location="${rmic.dir}/src"/>
    <property name="build.dir" location="${rmic.dir}/build"/>
  
    <target name="teardown">
      <delete dir="${build.dir}"/>
    </target>
  
    <!-- init builds the java source -->
    <target name="init" depends="probe-rmic">
      <mkdir dir="${build.dir}"/>
  
      <javac
        destdir="${build.dir}"
        srcdir="${src.dir}" >
      </javac>
  
      <presetdef name="base-rmic">
        <rmic
          base="${build.dir}"
          verify="true"
          includes="**/*.class"/>
      </presetdef>
    </target>
    
    <target name="probe-rmic">
      <available property="kaffe.present" classname="jkaffe.rmi.rmic.RMIC"/>
      <available property="rmic.present" classname="sun.rmi.rmic.Main"/>
      <available property="wlrmic.present" classname="weblogic.rmic"/>
    </target>
    
    <target name="testRmic" if="rmic.present" depends="init">
      <base-rmic />
    </target>
  
    <target name="testKaffe" if="kaffe.present" depends="init">
      <base-rmic
        compiler="kaffe"
        />
    </target>
  
    <target name="testWlrmic" if="wlrmic.present" depends="init">
      <base-rmic
        compiler="wlrmic"
        />
    </target>
  
    <target name="testForking" if="rmic.present" depends="init">
      <base-rmic
        compiler="forking"
        />
    </target>
  
    <target name="testBadName" if="rmic.present" depends="init">
      <base-rmic
        compiler="no-such-compiler"
        />
    </target>
  
    <target name="testWrongClass" if="rmic.present" depends="init">
      <base-rmic
        compiler="org.apache.tools.ant.BuildException"
        />
    </target>
  
    <target name="testNoBase" depends="init">
      <rmic
        verify="true"
        includes="**/*.class"/>
    </target>
  
    <target name="testBaseDoesntExist" depends="init">
      <rmic
        base="${build.dir}/classes"
        verify="true"
        includes="**/*.class"/>
    </target>
  
    <target name="testBaseIsntDir" depends="init">
      <rmic
        base="${ant.file}"
        verify="true"
        includes="**/*.class"/>
    </target>
  
  </project>
  
  
  1.1                  
ant/src/etc/testcases/taskdefs/rmic/src/RemoteTimestamp.java
  
  Index: RemoteTimestamp.java
  ===================================================================
  import java.rmi.Remote;
  import java.rmi.RemoteException;
  
  /**
   * this is the interface we remote
   */
  public interface RemoteTimestamp extends Remote {
        long when() throws RemoteException ;
  }
  
  
  
  
  1.1                  
ant/src/etc/testcases/taskdefs/rmic/src/RemoteTimestampImpl.java
  
  Index: RemoteTimestampImpl.java
  ===================================================================
  import java.rmi.Remote;
  import java.rmi.RemoteException;
  
  /**
   * this is the implementation
   */
  public class RemoteTimestampImpl implements RemoteTimestamp {
  
        public long when() throws RemoteException {
                return System.currentTimeMillis();
        }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to