maguro 2004/11/09 23:38:31
Modified: modules/core/src/java/org/openejb/corba/compiler
AntCompiler.java Compiler.java
OpenORBSkeletonGenerator.java
SkeletonGenerator.java
Log:
Next step in CORBA skeleton generation.
Revision Changes Path
1.2 +37 -15
openejb/modules/core/src/java/org/openejb/corba/compiler/AntCompiler.java
Index: AntCompiler.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/compiler/AntCompiler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AntCompiler.java 5 Nov 2004 23:46:13 -0000 1.1
+++ AntCompiler.java 10 Nov 2004 04:38:31 -0000 1.2
@@ -45,6 +45,10 @@
package org.openejb.corba.compiler;
import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Iterator;
+import java.util.Set;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Javac;
@@ -55,27 +59,45 @@
/**
- *
- *
* @version $Revision$ $Date$
*/
-public class AntCompiler extends Compiler {
+public class AntCompiler implements Compiler {
- public void compileDirectory(File source, File destination) throws
CompilerException {
- Project project = new Project();
- Path path = new Path(project);
- path.setLocation(source);
- Javac javac = new Javac();
- javac.setProject(project);
- javac.setSrcdir(path);
- javac.setDestdir(destination);
- javac.execute();
+ public void compileDirectory(File srcDirectory, File destDirectory, Set
classpaths) throws CompilerException {
+ try {
+ Project project = new Project();
+
+ Path path = new Path(project);
+ path.setLocation(srcDirectory);
+
+ Javac javac = new Javac();
+ javac.setProject(project);
+ javac.setSrcdir(path);
+ javac.setDestdir(destDirectory);
+ javac.setFork(false);
+
+ for (Iterator iter = classpaths.iterator(); iter.hasNext();) {
+ path = new Path(project);
+ path.setLocation(new File(new URI(iter.next().toString())));
+ if (javac.getClasspath() == null) {
+ javac.setClasspath(path);
+ } else {
+ javac.getClasspath().addExisting(path);
+ }
+ }
+
+ javac.execute();
+ } catch (URISyntaxException e) {
+ throw new CompilerException(e);
+ }
}
public static final GBeanInfo GBEAN_INFO;
static {
- GBeanInfoBuilder infoFactory = new
GBeanInfoBuilder(AntCompiler.class, Compiler.GBEAN_INFO);
+ GBeanInfoBuilder infoFactory = new
GBeanInfoBuilder(AntCompiler.class);
+
+ infoFactory.addInterface(Compiler.class);
GBEAN_INFO = infoFactory.getBeanInfo();
}
1.2 +6 -20
openejb/modules/core/src/java/org/openejb/corba/compiler/Compiler.java
Index: Compiler.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/compiler/Compiler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Compiler.java 5 Nov 2004 23:46:13 -0000 1.1
+++ Compiler.java 10 Nov 2004 04:38:31 -0000 1.2
@@ -45,30 +45,16 @@
package org.openejb.corba.compiler;
import java.io.File;
+import java.util.Set;
-import org.apache.geronimo.gbean.GBeanInfo;
-import org.apache.geronimo.gbean.GBeanInfoBuilder;
/**
- *
+ * Interface used to wrap compiler implementations.
*
* @version $Revision$ $Date$
*/
-public abstract class Compiler {
-
- abstract void compileDirectory(File source, File destination) throws
CompilerException;
-
- public static final GBeanInfo GBEAN_INFO;
-
- static {
- GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(Compiler.class);
-
- infoFactory.addOperation("compileDirectory", new Class[]{File.class,
File.class});
+public interface Compiler {
- GBEAN_INFO = infoFactory.getBeanInfo();
- }
+ void compileDirectory(File srcDirectory, File destDirectory, Set
classPaths) throws CompilerException;
- public static GBeanInfo getGBeanInfo() {
- return GBEAN_INFO;
- }
}
1.2 +64 -24
openejb/modules/core/src/java/org/openejb/corba/compiler/OpenORBSkeletonGenerator.java
Index: OpenORBSkeletonGenerator.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/compiler/OpenORBSkeletonGenerator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- OpenORBSkeletonGenerator.java 5 Nov 2004 23:46:13 -0000 1.1
+++ OpenORBSkeletonGenerator.java 10 Nov 2004 04:38:31 -0000 1.2
@@ -44,12 +44,13 @@
*/
package org.openejb.corba.compiler;
+import javax.ejb.EJBHome;
import java.io.File;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.Iterator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.Jar;
import org.openorb.compiler.CompilerHost;
import org.openorb.compiler.object.IdlObject;
import org.openorb.compiler.object.IdlRoot;
@@ -57,25 +58,36 @@
import org.openorb.compiler.rmi.RmiCompilerProperties;
import org.openorb.compiler.rmi.generator.Javatoidl;
import org.openorb.compiler.rmi.parser.JavaParser;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.Jar;
import org.apache.geronimo.deployment.util.DeploymentUtil;
import org.apache.geronimo.gbean.GBeanInfo;
import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.gbean.GBeanLifecycle;
import org.apache.geronimo.gbean.WaitingException;
+import org.apache.geronimo.system.main.ToolsJarHack;
+
+import org.openejb.util.JarUtils;
/**
- *
- *
* @version $Revision$ $Date$
*/
public class OpenORBSkeletonGenerator extends SkeletonGenerator implements
GBeanLifecycle, CompilerHost {
+
private static Log log =
LogFactory.getLog(OpenORBSkeletonGenerator.class);
+ private final ClassLoader classLoader;
private boolean verbose;
private Compiler compiler;
+ public OpenORBSkeletonGenerator(ClassLoader classLoader) {
+ this.classLoader = classLoader;
+ }
+
public boolean isVerbose() {
return verbose;
}
@@ -92,19 +104,24 @@
this.compiler = compiler;
}
- public void generateSkeleton(Class iface, File destination) throws
CompilerException {
+ public void generateSkeletons(Set interfaces, File destination,
ClassLoader cl) throws CompilerException {
+ ClassLoader savedLoader =
Thread.currentThread().getContextClassLoader();
File TEMPDIR = null;
try {
+ Thread.currentThread().setContextClassLoader(classLoader);
+
+
TEMPDIR = DeploymentUtil.createTempDir();
- File IDLDIR = new File(TEMPDIR, "IDL");
+ File SRCDIR = new File(TEMPDIR, "JAVA");
File CLASSESDIR = new File(TEMPDIR, "classes");
- IDLDIR.mkdirs();
+ SRCDIR.mkdirs();
CLASSESDIR.mkdirs();
RmiCompilerProperties rcp = new RmiCompilerProperties();
- rcp.setClassloader(getClass().getClassLoader());
+ rcp.setClassloader(cl);
rcp.setM_verbose(verbose);
- rcp.setM_destdir(IDLDIR);
+ rcp.setM_destdir(SRCDIR);
+ rcp.getM_includeList().add(new
URL("resource:/org/openorb/idl/"));
Configurator configurator = new Configurator(new String[0],
getProps());
JavaParser parser = new JavaParser(rcp, this, null, null, null);
@@ -112,35 +129,52 @@
parser.add_idl_files(rcp.getIncludedFiles(),
rcp.getM_includeList());
int start = parser.getCompilationTree().size();
- parser.parse_class(iface);
+ Set set = new HashSet();
+ for (Iterator iter = interfaces.iterator(); iter.hasNext();) {
+ Class iface = cl.loadClass((String) iter.next());
+
+ parser.parse_class(iface);
+
+ IdlObject compilationGraph = parser.getIdlTreeRoot();
+ Javatoidl toIDL = new Javatoidl(rcp, this);
+ int end = parser.getCompilationTree().size();
+ for (int i = start; i < end; i++) {
+ toIDL.translateRMITie((IdlRoot)
parser.getCompilationTree().get(i));
+ }
+ toIDL.translateRMITie(compilationGraph);
- IdlObject compilationGraph = parser.getIdlTreeRoot();
- Javatoidl toIDL = new Javatoidl(rcp, this);
+ start = end;
- // -------------
- // map tie class
- // -------------
- int end = parser.getCompilationTree().size();
- for (int i = start; i < end; i++) {
- toIDL.translateRMITie((IdlRoot)
parser.getCompilationTree().get(i));
+ collectClasspaths(set, iface);
}
- toIDL.translateRMITie(compilationGraph);
+ collectClasspaths(set, EJBHome.class);
- compiler.compileDirectory(IDLDIR, CLASSESDIR);
+ compiler.compileDirectory(SRCDIR, CLASSESDIR, set);
Project project = new Project();
Jar jar = new Jar();
jar.setProject(project);
jar.setDestFile(destination);
jar.setBasedir(CLASSESDIR);
+ jar.setUpdate(true);
jar.execute();
} catch (Exception e) {
throw new CompilerException(e);
} finally {
+ Thread.currentThread().setContextClassLoader(savedLoader);
DeploymentUtil.recursiveDelete(TEMPDIR);
}
}
+ protected void collectClasspaths(Set set, Class iface) throws
CompilerException {
+ set.add(iface.getProtectionDomain().getCodeSource().getLocation());
+
+ Class[] classes = iface.getDeclaredClasses();
+ for (int i = 0; i < classes.length; i++) {
+ collectClasspaths(set, classes[i]);
+ }
+ }
+
public void doStart() throws WaitingException, Exception {
if (compiler == null) {
compiler = new AntCompiler();
@@ -156,9 +190,15 @@
public static final GBeanInfo GBEAN_INFO;
static {
+ JarUtils.setHandlerSystemProperty();
+ // Install the lame tools jar hack
+ ToolsJarHack.install();
+
GBeanInfoBuilder infoFactory = new
GBeanInfoBuilder(OpenORBSkeletonGenerator.class, SkeletonGenerator.GBEAN_INFO);
infoFactory.addAttribute("verbose", Boolean.TYPE, true);
infoFactory.addReference("Compiler", Compiler.class);
+ infoFactory.addAttribute("classLoader", ClassLoader.class, false);
+ infoFactory.setConstructor(new String[]{"classLoader"});
GBEAN_INFO = infoFactory.getBeanInfo();
}
1.2 +5 -3
openejb/modules/core/src/java/org/openejb/corba/compiler/SkeletonGenerator.java
Index: SkeletonGenerator.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/compiler/SkeletonGenerator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SkeletonGenerator.java 5 Nov 2004 23:46:13 -0000 1.1
+++ SkeletonGenerator.java 10 Nov 2004 04:38:31 -0000 1.2
@@ -46,6 +46,7 @@
import java.io.File;
import java.util.Properties;
+import java.util.Set;
import org.apache.geronimo.gbean.GBeanInfo;
import org.apache.geronimo.gbean.GBeanInfoBuilder;
@@ -67,7 +68,7 @@
this.props = props;
}
- public abstract void generateSkeleton(Class iface, File destination)
throws CompilerException;
+ public abstract void generateSkeletons(Set interfaces, File destination,
ClassLoader cl) throws CompilerException;
public static final GBeanInfo GBEAN_INFO;
@@ -75,6 +76,7 @@
GBeanInfoBuilder infoFactory = new
GBeanInfoBuilder(SkeletonGenerator.class);
infoFactory.addAttribute("props", Properties.class, true);
+ infoFactory.addOperation("generateSkeletons", new Class[]
{Set.class, File.class, ClassLoader.class});
GBEAN_INFO = infoFactory.getBeanInfo();
}