You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by gt...@apache.org on 2011/09/14 06:20:03 UTC
svn commit: r1170432 - in /river/jtsk/skunk/surrogate: ./
src/org/apache/river/container/ test/org/apache/river/container/
Author: gtrasuk
Date: Wed Sep 14 04:20:03 2011
New Revision: 1170432
URL: http://svn.apache.org/viewvc?rev=1170432&view=rev
Log:
Continuing work on the surrogate classloading and container startup code.
Modified:
river/jtsk/skunk/surrogate/build.xml
river/jtsk/skunk/surrogate/src/org/apache/river/container/AnnotatedClassDeployer.java
river/jtsk/skunk/surrogate/src/org/apache/river/container/DeployedObject.java
river/jtsk/skunk/surrogate/src/org/apache/river/container/StarterServiceDeployer.java
river/jtsk/skunk/surrogate/test/org/apache/river/container/CommonsVFSTest.java
Modified: river/jtsk/skunk/surrogate/build.xml
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/build.xml?rev=1170432&r1=1170431&r2=1170432&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/build.xml (original)
+++ river/jtsk/skunk/surrogate/build.xml Wed Sep 14 04:20:03 2011
@@ -159,7 +159,7 @@
</xjc>
</target>
- <target name="-post-jar">
+ <target name="-post-jar" depends="-build-reggie-module">
<antcall target="-build-testroot" inheritall="true"/>
</target>
@@ -179,6 +179,10 @@
<include name="RiverSurrogate.jar"/>
</fileset>
</copy>
+ <mkdir dir="${build.testroot}/profile/default/deploy"/>
+ <copy todir="${build.testroot}/profile/default/deploy">
+ <fileset dir="${basedir}/build/test/files" includes="reggie-module.ssar"/>
+ </copy>
</target>
</project>
Modified: river/jtsk/skunk/surrogate/src/org/apache/river/container/AnnotatedClassDeployer.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/AnnotatedClassDeployer.java?rev=1170432&r1=1170431&r2=1170432&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/AnnotatedClassDeployer.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/AnnotatedClassDeployer.java Wed Sep 14 04:20:03 2011
@@ -118,14 +118,18 @@ public class AnnotatedClassDeployer impl
*/
private boolean initializeIfFullyResolved(DeployedObject deployed) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
if (deployed.getUnresolvedDependencies().isEmpty()) {
- uninitializedObjects.remove(deployed);
- for (Method initMethod : deployed.getInitMethods()) {
- initMethod.invoke(deployed.getDeployedObject());
- }
- notifyDeploymentListeners(deployed);
- initializedObjects.put(deployed.getName(), deployed);
- if (deployed.getDeployedObject() instanceof DeploymentListener) {
- deploymentListeners.add((DeploymentListener) deployed.getDeployedObject());
+ if (deployed.isInitialized() == false) {
+
+ uninitializedObjects.remove(deployed);
+ for (Method initMethod : deployed.getInitMethods()) {
+ initMethod.invoke(deployed.getDeployedObject());
+ }
+ notifyDeploymentListeners(deployed);
+ initializedObjects.put(deployed.getName(), deployed);
+ if (deployed.getDeployedObject() instanceof DeploymentListener) {
+ deploymentListeners.add((DeploymentListener) deployed.getDeployedObject());
+ }
+ deployed.setInitialized(true);
}
return true;
}
@@ -249,7 +253,7 @@ public class AnnotatedClassDeployer impl
}
/** Build a list of members that might be candidates for injection.
-
+
@param cls
@return
@throws SecurityException
@@ -383,7 +387,7 @@ public class AnnotatedClassDeployer impl
unresolved dependencies for this object. If there are no further
unresolved dependencies, call the object's init method and move it into
the initialized objects group.
-
+
@param deployed The holder for the deployment unit.
@param m The member (either Field or Method that is used to set the value.
@param val The value to set.
Modified: river/jtsk/skunk/surrogate/src/org/apache/river/container/DeployedObject.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/DeployedObject.java?rev=1170432&r1=1170431&r2=1170432&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/DeployedObject.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/DeployedObject.java Wed Sep 14 04:20:03 2011
@@ -33,7 +33,16 @@ public class DeployedObject {
private String name;
private List<Member> unresolvedDependencies=new ArrayList<Member>();
private List<Method> initMethods=new ArrayList<Method>();
+ private boolean initialized=false;
+ public boolean isInitialized() {
+ return initialized;
+ }
+
+ public void setInitialized(boolean isInitialized) {
+ this.initialized = isInitialized;
+ }
+
public List<Method> getInitMethods() {
return initMethods;
}
Modified: river/jtsk/skunk/surrogate/src/org/apache/river/container/StarterServiceDeployer.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/StarterServiceDeployer.java?rev=1170432&r1=1170431&r2=1170432&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/StarterServiceDeployer.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/StarterServiceDeployer.java Wed Sep 14 04:20:03 2011
@@ -31,6 +31,7 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSelector;
+import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileType;
import org.apache.river.container.classloading.VirtualFileSystemClassLoader;
import org.apache.river.container.codebase.CodebaseContext;
@@ -65,6 +66,54 @@ public class StarterServiceDeployer {
@Injected
private ArgsParser argsParser = null;
+ public void addPlatformCodebaseJars(CodebaseContext codebaseContext) throws IOException {
+ /* Register the platform codebase jars with the codebase service. */
+ String platformCodebaseSpec = configProperties.getProperty(Strings.PLATFORM_CODEBASE);
+ String[] codebaseJars = Utils.splitOnWhitespace(platformCodebaseSpec);
+ for (String codebaseJar : codebaseJars) {
+ FileObject fo = fileUtility.getLibDirectory().resolveFile(codebaseJar);
+ codebaseContext.addFile(fo);
+ }
+ }
+
+ public String[] constructArgs(String argLine) {
+ String[] args = null;
+ if (argLine == null) {
+ args = new String[0];
+ } else {
+ args = argsParser.toArgs(argLine);
+ }
+ return args;
+ }
+
+ public VirtualFileSystemClassLoader createServiceClassloader(FileObject serviceRoot) throws IOException, FileSystemException {
+ /* Create the service classloader. */
+ VirtualFileSystemClassLoader cl =
+ new VirtualFileSystemClassLoader(null, systemClassLoader);
+ /* Include platform jars from the container's lib directory. */
+ String platformJarSpec = configProperties.getProperty(Strings.PLATFORM_JARS);
+ log.log(Level.FINE, MessageNames.ADDING_CLASSPATH_ENTRY, new Object[]{platformJarSpec});
+ cl.addClassPathEntry(fileUtility.getLibDirectory(), platformJarSpec);
+ /* Add the jar files from the service's 'lib' directory. */
+ FileObject libDir = serviceRoot.resolveFile(Strings.LIB);
+ List<FileObject> jarFiles = Utils.findChildrenWithSuffix(libDir,
+ Strings.DOT_JAR);
+ for (FileObject jarFile : jarFiles) {
+ cl.addClassPathEntry(libDir, jarFile.getName().getBaseName());
+ }
+ return cl;
+ }
+
+ public void exportServiceCodebaseJars(FileObject serviceRoot, CodebaseContext codebaseContext) throws FileSystemException {
+ /* Register the service's codebase jars with the codebase service. */
+ FileObject libDlDir = serviceRoot.resolveFile(Strings.LIB_DL);
+ List<FileObject> dljarFiles = Utils.findChildrenWithSuffix(libDlDir,
+ Strings.DOT_JAR);
+ for (FileObject jarFile : dljarFiles) {
+ codebaseContext.addFile(jarFile);
+ }
+ }
+
@Init
public void init() {
try {
@@ -79,6 +128,49 @@ public class StarterServiceDeployer {
}
}
+ public void launchService(Properties startProps, String[] args) {
+ String startClassName = startProps.getProperty(Strings.START_CLASS);
+ /* Launch the service. */
+ log.log(Level.FINE, MessageNames.CALLING_MAIN, new Object[] {
+ startClassName, Utils.format(args)
+ });
+
+ }
+
+ public Properties readStartProperties(FileObject serviceRoot) throws FileSystemException, LocalizedRuntimeException, IOException {
+ /* Read the start.properties file. */
+ FileObject startProperties = serviceRoot.resolveFile(Strings.START_PROPERTIES);
+ if (startProperties == null || !startProperties.getType().equals(FileType.FILE)
+ || !startProperties.isReadable()) {
+ throw new LocalizedRuntimeException(MessageNames.BUNDLE_NAME,
+ MessageNames.CANT_READ_START_PROPERTIES,
+ new Object[]{Strings.START_PROPERTIES,
+ serviceRoot.getName().getBaseName()});
+ }
+ Properties startProps = propertiesFileReader.getProperties(startProperties);
+ return startProps;
+ }
+
+ public void setupLiaisonConfiguration(FileObject serviceArchive, FileObject serviceRoot, VirtualFileSystemClassLoader cl) throws ConfigurationException {
+ /* Setup the liaison configuration. */
+ try {
+ File workingDir = null;
+ if (serviceArchive != null) {
+ workingDir = new File(serviceArchive.getURL().toURI());
+ } else {
+ workingDir = new File(serviceRoot.getURL().toURI());
+
+ }
+ invokeStatic(cl, VirtualFileSystemConfiguration.class.getName(),
+ Strings.SET_WORKING_DIRECTORY,
+ workingDir);
+ } catch (Exception ex) {
+ log.log(Level.WARNING, MessageNames.EXCEPTION_THROWN, ex);
+ throw new ConfigurationException(ex,
+ MessageNames.STARTER_SERVICE_DEPLOYER_FAILED_INIT);
+ }
+ }
+
private void tryInitialize() throws IOException {
log.log(Level.FINE, MessageNames.STARTER_SERVICE_DEPLOYER_STARTING, myName);
/* Establish the deployment directory. */
@@ -142,85 +234,23 @@ public class StarterServiceDeployer {
}
private void deployService(FileObject serviceArchive, FileObject serviceRoot) throws IOException {
String serviceName=findServiceName(serviceArchive, serviceRoot);
- /* Create the service classloader. */
- VirtualFileSystemClassLoader cl =
- new VirtualFileSystemClassLoader(null, systemClassLoader);
- /* Include platform jars from the container's lib directory. */
- String platformJarSpec = configProperties.getProperty(Strings.PLATFORM_JARS);
- log.log(Level.FINE, MessageNames.ADDING_CLASSPATH_ENTRY, new Object[]{platformJarSpec});
- cl.addClassPathEntry(fileUtility.getLibDirectory(), platformJarSpec);
-
- /* Add the jar files from the service's 'lib' directory. */
- FileObject libDir = serviceRoot.resolveFile(Strings.LIB);
- List<FileObject> jarFiles = Utils.findChildrenWithSuffix(libDir,
- Strings.DOT_JAR);
- for (FileObject jarFile : jarFiles) {
- cl.addClassPathEntry(libDir, jarFile.getName().getBaseName());
- }
+ VirtualFileSystemClassLoader cl = createServiceClassloader(serviceRoot);
/* Create a codebase context. */
CodebaseContext codebaseContext = codebaseHandler.createContext();
-
- /* Register the platform codebase jars with the codebase service. */
- String platformCodebaseSpec = configProperties.getProperty(Strings.PLATFORM_CODEBASE);
- String[] codebaseJars = Utils.splitOnWhitespace(platformCodebaseSpec);
- for (String codebaseJar : codebaseJars) {
- FileObject fo = fileUtility.getLibDirectory().resolveFile(codebaseJar);
- codebaseContext.addFile(fo);
- }
-
- /* Register the service's codebase jars with the codebase service. */
- FileObject libDlDir = serviceRoot.resolveFile(Strings.LIB_DL);
- List<FileObject> dljarFiles = Utils.findChildrenWithSuffix(libDlDir,
- Strings.DOT_JAR);
- for (FileObject jarFile : dljarFiles) {
- codebaseContext.addFile(jarFile);
- }
+ addPlatformCodebaseJars(codebaseContext);
+ exportServiceCodebaseJars(serviceRoot, codebaseContext);
/* Setup the classloader's codebase annotation. */
cl.setCodebase(codebaseContext.getCodebaseAnnotation());
/* Grant the appropriate permissions to the service's classloader and
protection domain. */
// TODO: Figure out how the protection domains, codesources, etc need to work.
-
- /* Setup the liaison configuration. */
- try {
- File workingDir = null;
- if (serviceArchive != null) {
- workingDir = new File(serviceArchive.getURL().toURI());
- } else {
- workingDir = new File(serviceRoot.getURL().toURI());
-
- }
- invokeStatic(cl, VirtualFileSystemConfiguration.class.getName(),
- Strings.SET_WORKING_DIRECTORY,
- workingDir);
- } catch (Exception ex) {
- log.log(Level.WARNING, MessageNames.EXCEPTION_THROWN, ex);
- throw new ConfigurationException(ex,
- MessageNames.STARTER_SERVICE_DEPLOYER_FAILED_INIT);
- }
- /* Read the start.properties file. */
- FileObject startProperties = serviceRoot.resolveFile(Strings.START_PROPERTIES);
- if (startProperties == null || !startProperties.getType().equals(FileType.FILE)
- || !startProperties.isReadable()) {
- throw new LocalizedRuntimeException(MessageNames.BUNDLE_NAME,
- MessageNames.CANT_READ_START_PROPERTIES,
- new Object[]{Strings.START_PROPERTIES,
- serviceRoot.getName().getBaseName()});
- }
- Properties startProps = propertiesFileReader.getProperties(startProperties);
+ setupLiaisonConfiguration(serviceArchive, serviceRoot, cl);
+ Properties startProps = readStartProperties(serviceRoot);
String argLine = startProps.getProperty(Strings.START_PARAMETERS);
- String[] args = null;
- if (argLine == null) {
- args = new String[0];
- } else {
- args = argsParser.toArgs(argLine);
- }
- String startClassName = startProps.getProperty(Strings.START_CLASS);
- /* Launch the service. */
- log.log(Level.FINE, MessageNames.CALLING_MAIN, new Object[] {
- startClassName, Utils.format(args)
- });
+ String[] args = constructArgs(argLine);
+
+ launchService(startProps, args);
// TODO: Call the main class/method.
log.log(Level.INFO, MessageNames.COMPLETED_SERVICE_DEPLOYMENT, serviceName);
}
Modified: river/jtsk/skunk/surrogate/test/org/apache/river/container/CommonsVFSTest.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/test/org/apache/river/container/CommonsVFSTest.java?rev=1170432&r1=1170431&r2=1170432&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/test/org/apache/river/container/CommonsVFSTest.java (original)
+++ river/jtsk/skunk/surrogate/test/org/apache/river/container/CommonsVFSTest.java Wed Sep 14 04:20:03 2011
@@ -94,9 +94,9 @@ public class CommonsVFSTest {
@Test
public void testFileInReggieModuleJar() throws Exception {
FileObject reggieJar =
- fileSystemManager.resolveFile(new File("../../build/test/files"), "reggie-module.jar");
- assertTrue("Bad file:" + reggieJar.toString(), reggieJar.toString().endsWith("reggie-module.jar"));
- FileObject reggieJarFS = fileSystemManager.createFileSystem(reggieJar);
+ fileSystemManager.resolveFile(new File("../../build/test/files"), "reggie-module.ssar");
+ assertTrue("Bad file:" + reggieJar.toString(), reggieJar.toString().endsWith("reggie-module.ssar"));
+ FileObject reggieJarFS = fileSystemManager.createFileSystem(Strings.JAR, reggieJar);
FileObject startProperties = reggieJarFS.resolveFile("start.properties");
assertNotNull(startProperties);