hammant 02/01/25 08:40:14 Modified: altrmi PROPOSAL build.xml tests.xml altrmi/src/java/org/apache/commons/altrmi/common AbstractMethodHandler.java altrmi/src/java/org/apache/commons/altrmi/generator PrimarySourceGenerator.java altrmi/src/java/org/apache/commons/altrmi/generator/ant AltrmiInterfaceTask.java altrmi/src/java/org/apache/commons/altrmi/server AltrmiPublisher.java AltrmiServer.java altrmi/src/java/org/apache/commons/altrmi/server/impl AbstractServer.java altrmi/src/java/org/apache/commons/altrmi/test DirectTest.java PipeTest.java RmiServerTest.java SocketServerTest.java Added: altrmi/src/java/org/apache/commons/altrmi/javacompiler JavaCompiler.java SunJavaCompiler.java altrmi/src/java/org/apache/commons/altrmi/server AltrmiProxyGenerator.java Removed: altrmi/src/java/org/apache/commons/altrmi/generator SecondarySourceGenerator.java altrmi/src/java/org/apache/commons/altrmi/generator/ant AltrmiClassInternTask.java altrmi/src/java/org/apache/commons/altrmi/server/impl/classretrievers BaseMobileClass.java BaseMobileClassRetriever.java Log: inline compilation of proxys now possible Revision Changes Path 1.11 +8 -6 jakarta-commons-sandbox/altrmi/PROPOSAL Index: PROPOSAL =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/PROPOSAL,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- PROPOSAL 21 Jan 2002 21:19:49 -0000 1.10 +++ PROPOSAL 25 Jan 2002 16:40:13 -0000 1.11 @@ -9,13 +9,15 @@ 1) Any interface publishing - - no forcing of extension of java.rmi.Remote - - no forced declarations of "throws RemoteException" + - Any object via the interfaces it publishes can be published remotely. + - No transport lock-in : + - No forcing of extension of java.rmi.Remote + - No forced declarations of "throws java.rmi.RemoteException" - * These two features are part of the reason why Graham Glass's 'Glue' - product is so successful. His API goes several stages futher in that - it pubishes APIs via SOAP so that any language in any location can - use Glue published Java services. + * These two features are part of the reason why Graham Glass's 'Glue' + product is so successful. His API goes several stages futher in that + it pubishes APIs via SOAP so that any language in any location can + use Glue published Java services. 2) Multiple transports 1.3 +10 -5 jakarta-commons-sandbox/altrmi/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/build.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- build.xml 13 Jan 2002 19:25:20 -0000 1.2 +++ build.xml 25 Jan 2002 16:40:13 -0000 1.3 @@ -3,7 +3,7 @@ <!-- "Alternative (to) RMI" component of the Jakarta Commons Subproject - $Id: build.xml,v 1.2 2002/01/13 19:25:20 hammant Exp $ + $Id: build.xml,v 1.3 2002/01/25 16:40:13 hammant Exp $ --> @@ -140,10 +140,14 @@ <classpath refid="compile.classpath"/> </javac> + <!-- includes="org/apache/commons/altrmi/server/impl/rmi/RmiAltrmiInovcationAdapter.class"> --> + + <echo>rmic?</echo> <rmic base="${build.home}/classes" - includes="org/apache/commons/altrmi/server/impl/rmi/RmiAltrmiInovcationAdapter.class"> + includes="org/apache/commons/altrmi/common/RmiAltrmiInovcationHandler.class"> <classpath refid="compile.classpath" /> - </rmic> + </rmic> + <echo>rmic!</echo> </target> @@ -216,8 +220,9 @@ basedir="${build.home}/classes" manifest="src/conf/MANIFEST-generator.MF"> <include name="org/apache/commons/altrmi/generator/**"/> - </jar> - + <include name="org/apache/commons/altrmi/compiler/**"/> + </jar> + </target> </project> 1.2 +16 -9 jakarta-commons-sandbox/altrmi/tests.xml Index: tests.xml =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/tests.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- tests.xml 21 Jan 2002 15:38:20 -0000 1.1 +++ tests.xml 25 Jan 2002 16:40:13 -0000 1.2 @@ -3,7 +3,7 @@ <!-- "Alt (to) RMI" component of the Jakarta Commons Subproject - $Id: tests.xml,v 1.1 2002/01/21 15:38:20 hammant Exp $ + $Id: tests.xml,v 1.2 2002/01/25 16:40:13 hammant Exp $ --> @@ -61,10 +61,6 @@ <classpath refid="compile.classpath" /> </taskdef> - <taskdef name="altrmiclassintern" classname="org.apache.commons.altrmi.generator.ant.AltrmiClassInternTask"> - <classpath refid="compile.classpath" /> - </taskdef> - <!-- ========== Executable Targets ======================================== --> @@ -91,10 +87,16 @@ <target name="generate" depends="prepare"> - <altrmiinterfaces genname="Hello" gendir="${build.home}/genjava" + <altrmiinterfaces genname="Hello" srcgendir="${build.home}/genjava" + classgendir="${build.home}/classes2" classesorinterfaces="org.apache.commons.altrmi.test.TestInterface" - additionalfacades="org.apache.commons.altrmi.test.TestInterface2"/> + additionalfacades="org.apache.commons.altrmi.test.TestInterface2"> + <classpath> + <pathelement location="${build.home}/classes"/> + </classpath> + </altrmiinterfaces> + <!-- <javac srcdir="${build.home}/genjava" destdir="${build.home}/classes2" debug="${compile.debug}" @@ -102,6 +104,8 @@ optimize="${compile.optimize}"> <classpath refid="compile.classpath"/> </javac> + + <altrmiclassintern gendir="${build.home}/genjava2" sourceclassdir="${build.home}/classes2/" @@ -114,7 +118,8 @@ optimize="${compile.optimize}"> <classpath refid="compile.classpath"/> </javac> - + + --> </target> @@ -217,13 +222,15 @@ <java classname="org.apache.commons.altrmi.test.SocketServerTest" fork="true"> <classpath refid="testB1.classpath"/> <arg value="S"/> + <arg value="ObjectStream"/> </java> </target> - <target name="clientb-client" depends="generate"> + <target name="socketb-client" depends="generate"> <java classname="org.apache.commons.altrmi.test.SocketClientTest" fork="true"> <classpath refid="testB2.classpath"/> <arg value="S"/> + <arg value="ObjectStream"/> </java> </target> 1.3 +2 -11 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/common/AbstractMethodHandler.java Index: AbstractMethodHandler.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/common/AbstractMethodHandler.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- AbstractMethodHandler.java 18 Jan 2002 11:03:20 -0000 1.2 +++ AbstractMethodHandler.java 25 Jan 2002 16:40:13 -0000 1.3 @@ -20,7 +20,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.2 $ + * @version $Revision: 1.3 $ */ public class AbstractMethodHandler { @@ -47,16 +47,7 @@ protected String encodeClassName(String className) { - StringBuffer sb = new StringBuffer(); + return className.replace('.','$'); - for (int i = 0; i < className.length(); i++) { - char ch = className.charAt(i); - - if (Character.isLetter(ch) | Character.isDigit(ch)) { - sb.append(ch); - } - } - - return sb.toString(); } } 1.7 +53 -14 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/generator/PrimarySourceGenerator.java Index: PrimarySourceGenerator.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/generator/PrimarySourceGenerator.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- PrimarySourceGenerator.java 16 Jan 2002 11:32:20 -0000 1.6 +++ PrimarySourceGenerator.java 25 Jan 2002 16:40:13 -0000 1.7 @@ -12,6 +12,7 @@ import org.apache.commons.altrmi.common.AbstractMethodHandler; import org.apache.commons.altrmi.test.TestInterface; +import org.apache.commons.altrmi.javacompiler.JavaCompiler; import java.lang.reflect.Method; @@ -29,13 +30,15 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.6 $ + * @version $Revision: 1.7 $ */ public class PrimarySourceGenerator extends AbstractMethodHandler { private String[] mClassesOrInterfacesToExpose; private String[] mAdditionalFacades; - private String mGenDir; + protected String mSrcGenDir; + protected String mClassGenDir; + protected String mClasspath; private String mGenName; private PrintWriter mClassSource; @@ -49,6 +52,13 @@ public void setClassOrInterfacesToExpose(String[] classesOrInterfacesToExpose) { mClassesOrInterfacesToExpose = classesOrInterfacesToExpose; } + public void setClassOrInterfacesToExpose(Class[] classesOrInterfacesToExpose) { + mClassesOrInterfacesToExpose = new String[classesOrInterfacesToExpose.length]; + for (int i = 0; i < classesOrInterfacesToExpose.length; i++) { + Class facade = classesOrInterfacesToExpose[i]; + mClassesOrInterfacesToExpose[i] = facade.getName(); + } + } /** * Method setClassOrInterfacesToExpose @@ -61,16 +71,24 @@ public void setAdditionalfacades(String[] additionalFacades) { mAdditionalFacades = additionalFacades; } + public void setAdditionalfacades(Class[] additionalFacades) { + mAdditionalFacades = new String[additionalFacades.length]; + for (int i = 0; i < additionalFacades.length; i++) { + Class facade = additionalFacades[i]; + mAdditionalFacades[i] = facade.getName(); + } + } - /** - * Method setGenDir - * - * - * @param genDir - * - */ - public void setGenDir(String genDir) { - mGenDir = genDir; + public void setSrcGenDir(String srcGenDir) { + mSrcGenDir = srcGenDir; + } + + public void setClasspath(String classpath) { + mClasspath = classpath; + } + + public void setClassGenDir(String classGenDir) { + mClassGenDir = classGenDir; } /** @@ -91,7 +109,7 @@ * @param cL * */ - public void generate(ClassLoader cL) throws SourceGenerationException { + public void generateSrc(ClassLoader cL) throws SourceGenerationException { // The lookupable service class source. makeSource(cL, "Main", mClassesOrInterfacesToExpose); @@ -107,6 +125,27 @@ } } + public void generateClass(ClassLoader cL) { + JavaCompiler jc = JavaCompiler.getDefaultCompiler(); + jc.setOutputDir(mClassGenDir); + //jc.setCompilerPath(); + jc.addClassPath(mClassGenDir); + jc.addClassPath(mClasspath); + jc.addDefaultClassPath(); + jc.doCompile(mSrcGenDir + File.separator + "AltrmiGenerated" + mGenName + "_Main.java"); + jc.doCompile(mSrcGenDir + File.separator + "AltrmiGenerated2" + mGenName + "_Main.java"); + System.out.println(jc.getCompilerMessage()); + + if (mAdditionalFacades != null) { + for (int i = 0; i < mAdditionalFacades.length; i++) { + String classname = encodeClassName(mAdditionalFacades[i]); + jc.doCompile(mSrcGenDir + File.separator + "AltrmiGenerated" + mGenName + "_" + classname + ".java"); + jc.doCompile(mSrcGenDir + File.separator + "AltrmiGenerated2" + mGenName + "_" + classname + ".java"); + } + } + + } + /** * Method makeSource * @@ -124,7 +163,7 @@ // methdos could be in more than one interface. Vector methodsDone = new Vector(); - String filename = mGenDir + File.separator + "AltrmiGenerated" + mGenName + "_" + name + ".java"; + String filename = mSrcGenDir + File.separator + "AltrmiGenerated" + mGenName + "_" + name + ".java"; try { mClassSource = new PrintWriter(new FileOutputStream(filename)); } catch (FileNotFoundException e) { @@ -264,7 +303,7 @@ public void makeSource2(ClassLoader cL, String name, String[] classOrInterfacesToExpose) throws SourceGenerationException { - String filename = mGenDir + File.separator + "AltrmiGenerated2" + mGenName + "_" + name + ".java"; + String filename = mSrcGenDir + File.separator + "AltrmiGenerated2" + mGenName + "_" + name + ".java"; try { PrintWriter class2Source = new PrintWriter(new FileOutputStream(filename)); 1.4 +24 -9 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/generator/ant/AltrmiInterfaceTask.java Index: AltrmiInterfaceTask.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/generator/ant/AltrmiInterfaceTask.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- AltrmiInterfaceTask.java 13 Jan 2002 00:13:53 -0000 1.3 +++ AltrmiInterfaceTask.java 25 Jan 2002 16:40:13 -0000 1.4 @@ -18,12 +18,14 @@ import java.util.StringTokenizer; import java.util.Vector; +import java.io.File; public class AltrmiInterfaceTask extends Task { protected String[] mClassOrInterfacesToExpose; protected String[] mAdditionalFacades; - protected String mGenDir; + protected String mSrcGenDir; + protected String mClassGenDir; protected String mGenName; protected Path classpath; @@ -50,8 +52,15 @@ strings.copyInto(mAdditionalFacades); } - public void setGendir(String genDir) { - mGenDir = genDir; + public void setSrcgendir(String srcGenDir) { + mSrcGenDir = srcGenDir.replace('/',File.separatorChar); + mSrcGenDir = mSrcGenDir.replace('\\',File.separatorChar); + + } + + public void setClassgendir(String classGenDir) { + mClassGenDir = classGenDir.replace('/',File.separatorChar); + mClassGenDir = mClassGenDir.replace('\\',File.separatorChar); } public void setGenname(String genName) { @@ -81,18 +90,23 @@ if (mClassOrInterfacesToExpose == null) { throw new BuildException("Specify at least one interface to expose"); } - if (mGenDir == null) { + if (mSrcGenDir == null) { throw new BuildException("Specify the directory to generate Java source in"); } + if (mClassGenDir == null) { + throw new BuildException("Specify the directory to generate Java classes in"); + } if (mGenName == null) { throw new BuildException("Specify the name to use for lookup"); } PrimarySourceGenerator sg = new PrimarySourceGenerator(); - sg.setGenDir(mGenDir); - sg.setGenName(mGenName); - sg.setClassOrInterfacesToExpose(mClassOrInterfacesToExpose); - sg.setAdditionalfacades(mAdditionalFacades); try { + sg.setSrcGenDir(new File(mSrcGenDir).getAbsolutePath()); + sg.setClassGenDir(new File(mClassGenDir).getAbsolutePath()); + sg.setGenName(mGenName); + sg.setClasspath(classpath.toString()); + sg.setClassOrInterfacesToExpose(mClassOrInterfacesToExpose); + sg.setAdditionalfacades(mAdditionalFacades); ClassLoader cL = null; if (classpath != null) { cL = new AntClassLoader(project, classpath); @@ -100,7 +114,8 @@ cL = this.getClass().getClassLoader(); } - sg.generate(cL); + sg.generateSrc(cL); + sg.generateClass(cL); } catch (SourceGenerationException sge) { throw new BuildException(sge.getMessage()); } 1.1 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/javacompiler/JavaCompiler.java Index: JavaCompiler.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 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 acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", 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 names without prior written * permission of the Apache Group. * * 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 org.apache.commons.altrmi.javacompiler; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.File; import java.net.URL; /** * If you want to plugin your own Java compiler, you probably want to * write a class that implements this interface. * * @author Anil K. Vijendran * @author Sam Ruby * @author Costin Manolache */ public abstract class JavaCompiler { static String CPSEP = System.getProperty("path.separator"); protected String classpath; protected String compilerPath = "jikes"; protected String outdir; protected ByteArrayOutputStream out; protected boolean classDebugInfo = false; protected JavaCompiler() { reset(); } /** * Specify where the compiler can be found */ public void setCompilerPath(String compilerPath) { if (compilerPath != null) { this.compilerPath = compilerPath; } } /** * Set the class path for the compiler */ public void setClasspath(String classpath) { this.classpath = classpath; } /** * Method addClassPath * * * @param path * */ public void addClassPath(String path) { // XXX use StringBuffer classpath = classpath + CPSEP + path; } /** * Method addDefaultClassPath * * */ public void addDefaultClassPath() { addClassPath(System.getProperty("java.class.path")); } /** * Set the output directory */ public void setOutputDir(String outdir) { this.outdir = outdir; } // Removed - we manage ourself the buffer and return it as string. // It can be added later if someone really need that. // /** // * Set where you want the compiler output (messages) to go // */ // public void setMsgOutput(OutputStream out) { // this.out = out; // } /** * Method getCompilerMessage * * * @return * */ public String getCompilerMessage() { return out.toString(); } /** * Set if you want debugging information in the class file */ public void setClassDebugInfo(boolean classDebugInfo) { this.classDebugInfo = classDebugInfo; } /** * Method recycle * * */ public void recycle() {} /** Reset all compilation state, but keep the settings. * The compiler can be used again. */ public void reset() { out = new ByteArrayOutputStream(256); } // -------------------- Compile method -------------------- /** The main method - compile the source, using the previous settings. */ public boolean compile(String source) { try { File f = new File(source); source = f.getCanonicalPath(); } catch (IOException ex) { ex.printStackTrace(); } return doCompile(source); } /** * Execute the compiler * @param source - file name of the source to be compiled */ public abstract boolean doCompile(String source); // -------------------- Utils -------------------- /** * Method getCompilerPluginClass * * * @param s * * @return * */ public static Class getCompilerPluginClass(String s) { try { Class c = Class.forName(s); return c; } catch (Exception ex) { return null; } } /** * Method getDefaultCompiler * * * @return * */ public static JavaCompiler getDefaultCompiler() { return new SunJavaCompiler(); } //-------------------- Class path utils -------------------- /** Create a classpath string from a URL[] ( used in URLClassLoader ) */ public static String extractClassPath(URL urls[]) { String separator = System.getProperty("path.separator", ":"); String cpath = ""; for (int i = 0; i < urls.length; i++) { URL cp = urls[i]; if (cp == null) { continue; } File f = new File(cp.getFile()); if (cpath.length() > 0) { cpath += separator; } cpath += f; } return cpath; } } 1.1 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/javacompiler/SunJavaCompiler.java Index: SunJavaCompiler.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 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 acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", 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 names without prior written * permission of the Apache Group. * * 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 org.apache.commons.altrmi.javacompiler; import java.io.OutputStream; import sun.tools.javac.Main; /** * The default compiler. This is the javac present in JDK 1.1.x and * JDK 1.2. * * At some point we need to make sure there is a class like this for * JDK 1.3, and other javac-like animals that people want to use. * * @author Anil K. Vijendran */ public class SunJavaCompiler extends JavaCompiler { /** * Method doCompile * * * @param source * * @return * */ public boolean doCompile(String source) { Main compiler = new Main(out, "jsp->javac"); String[] args; if (classDebugInfo) { args = new String[] { "-g", "-classpath", classpath, "-d", outdir, source }; } else { args = new String[] { "-classpath", classpath, "-d", outdir, source }; } return compiler.compile(args); } } 1.3 +1 -6 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/AltrmiPublisher.java Index: AltrmiPublisher.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/AltrmiPublisher.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- AltrmiPublisher.java 21 Jan 2002 15:38:21 -0000 1.2 +++ AltrmiPublisher.java 25 Jan 2002 16:40:13 -0000 1.3 @@ -8,17 +8,12 @@ package org.apache.commons.altrmi.server; - -import org.apache.commons.altrmi.common.AltrmiReply; -import org.apache.commons.altrmi.common.AltrmiRequest; - - /** * Interface AltrmiServer * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version * $Revision: 1.2 $ + * @version * $Revision: 1.3 $ */ public interface AltrmiPublisher { 1.3 +2 -2 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/AltrmiServer.java Index: AltrmiServer.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/AltrmiServer.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- AltrmiServer.java 14 Jan 2002 23:03:30 -0000 1.2 +++ AltrmiServer.java 25 Jan 2002 16:40:13 -0000 1.3 @@ -19,9 +19,9 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version * $Revision: 1.2 $ + * @version * $Revision: 1.3 $ */ -public interface AltrmiServer extends AltrmiPublisher { +public interface AltrmiServer extends AltrmiPublisher, AltrmiProxyGenerator { /** * Method setClassRetriever 1.1 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/AltrmiProxyGenerator.java Index: AltrmiProxyGenerator.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE.txt file. */ package org.apache.commons.altrmi.server; /** * Interface AltrmiProxyGenerator * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> * @version * $Revision: 1.1 $ */ public interface AltrmiProxyGenerator { /** * Method generate * * * @param impl * @param asName * @param classOrInterfaceToExpose * */ void generate(Object impl, String asName, Class classOrInterfaceToExpose) throws PublicationException; /** * Method generate * * * @param impl * @param asName * @param classOrInterfaceToExpose * @param additionalFacade * */ void generate(Object impl, String asName, Class classOrInterfaceToExpose, Class additionalFacade) throws PublicationException; /** * Method generate * * * @param impl * @param asName * @param classOrInterfaceToExpose * @param additionalFacades * */ void generate(Object impl, String asName, Class classOrInterfaceToExpose, Class[] additionalFacades) throws PublicationException; /** * Method generate * * * @param impl * @param asName * @param classesOrInterfacesToExpose * */ void generate(Object impl, String asName, Class[] classesOrInterfacesToExpose) throws PublicationException; /** * Method generate * * * @param impl * @param asName * @param classesOrInterfacesToExpose * @param additionalFacades * */ void generate(Object impl, String asName, Class[] classesOrInterfacesToExpose, Class[] additionalFacades) throws PublicationException; } 1.11 +102 -2 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/impl/AbstractServer.java Index: AbstractServer.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/impl/AbstractServer.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- AbstractServer.java 21 Jan 2002 20:10:34 -0000 1.10 +++ AbstractServer.java 25 Jan 2002 16:40:14 -0000 1.11 @@ -39,14 +39,17 @@ import org.apache.commons.altrmi.server.ClassRetriever; import org.apache.commons.altrmi.server.ServerInvocationHandler; import org.apache.commons.altrmi.server.AltrmiAuthenticator; -import org.apache.commons.altrmi.server.impl.classretrievers.BaseMobileClassRetriever; import org.apache.commons.altrmi.server.impl.classretrievers.NoClassRetriever; +import org.apache.commons.altrmi.generator.PrimarySourceGenerator; +import org.apache.commons.altrmi.generator.SourceGenerationException; +import org.apache.tools.ant.AntClassLoader; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Vector; import java.util.Iterator; +import java.io.File; /** @@ -54,7 +57,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.10 $ + * @version $Revision: 1.11 $ */ public abstract class AbstractServer extends AbstractMethodHandler implements AltrmiServer { @@ -72,6 +75,9 @@ protected static final int STOPPED = 33; protected static final int UNSTARTED = 44; protected int mState = UNSTARTED; + private String mAltrmiClasspath; + private String mClassGenDir; + private String mSrcGenDir; /** * Method publish @@ -457,4 +463,98 @@ return new Long((long) ((long) SESSION++ << 32) + (long) Math.round(Math.random())); } + /** + * Method generate + * + * + * @param impl + * @param asName + * @param classOrInterfaceToExpose + * @param additionalFacade + * + */ + public void generate(Object impl, String asName, Class classOrInterfaceToExpose, Class additionalFacade) throws PublicationException { + generate(impl, asName, classOrInterfaceToExpose, new Class[] {additionalFacade} ); + } + + /** + * Method generate + * + * + * @param impl + * @param asName + * @param classOrInterfaceToExpose + * @param additionalFacades + * + */ + public void generate(Object impl, String asName, Class classOrInterfaceToExpose, Class[] additionalFacades) throws PublicationException { + generate(impl, asName, new Class[] { classOrInterfaceToExpose }, additionalFacades ); + } + + /** + * Method generate + * + * + * @param impl + * @param asName + * @param classesOrInterfacesToExpose + * + */ + public void generate(Object impl, String asName, Class[] classesOrInterfacesToExpose) throws PublicationException { + generate(impl, asName, classesOrInterfacesToExpose, new Class[0] ); + } + + /** + * Method generate + * + * + * @param impl + * @param asName + * @param classOrInterfaceToExpose + * + */ + public void generate(Object impl, String asName, Class classOrInterfaceToExpose) throws PublicationException { + generate(impl, asName, new Class[] { classOrInterfaceToExpose } , new Class[0] ); + } + + public void setAltrmiClasspath(String altrmiClasspath) { + mAltrmiClasspath = altrmiClasspath; + } + + public void setClassGenDir(String classGenDir) { + mClassGenDir = classGenDir; + } + + public void setSrcGenDir(String srcGenDir) { + mSrcGenDir = srcGenDir; + } + + /** + * Method generate + * + * + * @param impl + * @param asName + * @param classesOrInterfacesToExpose + * @param additionalFacades + * + */ + public void generate(Object impl, String asName, Class[] classesOrInterfacesToExpose, Class[] additionalFacades) throws PublicationException { + PrimarySourceGenerator sg = new PrimarySourceGenerator(); + sg.setSrcGenDir(mSrcGenDir); + sg.setClassGenDir(mClassGenDir); + sg.setGenName(asName); + sg.setClasspath(mAltrmiClasspath); + sg.setClassOrInterfacesToExpose(classesOrInterfacesToExpose); + sg.setAdditionalfacades(additionalFacades); + ClassLoader cL = this.getClass().getClassLoader(); + try { + sg.generateSrc(cL); + sg.generateClass(cL); + } catch (SourceGenerationException e) { + e.printStackTrace(); + // TODO ? + } + + } } 1.7 +4 -4 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/test/DirectTest.java Index: DirectTest.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/test/DirectTest.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DirectTest.java 21 Jan 2002 15:38:21 -0000 1.6 +++ DirectTest.java 25 Jan 2002 16:40:14 -0000 1.7 @@ -11,7 +11,7 @@ import org.apache.commons.altrmi.server.impl.direct.DirectServer; import org.apache.commons.altrmi.server.impl.direct.DirectInovcationAdapter; -import org.apache.commons.altrmi.server.impl.classretrievers.BaseMobileClassRetriever; +import org.apache.commons.altrmi.server.impl.classretrievers.JarFileClassRetriever; import org.apache.commons.altrmi.common.AltrmiInvocationHandler; import org.apache.commons.altrmi.common.AltrmiConnectionException; import org.apache.commons.altrmi.client.AltrmiHostContext; @@ -28,7 +28,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.6 $ + * @version $Revision: 1.7 $ */ public class DirectTest { @@ -51,7 +51,7 @@ DirectServer ds = new DirectServer(); if (mServerOrClientFactory.equals("S")) { - ds.setClassRetriever(new BaseMobileClassRetriever()); + ds.setClassRetriever(new JarFileClassRetriever("build/classes2")); } TestInterfaceImpl ti = new TestInterfaceImpl(); @@ -69,7 +69,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.6 $ + * @version $Revision: 1.7 $ */ static class DirectTestClient implements Runnable { 1.7 +4 -4 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/test/PipeTest.java Index: PipeTest.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/test/PipeTest.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- PipeTest.java 19 Jan 2002 13:30:19 -0000 1.6 +++ PipeTest.java 25 Jan 2002 16:40:14 -0000 1.7 @@ -11,7 +11,7 @@ import org.apache.commons.altrmi.server.impl.piped.AbstractPipedServer; import org.apache.commons.altrmi.server.impl.piped.PipedObjectStreamServer; -import org.apache.commons.altrmi.server.impl.classretrievers.BaseMobileClassRetriever; +import org.apache.commons.altrmi.server.impl.classretrievers.JarFileClassRetriever; import org.apache.commons.altrmi.client.AltrmiHostContext; import org.apache.commons.altrmi.client.impl.socket.SocketObjectStreamHostContext; import org.apache.commons.altrmi.client.AltrmiFactory; @@ -30,7 +30,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.6 $ + * @version $Revision: 1.7 $ */ public class PipeTest { @@ -53,7 +53,7 @@ AbstractPipedServer ps = new PipedObjectStreamServer(); if (mServerOrClientFactory.equals("S")) { - ps.setClassRetriever(new BaseMobileClassRetriever()); + ps.setClassRetriever(new JarFileClassRetriever("build/classes2")); } TestInterfaceImpl ti = new TestInterfaceImpl(); @@ -71,7 +71,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.6 $ + * @version $Revision: 1.7 $ */ static class PipedTestClient implements Runnable { 1.3 +3 -3 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/test/RmiServerTest.java Index: RmiServerTest.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/test/RmiServerTest.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- RmiServerTest.java 14 Jan 2002 16:36:08 -0000 1.2 +++ RmiServerTest.java 25 Jan 2002 16:40:14 -0000 1.3 @@ -10,7 +10,7 @@ import org.apache.commons.altrmi.server.impl.rmi.RmiServer; -import org.apache.commons.altrmi.server.impl.classretrievers.BaseMobileClassRetriever; +import org.apache.commons.altrmi.server.impl.classretrievers.JarFileClassRetriever; import java.io.IOException; @@ -20,7 +20,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.2 $ + * @version $Revision: 1.3 $ */ public class RmiServerTest { @@ -39,7 +39,7 @@ RmiServer rs = new RmiServer("127.0.0.1", 4321); if (args[0].equals("S")) { - rs.setClassRetriever(new BaseMobileClassRetriever()); + rs.setClassRetriever(new JarFileClassRetriever("build/classes2")); } TestInterfaceImpl ti = new TestInterfaceImpl(); 1.7 +3 -3 jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/test/SocketServerTest.java Index: SocketServerTest.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/test/SocketServerTest.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- SocketServerTest.java 18 Jan 2002 17:33:07 -0000 1.6 +++ SocketServerTest.java 25 Jan 2002 16:40:14 -0000 1.7 @@ -12,7 +12,7 @@ import org.apache.commons.altrmi.server.impl.socket.CompleteSocketObjectStreamServer; import org.apache.commons.altrmi.server.impl.socket.CompleteSocketCustomStreamServer; -import org.apache.commons.altrmi.server.impl.classretrievers.BaseMobileClassRetriever; +import org.apache.commons.altrmi.server.impl.classretrievers.JarFileClassRetriever; import org.apache.commons.altrmi.server.impl.AbstractServer; import java.io.IOException; @@ -23,7 +23,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.6 $ + * @version $Revision: 1.7 $ */ public class SocketServerTest { @@ -57,7 +57,7 @@ } if (args[0].equals("S")) { - as.setClassRetriever(new BaseMobileClassRetriever()); + as.setClassRetriever(new JarFileClassRetriever("build/classes2")); } TestInterfaceImpl ti = new TestInterfaceImpl();
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>