[jboss-cvs] JBossAS SVN: r86761 - in projects/reloaded/trunk: embedded and 14 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Apr 3 14:42:01 EDT 2009
Author: wolfc
Date: 2009-04-03 14:42:01 -0400 (Fri, 03 Apr 2009)
New Revision: 86761
Added:
projects/reloaded/trunk/embedded/
projects/reloaded/trunk/embedded/.classpath
projects/reloaded/trunk/embedded/.project
projects/reloaded/trunk/embedded/.settings/
projects/reloaded/trunk/embedded/.settings/org.eclipse.jdt.core.prefs
projects/reloaded/trunk/embedded/.settings/org.maven.ide.eclipse.prefs
projects/reloaded/trunk/embedded/pom.xml
projects/reloaded/trunk/embedded/src/
projects/reloaded/trunk/embedded/src/main/
projects/reloaded/trunk/embedded/src/main/java/
projects/reloaded/trunk/embedded/src/main/java/org/
projects/reloaded/trunk/embedded/src/main/java/org/jboss/
projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/
projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/embedded/
projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/embedded/jarboot/
projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/embedded/jarboot/JarBoot.java
projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/embedded/lang/
projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/embedded/lang/vfs/
projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/embedded/lang/vfs/VFSClassLoader.java
projects/reloaded/trunk/embedded/src/main/resources/
projects/reloaded/trunk/embedded/src/main/resources/META-INF/
projects/reloaded/trunk/embedded/src/main/resources/META-INF/jarboot.properties
projects/reloaded/trunk/embedded/src/test/
projects/reloaded/trunk/embedded/src/test/java/
Log:
RELOADED-7: created a Reloaded Embedded
Property changes on: projects/reloaded/trunk/embedded
___________________________________________________________________
Name: svn:ignore
+ target
eclipse-target
Added: projects/reloaded/trunk/embedded/.classpath
===================================================================
--- projects/reloaded/trunk/embedded/.classpath (rev 0)
+++ projects/reloaded/trunk/embedded/.classpath 2009-04-03 18:42:01 UTC (rev 86761)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+ <classpathentry kind="src" output="eclipse-target/test-classes" path="src/test/java"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.5.0_15"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="output" path="eclipse-target/classes"/>
+</classpath>
Added: projects/reloaded/trunk/embedded/.project
===================================================================
--- projects/reloaded/trunk/embedded/.project (rev 0)
+++ projects/reloaded/trunk/embedded/.project 2009-04-03 18:42:01 UTC (rev 86761)
@@ -0,0 +1,17 @@
+<projectDescription>
+ <name>jboss-reloaded-embedded</name>
+ <comment>Boot up VDF with just a single jar.</comment>
+ <projects/>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
Added: projects/reloaded/trunk/embedded/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- projects/reloaded/trunk/embedded/.settings/org.eclipse.jdt.core.prefs (rev 0)
+++ projects/reloaded/trunk/embedded/.settings/org.eclipse.jdt.core.prefs 2009-04-03 18:42:01 UTC (rev 86761)
@@ -0,0 +1,5 @@
+#Fri Apr 03 13:14:18 CEST 2009
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
Added: projects/reloaded/trunk/embedded/.settings/org.maven.ide.eclipse.prefs
===================================================================
--- projects/reloaded/trunk/embedded/.settings/org.maven.ide.eclipse.prefs (rev 0)
+++ projects/reloaded/trunk/embedded/.settings/org.maven.ide.eclipse.prefs 2009-04-03 18:42:01 UTC (rev 86761)
@@ -0,0 +1,8 @@
+#Fri Apr 03 13:37:27 CEST 2009
+activeProfiles=eclipse
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+version=1
Added: projects/reloaded/trunk/embedded/pom.xml
===================================================================
--- projects/reloaded/trunk/embedded/pom.xml (rev 0)
+++ projects/reloaded/trunk/embedded/pom.xml 2009-04-03 18:42:01 UTC (rev 86761)
@@ -0,0 +1,79 @@
+<!--
+ vi:ts=2:sw=2:expandtab
+-->
+<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">
+ <parent>
+ <groupId>org.jboss.reloaded</groupId>
+ <artifactId>jboss-reloaded-build</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ <relativePath>../build/pom.xml</relativePath>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>jboss-reloaded-embedded</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ <packaging>jar</packaging>
+ <name>JBoss Reloaded Embedded VDF Bootstrap</name>
+ <url>http://www.jboss.org</url>
+ <description>
+ Boot up VDF with just a single jar.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>unpack</id>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ <configuration>
+ </configuration>
+ </execution>
+ <execution>
+ <id>unpack-dependencies</id>
+ <goals>
+ <goal>unpack-dependencies</goal>
+ </goals>
+ <configuration>
+ <includeScope>runtime</includeScope>
+ </configuration>
+ </execution>
+ </executions>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.jboss.reloaded</groupId>
+ <artifactId>jboss-reloaded-vdf-bootstrap</artifactId>
+ <classifier>dist</classifier>
+ <type>zip</type>
+ <version>0.1.0-SNAPSHOT</version>
+ </artifactItem>
+ </artifactItems>
+ <!-- make sure it works under eclipse profile -->
+ <markersDirectory>${project.build.outputDirectory}/../dependency-maven-plugin-markers</markersDirectory>
+ <stripVersion>true</stripVersion>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <mainClass>org.jboss.reloaded.embedded.jarboot.JarBoot</mainClass>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss</groupId>
+ <artifactId>jboss-vfs</artifactId>
+ <version>2.2.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>
Added: projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/embedded/jarboot/JarBoot.java
===================================================================
--- projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/embedded/jarboot/JarBoot.java (rev 0)
+++ projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/embedded/jarboot/JarBoot.java 2009-04-03 18:42:01 UTC (rev 86761)
@@ -0,0 +1,182 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This 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 software 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 software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.reloaded.embedded.jarboot;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.jar.Attributes;
+import java.util.jar.JarInputStream;
+import java.util.jar.Manifest;
+
+import org.jboss.reloaded.embedded.lang.vfs.VFSClassLoader;
+import org.jboss.virtual.VFS;
+import org.jboss.virtual.VirtualFile;
+import org.jboss.virtual.spi.cache.VFSCacheFactory;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class JarBoot
+{
+ public static final String JARBOOT_PROPERTIES = "jarboot.properties";
+
+ public static final String BOOT_PROPERTY = "boot";
+
+ private static boolean debug = false;
+
+ static
+ {
+ debug = Boolean.getBoolean("jarboot.debug");
+ }
+
+ private static void debug(String s)
+ {
+ if(debug)
+ System.err.println(s);
+ }
+
+ private static URL getResource(String name) throws IOException, URISyntaxException
+ {
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ URL url = classLoader.getResource(name);
+ if(url == null)
+ return null;
+
+ debug("JarBoot.getResource: url = " + url);
+
+ VirtualFile file = VFS.getRoot(url);
+ debug("JarBoot.getResource: " + file.toURL());
+ return file.toURL();
+// return url;
+ }
+
+ public static void main(String args[]) throws Exception
+ {
+ VFSCacheFactory.getInstance("org.jboss.virtual.plugins.cache.IterableTimedVFSCache");
+ VFS.init();
+
+ //ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+
+ String resourceName = "META-INF/" + JARBOOT_PROPERTIES;
+ URL jarBootURL = getResource(resourceName);
+ if(jarBootURL == null)
+ throw new IllegalStateException("Resource '" + resourceName + "' could not be found");
+
+ debug("JarBoot.main: jarBootURL = " + jarBootURL);
+
+ Properties props = new Properties();
+ InputStream in = jarBootURL.openStream();
+ try
+ {
+ props.load(new BufferedInputStream(in));
+ }
+ finally
+ {
+ in.close();
+ }
+
+ String boot = props.getProperty(BOOT_PROPERTY);
+ if(boot == null)
+ throw new IllegalStateException("Property " + BOOT_PROPERTY + " was not specified in " + jarBootURL);
+
+ URL bootJarURL = getResource(boot);
+ if(bootJarURL == null)
+ throw new IllegalStateException("Boot jar '" + boot + "' could not be found");
+
+ String s = bootJarURL.toExternalForm();
+ debug("JarBoot.main: s = " + s);
+ URL context = new URL(s.substring(0, s.length() - boot.length()));
+ debug("JarBoot.main: context = " + context);
+
+ Manifest mf;
+ JarInputStream jis = new JarInputStream(new BufferedInputStream(bootJarURL.openStream()));
+ try
+ {
+ mf = jis.getManifest();
+ }
+ finally
+ {
+ jis.close();
+ }
+ if(mf == null)
+ throw new IllegalStateException("Boot jar " + bootJarURL + " does not contain a manifest");
+
+ Attributes attrs = mf.getMainAttributes();
+ String mainClassName = attrs.getValue("Main-Class");
+ if(mainClassName == null)
+ throw new IllegalStateException("Manifest of boot jar " + bootJarURL + " does not contain a Main-Class");
+
+ List<URL> urls = new ArrayList<URL>();
+ urls.add(bootJarURL);
+ String classPath = attrs.getValue("Class-Path");
+ if(classPath != null)
+ {
+ StringTokenizer st = new StringTokenizer(classPath, " ");
+ while(st.hasMoreTokens())
+ {
+ String spec = st.nextToken();
+ URL url = new URL(context, spec + "/");
+ debug("JarBoot.main: url = " + url);
+ urls.add(url);
+ }
+ }
+
+ URLClassLoader nextClassLoader = new VFSClassLoader(urls.toArray(new URL[0]), null);
+ Class<?> mainClass;
+ try
+ {
+ mainClass = nextClassLoader.loadClass(mainClassName);
+ }
+ catch(ClassNotFoundException e)
+ {
+ throw new ClassNotFoundException(mainClassName + " in " + urls, e);
+ }
+
+ Method mainMethod = mainClass.getMethod("main", String[].class);
+
+ Object a[] = { args };
+ try
+ {
+ mainMethod.invoke(null, a);
+ }
+ catch(InvocationTargetException e)
+ {
+ Throwable cause = e.getCause();
+ if(cause instanceof Error)
+ throw (Error) cause;
+ if(cause instanceof RuntimeException)
+ throw (RuntimeException) cause;
+ throw (Exception) cause;
+ }
+ }
+}
Added: projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/embedded/lang/vfs/VFSClassLoader.java
===================================================================
--- projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/embedded/lang/vfs/VFSClassLoader.java (rev 0)
+++ projects/reloaded/trunk/embedded/src/main/java/org/jboss/reloaded/embedded/lang/vfs/VFSClassLoader.java 2009-04-03 18:42:01 UTC (rev 86761)
@@ -0,0 +1,213 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This 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 software 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 software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.reloaded.embedded.lang.vfs;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.security.CodeSigner;
+import java.security.CodeSource;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+import java.util.jar.Attributes.Name;
+
+import org.jboss.virtual.VFS;
+import org.jboss.virtual.VirtualFile;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class VFSClassLoader extends URLClassLoader
+{
+ private Map<URL, VirtualFile> cache = new HashMap<URL, VirtualFile>();
+
+ public VFSClassLoader(URL urls[], ClassLoader parent) throws IOException
+ {
+ super(urls, parent);
+
+ for(URL url : urls)
+ {
+ String protocol = url.getProtocol();
+ if(protocol.startsWith("vfs"))
+ {
+ cache.put(url, VFS.getRoot(url));
+ }
+ }
+ }
+
+ protected Class<?> defineClass(String name, URL url, VirtualFile resource) throws IOException
+ {
+ int i = name.lastIndexOf('.');
+ if(i != -1)
+ {
+ String pkgname = name.substring(0, i);
+ // Check if package already loaded.
+ Package pkg = getPackage(pkgname);
+ //Manifest man = res.getManifest();
+ Manifest man = null;
+ if (pkg != null)
+ {
+ // Package found, so check package sealing.
+ if (pkg.isSealed())
+ {
+ // Verify that code source URL is the same.
+ if (!pkg.isSealed(url))
+ {
+ throw new SecurityException("sealing violation: package " + pkgname + " is sealed");
+ }
+
+ }
+ else
+ {
+ // Make sure we are not attempting to seal the package
+ // at this code source URL.
+ if ((man != null) && isSealed(pkgname, man))
+ {
+ throw new SecurityException("sealing violation: can't seal package " + pkgname + ": already loaded");
+ }
+ }
+ }
+ else
+ {
+ if (man != null)
+ {
+ definePackage(pkgname, man, url);
+ }
+ else
+ {
+ definePackage(pkgname, null, null, null, null, null, null, null);
+ }
+ }
+ }
+ byte b[] = readResource(resource);
+ // TODO: a lot
+ CodeSigner signers[] = null;
+ CodeSource cs = new CodeSource(url, signers);
+ int off = 0;
+ int len = b.length;
+ return defineClass(name, b, off, len, cs);
+ }
+
+ @Override
+ protected Class<?> findClass(String name) throws ClassNotFoundException
+ {
+ String path = name.replace('.', '/').concat(".class");
+ URL urls[] = getURLs();
+ for(URL url : urls)
+ {
+ String protocol = url.getProtocol();
+ if(protocol.startsWith("vfs"))
+ {
+ try
+ {
+ /*
+ URL resourceURL = new URL(url, path);
+ byte b[] = readResource(resourceURL);
+ // TODO: a lot
+ CodeSigner signers[] = null;
+ CodeSource cs = new CodeSource(url, signers);
+ int off = 0;
+ int len = b.length;
+ return defineClass(name, b, off, len, cs);
+ */
+ //VirtualFile file = VFS.getRoot(url);
+ VirtualFile root = cache.get(url);
+ assert root != null : "cache has failed for " + url;
+ VirtualFile resource = root.getChild(path);
+ if(resource != null)
+ {
+ return defineClass(name, url, resource);
+ }
+ }
+ catch(IOException e1)
+ {
+ // ignore
+ //e1.printStackTrace();
+ }
+ }
+ }
+ return super.findClass(name);
+ }
+
+ /**
+ * Returns true if the specified package name is sealed according to the
+ * given manifest.
+ */
+ protected boolean isSealed(String name, Manifest man)
+ {
+ String path = name.replace('.', '/').concat("/");
+ Attributes attr = man.getAttributes(path);
+ String sealed = null;
+ if (attr != null)
+ {
+ sealed = attr.getValue(Name.SEALED);
+ }
+ if (sealed == null)
+ {
+ if ((attr = man.getMainAttributes()) != null)
+ {
+ sealed = attr.getValue(Name.SEALED);
+ }
+ }
+ return "true".equalsIgnoreCase(sealed);
+ }
+
+ protected byte[] readResource(URL url) throws IOException
+ {
+ byte buf[] = new byte[4096];
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ BufferedInputStream in = new BufferedInputStream(url.openStream());
+ try
+ {
+ int l;
+ while((l = in.read(buf)) != -1)
+ out.write(buf, 0, l);
+ }
+ finally
+ {
+ in.close();
+ }
+ return out.toByteArray();
+ }
+
+ protected byte[] readResource(VirtualFile file) throws IOException
+ {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ BufferedInputStream in = new BufferedInputStream(file.openStream());
+ try
+ {
+ int b;
+ while((b = in.read()) != -1)
+ out.write(b);
+ }
+ finally
+ {
+ in.close();
+ }
+ return out.toByteArray();
+ }
+}
Added: projects/reloaded/trunk/embedded/src/main/resources/META-INF/jarboot.properties
===================================================================
--- projects/reloaded/trunk/embedded/src/main/resources/META-INF/jarboot.properties (rev 0)
+++ projects/reloaded/trunk/embedded/src/main/resources/META-INF/jarboot.properties 2009-04-03 18:42:01 UTC (rev 86761)
@@ -0,0 +1 @@
+boot=jboss-reloaded-vdf-bootstrap.jar
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list