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 2012/04/17 17:17:53 UTC

svn commit: r1327138 - in /river/jtsk/skunk/surrogate: ./ src/org/apache/river/container/ src/org/apache/river/container/classloading/ src/org/apache/river/container/deployer/ src/org/apache/river/container/security/ test/org/apache/river/container/dep...

Author: gtrasuk
Date: Tue Apr 17 15:17:52 2012
New Revision: 1327138

URL: http://svn.apache.org/viewvc?rev=1327138&view=rev
Log:
Ongoing work on starter service deployer.
Changed from properties file to a custom dialect for deployer configuration.
Added ApplicationEnvironment to track deployed services.

Added:
    river/jtsk/skunk/surrogate/src/org/apache/river/container/Optional.java
      - copied, changed from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/Injected.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/
    river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ASTNode.java
      - copied, changed from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/security/ASTNode.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ApplicationEnvironment.java
      - copied, changed from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/ApplicationEnvironment.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ClasspathFilterBuilder.java
      - copied, changed from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilterBuilder.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/DeployerConfigParser.jjt
      - copied, changed from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/security/PermissionFileParser.jjt
    river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/StarterServiceDeployer.java
      - copied, changed from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/StarterServiceDeployer.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/Strings.java
      - copied, changed from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/security/Strings.java
    river/jtsk/skunk/surrogate/test/org/apache/river/container/deployer/
    river/jtsk/skunk/surrogate/test/org/apache/river/container/deployer/DeployerConfigParserTest.java
      - copied, changed from r1310153, river/jtsk/skunk/surrogate/test/org/apache/river/container/security/PermissionFileParserTest.java
    river/jtsk/skunk/surrogate/test/org/apache/river/container/deployer/sample.config
      - copied, changed from r1310153, river/jtsk/skunk/surrogate/test/org/apache/river/container/security/sample.policy
Removed:
    river/jtsk/skunk/surrogate/src/org/apache/river/container/ApplicationEnvironment.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/StarterServiceDeployer.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/security/ASTNode.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/security/PermissionFileParser.jjt
    river/jtsk/skunk/surrogate/src/org/apache/river/container/security/Strings.java
    river/jtsk/skunk/surrogate/test/org/apache/river/container/security/PermissionFileParserTest.java
    river/jtsk/skunk/surrogate/test/org/apache/river/container/security/sample.policy
Modified:
    river/jtsk/skunk/surrogate/build.xml
    river/jtsk/skunk/surrogate/src/org/apache/river/container/Host.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/MessageNames.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/Messages.properties
    river/jtsk/skunk/surrogate/src/org/apache/river/container/Strings.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/SurrogateInstaller.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilter.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilterBuilder.java
    river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/VirtualFileSystemClassLoader.java
    river/jtsk/skunk/surrogate/test/org/apache/river/surrogate/SurrogateContextTest.java
    river/jtsk/skunk/surrogate/testfiles/testroot/profile/default/config.xml

Modified: river/jtsk/skunk/surrogate/build.xml
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/build.xml?rev=1327138&r1=1327137&r2=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/build.xml (original)
+++ river/jtsk/skunk/surrogate/build.xml Tue Apr 17 15:17:52 2012
@@ -129,16 +129,16 @@
 
     <!-- Pre-compiler target to run javacc against our parser sources. -->
     <target name="-pre-compile">
-        <!-- Do parser generation for the Permissions parser -->
-        <mkdir dir="${build.generated.sources.dir}/org/apache/river/container/security"/>
+        <!-- Do parser generation for the deployer configuration parser -->
+        <mkdir dir="${build.generated.sources.dir}/org/apache/river/container/deployer"/>
         <jjtree
-            target="${basedir}/src/org/apache/river/container/security/PermissionFileParser.jjt"
-            outputdirectory="${build.generated.sources.dir}/org/apache/river/container/security"
+            target="${basedir}/src/org/apache/river/container/deployer/DeployerConfigParser.jjt"
+            outputdirectory="${build.generated.sources.dir}/org/apache/river/container/deployer"
             javacchome="${libs.JavaCC.src}"
         />
         <javacc
-            target="${build.generated.sources.dir}/org/apache/river/container/security/PermissionFileParser.jj"
-            outputdirectory="${build.generated.sources.dir}/org/apache/river/container/security"
+            target="${build.generated.sources.dir}/org/apache/river/container/deployer/DeployerConfigParser.jj"
+            outputdirectory="${build.generated.sources.dir}/org/apache/river/container/deployer"
             javacchome="${libs.JavaCC.src}"
         />
 

Modified: river/jtsk/skunk/surrogate/src/org/apache/river/container/Host.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/Host.java?rev=1327138&r1=1327137&r2=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/Host.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/Host.java Tue Apr 17 15:17:52 2012
@@ -17,6 +17,7 @@
  */
 package org.apache.river.container;
 
+import org.apache.river.container.deployer.ApplicationEnvironment;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;

Modified: river/jtsk/skunk/surrogate/src/org/apache/river/container/MessageNames.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/MessageNames.java?rev=1327138&r1=1327137&r2=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/MessageNames.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/MessageNames.java Tue Apr 17 15:17:52 2012
@@ -99,6 +99,7 @@ public class MessageNames {
             SECURITY_INIT_FAILED="securityInitializationFailed",
             SECURITY_INIT_SUCCEEDED="securityInitializationSucceeded",
             SECURITY_INIT_WRONG_POLICY="securityInitializationWrongPolicy",
+            SERVICE_PARENT_CLASSLOADER_IS="serviceParentClassloaderIs",
             SHOW_COMMAND_LINE_ARGUMENTS="showCommandLineArguments",
             SHUTDOWN_METHOD_HAS_PARAMETERS="shutdownMethodHasParameters",
             SHUTDOWN_METHOD_NOT_VOID="shutdownMethodIsntVoid",

Modified: river/jtsk/skunk/surrogate/src/org/apache/river/container/Messages.properties
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/Messages.properties?rev=1327138&r1=1327137&r2=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/Messages.properties (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/Messages.properties Tue Apr 17 15:17:52 2012
@@ -81,6 +81,7 @@ readingObject.nonAnnotatedMemberFound=Me
 securityInitializationFailed=Failed to initialize security subsystem.
 securityInitializationSucceeded=Security Manager and Dynamic Policy successfully installed.            
 securityInitializationWrongPolicy=After security manager setup, the wrong policy is installed: {0}.
+serviceParentClassloaderIs=Parent of service classloader is {0}.
 showCommandLineArguments=Command line arguments were: {0}.
 shutdownMethodHasParameters=A method flagged as @Shutdown must take no parameters.  \
 Method ''{1}'' on class ''{0}'' has parameters.

Copied: river/jtsk/skunk/surrogate/src/org/apache/river/container/Optional.java (from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/Injected.java)
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/Optional.java?p2=river/jtsk/skunk/surrogate/src/org/apache/river/container/Optional.java&p1=river/jtsk/skunk/surrogate/src/org/apache/river/container/Injected.java&r1=1310153&r2=1327138&rev=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/Injected.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/Optional.java Tue Apr 17 15:17:52 2012
@@ -56,7 +56,7 @@ import java.lang.annotation.Target;
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
 @Target({ElementType.FIELD, ElementType.METHOD})
-public @interface Injected {
+public @interface Optional {
     String value() default Strings.EMPTY;
     InjectionStyle style() default InjectionStyle.DEFAULT;
 }

Modified: river/jtsk/skunk/surrogate/src/org/apache/river/container/Strings.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/Strings.java?rev=1327138&r1=1327137&r2=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/Strings.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/Strings.java Tue Apr 17 15:17:52 2012
@@ -35,6 +35,7 @@ public class Strings {
             CONTEXT_CLASS = "org.apache.river.container.Context",
             DASH = "-",
             DEFAULT = "default",
+            DEFAULT_DEPLOY_DIRECTORY="deploy",
             DEFAULT_DISCOVERY_CONTEXT = "defaultDiscoveryContext",
             DOT=".",
             DOT_CLASS=".class",
@@ -65,7 +66,7 @@ public class Strings {
             START_CLASS="startClass",
             START_PARAMETERS="startParameters",
             START_PROPERTIES="start.properties",
-            STARTER_SERVICE_DEPLOYER_PROPERTIES="service-starter.properties",
+            STARTER_SERVICE_DEPLOYER_CONFIG="service-starter.cfg",
             SYSTEM_CLASS_LOADER="systemClassLoader",
             TYPE="type",
             UNKNOWN="unknown",

Modified: river/jtsk/skunk/surrogate/src/org/apache/river/container/SurrogateInstaller.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/SurrogateInstaller.java?rev=1327138&r1=1327137&r2=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/SurrogateInstaller.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/SurrogateInstaller.java Tue Apr 17 15:17:52 2012
@@ -18,6 +18,7 @@
 
 package org.apache.river.container;
 
+import org.apache.river.container.deployer.ApplicationEnvironment;
 import java.io.File;
 
 /**

Modified: river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilter.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilter.java?rev=1327138&r1=1327137&r2=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilter.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilter.java Tue Apr 17 15:17:52 2012
@@ -28,7 +28,7 @@ public class ClasspathFilter {
 
     private String jarName = null;
 
-    void setJarName(String s) {
+    public void setJarName(String s) {
         jarName = s;
     }
 

Modified: river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilterBuilder.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilterBuilder.java?rev=1327138&r1=1327137&r2=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilterBuilder.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilterBuilder.java Tue Apr 17 15:17:52 2012
@@ -35,16 +35,8 @@ public class ClasspathFilterBuilder {
 
     public List<ClasspathFilter> parseToFilters(String input) {
         try {
-            Reader r = new StringReader(input);
-            ClasspathExpressionParser parser = new ClasspathExpressionParser(r);
-            parser.cpExpression();
-            ASTcpExpression expression = (ASTcpExpression) parser.jjtree.popNode();
-            List<ClasspathFilter> filters = new ArrayList<ClasspathFilter>();
-            for (int i = 0; i < expression.jjtGetNumChildren(); i++) {
-                ASTcpClause clause = (ASTcpClause) expression.jjtGetChild(i);
-                ClasspathFilter cpf = makeFilter(clause);
-                filters.add(cpf);
-            }
+            ASTcpExpression expression = classpathExpressionFromString(input);
+            List<ClasspathFilter> filters = filtersFromClasspathExpression(expression);
             return filters;
         } catch (ParseException ex) {
             throw new LocalizedRuntimeException(MessageNames.BUNDLE_NAME,
@@ -53,6 +45,24 @@ public class ClasspathFilterBuilder {
         }
     }
 
+    private ASTcpExpression classpathExpressionFromString(String input) throws ParseException {
+        Reader r = new StringReader(input);
+        ClasspathExpressionParser parser = new ClasspathExpressionParser(r);
+        parser.cpExpression();
+        ASTcpExpression expression = (ASTcpExpression) parser.jjtree.popNode();
+        return expression;
+    }
+
+    private List<ClasspathFilter> filtersFromClasspathExpression(ASTcpExpression expression) {
+        List<ClasspathFilter> filters = new ArrayList<ClasspathFilter>();
+        for (int i = 0; i < expression.jjtGetNumChildren(); i++) {
+            ASTcpClause clause = (ASTcpClause) expression.jjtGetChild(i);
+            ClasspathFilter cpf = makeFilter(clause);
+            filters.add(cpf);
+        }
+        return filters;
+    }
+
     public ClasspathFilter makeFilter(ASTcpClause expression) {
         /* First node is the jar name.  Subsequent nodes are the filter
         conditions.

Modified: river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/VirtualFileSystemClassLoader.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/VirtualFileSystemClassLoader.java?rev=1327138&r1=1327137&r2=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/VirtualFileSystemClassLoader.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/VirtualFileSystemClassLoader.java Tue Apr 17 15:17:52 2012
@@ -90,18 +90,22 @@ public class VirtualFileSystemClassLoade
              Create a nested file system from it and add it to the file objects.
              */
             List<ClasspathFilter> filters = new ClasspathFilterBuilder().parseToFilters(classPath);
-            for (ClasspathFilter filter : filters) {
-                FileObject entryObject = fileRoot.resolveFile(filter.getJarName());
-
-                FileObject entryFileSystem =
-                        fileRoot.getFileSystem().getFileSystemManager().createFileSystem(entryObject);
-                classpathEntries.add(new ClasspathEntry(filter, entryFileSystem));
-            }
+            addClasspathFilters(filters, fileRoot);
         } catch (FileSystemException ex) {
             throw new LocalizedRuntimeException(ex, MessageNames.BUNDLE_NAME, MessageNames.INVALID_CLASSPATH_ENTRY, classPath);
         }
     }
 
+    public void addClasspathFilters(List<ClasspathFilter> filters, FileObject fileRoot) throws FileSystemException {
+        for (ClasspathFilter filter : filters) {
+            FileObject entryObject = fileRoot.resolveFile(filter.getJarName());
+
+            FileObject entryFileSystem =
+                    fileRoot.getFileSystem().getFileSystemManager().createFileSystem(entryObject);
+            classpathEntries.add(new ClasspathEntry(filter, entryFileSystem));
+        }
+    }
+
     /**
      Find a resource by searching through all the classpath entries that have
      been set up.

Copied: river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ASTNode.java (from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/security/ASTNode.java)
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ASTNode.java?p2=river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ASTNode.java&p1=river/jtsk/skunk/surrogate/src/org/apache/river/container/security/ASTNode.java&r1=1310153&r2=1327138&rev=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/security/ASTNode.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ASTNode.java Tue Apr 17 15:17:52 2012
@@ -16,12 +16,11 @@
  * limitations under the License.
  */
 
-package org.apache.river.container.security;
+package org.apache.river.container.deployer;
 
-import org.apache.river.container.security.PermissionFileParser;
-import org.apache.river.container.security.PermissionFileParserTreeConstants;
-import org.apache.river.container.security.SimpleNode;
-import org.apache.river.container.security.Strings;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  *
@@ -44,19 +43,19 @@ public class ASTNode extends SimpleNode 
         super(i);
     }
 
-    public ASTNode(PermissionFileParser p, int i) {
+    public ASTNode(DeployerConfigParser p, int i) {
         super(p, i);
     }
 
     public String getName() {
-        return PermissionFileParserTreeConstants.jjtNodeName[id];
+        return DeployerConfigParserTreeConstants.jjtNodeName[id];
     }
 
     public String toString() {
-        if (id==PermissionFileParserTreeConstants.JJTSYMBOL) {
+        if (id==DeployerConfigParserTreeConstants.JJTSYMBOL) {
             return getValue().toString();
         }
-        if (id==PermissionFileParserTreeConstants.JJTLITERAL) {
+        if (id==DeployerConfigParserTreeConstants.JJTLITERAL) {
             Object o=getValue();
             if (o instanceof String) {
                 return "\"" + o.toString() + "\"";
@@ -87,10 +86,33 @@ public class ASTNode extends SimpleNode 
                     sb.append(childStr);
                     sb.append(Strings.RPAREN);
                 } else {
-                    sb.append(jjtGetChild(i).toString());
+                    sb.append(childStr);
                 }
             }
         }
         return sb.toString();
     }
+    
+    public List<ASTNode> search(Class[] path) {
+        List<ASTNode> matches=new ArrayList<ASTNode>();
+        search(path, matches);
+        return matches;
+    }
+    
+    public void search(Class[] path, List<ASTNode> matches) {
+        if (path.length==0) {
+            return;
+        }
+        if (!this.getClass().equals(path[0])){
+            return;
+        }
+        if (path.length==1) {
+            matches.add(this);
+            return;
+        }
+        path=Arrays.copyOfRange(path, 1, path.length);
+        for (int i=0; i < this.jjtGetNumChildren(); i++) {
+            ((ASTNode) jjtGetChild(i)).search(path, matches);
+        }
+    }
 }

Copied: river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ApplicationEnvironment.java (from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/ApplicationEnvironment.java)
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ApplicationEnvironment.java?p2=river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ApplicationEnvironment.java&p1=river/jtsk/skunk/surrogate/src/org/apache/river/container/ApplicationEnvironment.java&r1=1310153&r2=1327138&rev=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/ApplicationEnvironment.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ApplicationEnvironment.java Tue Apr 17 15:17:52 2012
@@ -16,22 +16,52 @@
  * limitations under the License.
  */
 
-package org.apache.river.container;
+package org.apache.river.container.deployer;
+
+import org.apache.commons.vfs.FileObject;
+import org.apache.river.container.classloading.VirtualFileSystemClassLoader;
+import org.apache.river.container.codebase.CodebaseContext;
 
 /**
  * Everything the host needs to know about the surrogate.
  * @author trasukg
  */
 public class ApplicationEnvironment {
+    VirtualFileSystemClassLoader classLoader=null;
 
-    SettableCodebaseClassLoader classLoader=null;
+    FileObject serviceArchive=null;
+    FileObject serviceRoot=null;
+    CodebaseContext codebaseContext=null;
 
-    public SettableCodebaseClassLoader getClassLoader() {
+    public VirtualFileSystemClassLoader getClassLoader() {
         return classLoader;
     }
 
-    public void setClassLoader(SettableCodebaseClassLoader classLoader) {
+    public void setClassLoader(VirtualFileSystemClassLoader classLoader) {
         this.classLoader = classLoader;
     }
 
+    public FileObject getServiceArchive() {
+        return serviceArchive;
+    }
+
+    public void setServiceArchive(FileObject serviceArchive) {
+        this.serviceArchive = serviceArchive;
+    }
+
+    public FileObject getServiceRoot() {
+        return serviceRoot;
+    }
+
+    public void setServiceRoot(FileObject serviceRoot) {
+        this.serviceRoot = serviceRoot;
+    }
+
+    public CodebaseContext getCodebaseContext() {
+        return codebaseContext;
+    }
+
+    public void setCodebaseContext(CodebaseContext codebaseContext) {
+        this.codebaseContext = codebaseContext;
+    }
 }

Copied: river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ClasspathFilterBuilder.java (from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilterBuilder.java)
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ClasspathFilterBuilder.java?p2=river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ClasspathFilterBuilder.java&p1=river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilterBuilder.java&r1=1310153&r2=1327138&rev=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/classloading/ClasspathFilterBuilder.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/ClasspathFilterBuilder.java Tue Apr 17 15:17:52 2012
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.river.container.classloading;
+package org.apache.river.container.deployer;
 
 import java.io.Reader;
 import java.io.StringReader;
@@ -24,6 +24,11 @@ import java.util.List;
 import java.util.logging.Logger;
 import org.apache.river.container.LocalizedRuntimeException;
 import org.apache.river.container.MessageNames;
+import org.apache.river.container.classloading.Acceptor;
+import org.apache.river.container.classloading.AllAcceptor;
+import org.apache.river.container.classloading.ClasspathFilter;
+import org.apache.river.container.classloading.ResourceAcceptor;
+import org.apache.river.container.classloading.VirtualFileSystemClassLoader;
 
 /**
  *
@@ -33,18 +38,10 @@ public class ClasspathFilterBuilder {
 
     private static final Logger log = Logger.getLogger(ClasspathFilterBuilder.class.getName());
 
-    public List<ClasspathFilter> parseToFilters(String input) {
+    public static List<ClasspathFilter> parseToFilters(String input) {
         try {
-            Reader r = new StringReader(input);
-            ClasspathExpressionParser parser = new ClasspathExpressionParser(r);
-            parser.cpExpression();
-            ASTcpExpression expression = (ASTcpExpression) parser.jjtree.popNode();
-            List<ClasspathFilter> filters = new ArrayList<ClasspathFilter>();
-            for (int i = 0; i < expression.jjtGetNumChildren(); i++) {
-                ASTcpClause clause = (ASTcpClause) expression.jjtGetChild(i);
-                ClasspathFilter cpf = makeFilter(clause);
-                filters.add(cpf);
-            }
+            ASTclasspath expression = classpathExpressionFromString(input);
+            List<ClasspathFilter> filters = filtersFromClasspathExpression(expression);
             return filters;
         } catch (ParseException ex) {
             throw new LocalizedRuntimeException(MessageNames.BUNDLE_NAME,
@@ -53,7 +50,25 @@ public class ClasspathFilterBuilder {
         }
     }
 
-    public ClasspathFilter makeFilter(ASTcpClause expression) {
+    private static ASTclasspath classpathExpressionFromString(String input) throws ParseException {
+        Reader r = new StringReader(input);
+        DeployerConfigParser parser = new DeployerConfigParser(r);
+        parser.classpath();
+        ASTclasspath expression = (ASTclasspath) parser.jjtree.popNode();
+        return expression;
+    }
+
+    public static List<ClasspathFilter> filtersFromClasspathExpression(ASTclasspath expression) {
+        List<ClasspathFilter> filters = new ArrayList<ClasspathFilter>();
+        for (int i = 0; i < expression.jjtGetNumChildren(); i++) {
+            ASTcpEntry clause = (ASTcpEntry) expression.jjtGetChild(i);
+            ClasspathFilter cpf = makeFilter(clause);
+            filters.add(cpf);
+        }
+        return filters;
+    }
+
+    public static ClasspathFilter makeFilter(ASTcpEntry expression) {
         /* First node is the jar name.  Subsequent nodes are the filter
         conditions.
          */
@@ -67,7 +82,7 @@ public class ClasspathFilterBuilder {
                 Acceptor acc = new ResourceAcceptor(resourceName);
                 cpf.getAcceptors().add(acc);
             }
-            if (node instanceof ASTstringLiteral) {
+            if (node instanceof ASTliteral) {
                 log.fine("Building ResourceAcceptor with string '" + node.toString() + "'");
                 Acceptor acc = new ResourceAcceptor(node.toString());
                 cpf.getAcceptors().add(acc);

Copied: river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/DeployerConfigParser.jjt (from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/security/PermissionFileParser.jjt)
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/DeployerConfigParser.jjt?p2=river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/DeployerConfigParser.jjt&p1=river/jtsk/skunk/surrogate/src/org/apache/river/container/security/PermissionFileParser.jjt&r1=1310153&r2=1327138&rev=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/security/PermissionFileParser.jjt (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/DeployerConfigParser.jjt Tue Apr 17 15:17:52 2012
@@ -23,9 +23,9 @@ options {
   NODE_CLASS= "ASTNode";
 }
 
-PARSER_BEGIN(PermissionFileParser)
+PARSER_BEGIN(DeployerConfigParser)
 
-package org.apache.river.container.security;
+package org.apache.river.container.deployer;
 
 import java.io.InputStream;
 import java.io.Reader;
@@ -36,20 +36,20 @@ import java.util.List;
 import java.util.logging.Logger;
 
 
-public class PermissionFileParser {
+public class DeployerConfigParser {
 	private static final Logger log=
-		Logger.getLogger(PermissionFileParser.class.getName());
+		Logger.getLogger(DeployerConfigParser.class.getName());
 
-    public static ASTgrants parseGrants(InputStream in)
+    public static ASTconfig parseConfig(InputStream in)
 	throws ParseException {
 		Reader r=new InputStreamReader(in);
-		PermissionFileParser parser=new PermissionFileParser(r);
-                parser.grants();
-                return (ASTgrants) parser.jjtree.popNode();
+		DeployerConfigParser parser=new DeployerConfigParser(r);
+                parser.config();
+                return (ASTconfig) parser.jjtree.popNode();
     }
 
 }
-PARSER_END(PermissionFileParser)
+PARSER_END(DeployerConfigParser)
 
 /* WHITE SPACE */
 
@@ -76,13 +76,19 @@ TOKEN :
 |  < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
 |  < LONG_LITERAL: ["0"-"9"] (["0"-"9"])* (["l", "L"]) >
 | 	< GRANT: "grant" >
+|       < CLASSLOADER: "classloader">
+|       < CODEBASE: "codebase">
+|       < CONFIGURATION: "configuration">
+|       < JARS: "jars">
+|       < PARENT: "parent">
 | 	< AND: "and" >
 | 	< OR: "or" >
 | 	< NOT: "not" >
 | 	< TRUE: "true" >
 | 	< FALSE: "false" >
 |  	< SYMBOL:
-		["A"-"Z", "a"-"z", "_"] (["0"-"9", "A"-"Z", "a"-"z", ".", "_"])*>
+		["A"-"Z", "a"-"z", "_"] 
+                    (["0"-"9", "A"-"Z", "a"-"z", ".", "_", "-", "$"])*>
 |	< STRING_LITERAL:
  	("\""
     (   (~["\"","\\","\n","\r"])
@@ -123,15 +129,20 @@ TOKEN :
 |	< GTE: ">=" >
 |	< NEQ: "<>" >
 | 	< COMMA: "," >
+|       < LBRACE: "{" >
+|       < RBRACE: "}" >
+|       < LPAREN: "(" >
+|       < RPAREN: ")" >
+|       < SEMICOLON: ";">
 
 }
 
-void grants() #grants:
+void config() #config:
 {
-    log.fine("grants()");
+    log.fine("config()");
 }
 {
-    (grant())*
+    (grant() | classloader() | configuration())*
 }
 
 void grant() #grant:
@@ -142,12 +153,92 @@ void grant() #grant:
     <GRANT> "{" (permission())* "}"
 }
 
-void permission() :
+void permission() #permission:
 {
     log.fine("permission()");
 }
 {
-    symbol() [literal()]";"
+    symbol() [literal() [literal()]]";"
+}
+
+void classloader() #classloader:
+{
+    log.fine("classloader()");
+}
+{
+    <CLASSLOADER> <LBRACE> parent() [jars()] [codebase()] <RBRACE>
+}
+
+void jars() #jars:
+{ 
+    log.fine("jars()");
+}
+{
+    <JARS> <LBRACE> classpath() <RBRACE>
+}
+
+void parent() #parent:
+{
+    log.fine("parent()");
+}
+{
+    <PARENT> symbol() <SEMICOLON>
+}
+
+void codebase() #codebase:
+{
+    log.fine("codebase()");
+}
+{
+    <CODEBASE> <LBRACE> symbol() (<COMMA> symbol())* <RBRACE>
+}
+
+void configuration() #configuration:
+{
+    log.fine("configuration()");
+}
+{
+    <CONFIGURATION> <LBRACE> (configEntry())* <RBRACE>
+}
+
+void classpath() #classpath:
+{
+    log.fine("classpath()");
+}
+{
+    cpEntry() (<COMMA> cpEntry() )*
+}
+
+void cpEntry() #cpEntry:
+{
+    log.fine("cpEntry()");
+}
+{
+    symbol() [ <LPAREN> filterExpression() <RPAREN>]
+}
+
+void filterExpression():
+{
+    log.finest("filterExpression()");
+}
+{
+    filterClause() ( <COMMA> filterClause())*
+}
+
+void filterClause():
+{
+    log.finest("filterClause()");
+}
+{
+    symbol() | literal()
+}
+
+void configEntry() #configEntry:
+{
+    log.fine("configEntry()");
+}
+{
+    symbol() <EQUALS> symbol() <SEMICOLON>
 }
 
 void primary() :
@@ -205,7 +296,6 @@ void symbol() #symbol:
         }
 }
 
-
 void expression() :
 {
 	log.fine("expression()");

Copied: river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/StarterServiceDeployer.java (from r1310153, 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/deployer/StarterServiceDeployer.java?p2=river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/StarterServiceDeployer.java&p1=river/jtsk/skunk/surrogate/src/org/apache/river/container/StarterServiceDeployer.java&r1=1310153&r2=1327138&rev=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/StarterServiceDeployer.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/StarterServiceDeployer.java Tue Apr 17 15:17:52 2012
@@ -19,20 +19,21 @@
 /* TODO: - Complete deployment of items that are in the deployment
  directory.
  */
-package org.apache.river.container;
+package org.apache.river.container.deployer;
 
 import java.io.File;
 import java.io.FilePermission;
 import java.io.IOException;
+import java.io.InputStream;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.URL;
-import java.security.AllPermission;
 import java.security.CodeSource;
 import java.security.Permission;
 import java.security.Principal;
 import java.security.cert.Certificate;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 import java.util.logging.Level;
@@ -41,6 +42,19 @@ import net.jini.security.policy.DynamicP
 import org.apache.commons.vfs.FileObject;
 import org.apache.commons.vfs.FileSystemException;
 import org.apache.commons.vfs.FileType;
+import org.apache.river.container.ConfigurationException;
+import org.apache.river.container.Context;
+import org.apache.river.container.FileUtility;
+import org.apache.river.container.Init;
+import org.apache.river.container.Injected;
+import org.apache.river.container.InjectionStyle;
+import org.apache.river.container.LocalizedRuntimeException;
+import org.apache.river.container.MessageNames;
+import org.apache.river.container.Name;
+import org.apache.river.container.PropertiesFileReader;
+import org.apache.river.container.Strings;
+import org.apache.river.container.Utils;
+import org.apache.river.container.classloading.ClasspathFilter;
 import org.apache.river.container.classloading.VirtualFileSystemClassLoader;
 import org.apache.river.container.codebase.CodebaseContext;
 import org.apache.river.container.codebase.CodebaseHandler;
@@ -55,21 +69,43 @@ import org.apache.river.container.work.W
  */
 public class StarterServiceDeployer {
 
-    private int initCount = 0;
     private static final Logger log =
             Logger.getLogger(StarterServiceDeployer.class.getName(), MessageNames.BUNDLE_NAME);
     @Injected(style = InjectionStyle.BY_TYPE)
     private FileUtility fileUtility = null;
-    @Injected
-    private ClassLoader systemClassLoader = null;
+    
+    @Injected(style=InjectionStyle.BY_TYPE)
+    private Context context;
+    
     @Name
     private String myName = null;
     @Injected(style = InjectionStyle.BY_TYPE)
     private CodebaseHandler codebaseHandler = null;
-    @Injected
-    private String deploymentDirectory = null;
-    @Injected(Strings.STARTER_SERVICE_DEPLOYER_PROPERTIES)
-    Properties configProperties = null;
+    
+    private String deployDirectory = Strings.DEFAULT_DEPLOY_DIRECTORY;
+    
+    private String config = Strings.STARTER_SERVICE_DEPLOYER_CONFIG;
+    private ASTconfig configNode=null;
+    
+    private List<ApplicationEnvironment> applicationEnvironments=
+            new ArrayList<ApplicationEnvironment>();
+    
+    public String getDeployDirectory() {
+        return deployDirectory;
+    }
+
+    public void setDeployDirectory(String deployDirectory) {
+        this.deployDirectory = deployDirectory;
+    }
+
+    public String getConfig() {
+        return config;
+    }
+
+    public void setConfig(String config) {
+        this.config = config;
+    }
+    
     private FileObject deploymentDirectoryFile = null;
     @Injected(style = InjectionStyle.BY_TYPE)
     private PropertiesFileReader propertiesFileReader = null;
@@ -79,19 +115,18 @@ public class StarterServiceDeployer {
     private WorkManager workManager = null;
     @Injected(style = InjectionStyle.BY_TYPE)
     private DynamicPolicyProvider securityPolicy = 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) {
@@ -106,15 +141,23 @@ public class StarterServiceDeployer {
 
     public VirtualFileSystemClassLoader createServiceClassloader(FileObject serviceRoot, CodeSource codeSource) throws IOException, FileSystemException {
 
+        String parentLoaderName=((ASTparent) configNode.search(
+                new Class[]{ ASTconfig.class, ASTclassloader.class, ASTparent.class})).getValue().toString();
+        log.log(Level.FINE, MessageNames.SERVICE_PARENT_CLASSLOADER_IS, parentLoaderName);
+        ClassLoader parentLoader= (ClassLoader) context.get(parentLoaderName);
         VirtualFileSystemClassLoader cl =
-                createChildOfSystemClassloader(codeSource);
+                createChildOfGivenClassloader(parentLoader, codeSource);
         /*
          Include platform jars from the container's lib directory.
-         */
-        String platformJarSpec = configProperties.getProperty(Strings.PLATFORM_JARS);
+        */
+        ASTclasspath platformJarSpec = (ASTclasspath)
+                configNode.search(new Class[]{ASTconfig.class, 
+                    ASTclassloader.class, ASTjars.class, ASTclasspath.class});
         addPlatformJarsToClassloader(platformJarSpec, cl);
         addLibDirectoryJarsToClasspath(serviceRoot, cl);
+        
         return cl;
+        
     }
 
     protected void addLibDirectoryJarsToClasspath(FileObject serviceRoot, VirtualFileSystemClassLoader cl) throws FileSystemException {
@@ -129,23 +172,19 @@ public class StarterServiceDeployer {
         }
     }
 
-    protected void addPlatformJarsToClassloader(String platformJarSpec, VirtualFileSystemClassLoader cl) throws IOException, LocalizedRuntimeException {
-        if (platformJarSpec == null) {
-            throw new LocalizedRuntimeException(MessageNames.BUNDLE_NAME,
-                    MessageNames.MISSING_PROPERTY_ENTRY,
-                    new Object[]{Strings.STARTER_SERVICE_DEPLOYER_PROPERTIES,
-                        Strings.PLATFORM_JARS});
-        }
-        log.log(Level.FINE, MessageNames.ADDING_CLASSPATH_ENTRY, new Object[]{platformJarSpec});
-        cl.addClassPathEntry(fileUtility.getLibDirectory(), platformJarSpec);
+    protected void addPlatformJarsToClassloader(ASTclasspath platformJarSpec, VirtualFileSystemClassLoader cl) throws IOException, LocalizedRuntimeException {
+        log.log(Level.FINE, MessageNames.ADDING_CLASSPATH_ENTRY, new Object[]{platformJarSpec.toString()});
+        List<ClasspathFilter> filters=ClasspathFilterBuilder.filtersFromClasspathExpression(platformJarSpec);
+        
+        cl.addClasspathFilters(filters,fileUtility.getLibDirectory());
     }
 
-    protected VirtualFileSystemClassLoader createChildOfSystemClassloader(CodeSource codeSource) {
+    protected VirtualFileSystemClassLoader createChildOfGivenClassloader(ClassLoader parent, CodeSource codeSource) {
         /*
          Create the service classloader.
          */
         VirtualFileSystemClassLoader cl =
-                new VirtualFileSystemClassLoader(null, systemClassLoader, codeSource);
+                new VirtualFileSystemClassLoader(null, parent, codeSource);
         return cl;
     }
 
@@ -164,8 +203,6 @@ public class StarterServiceDeployer {
     @Init
     public void init() {
         try {
-            initCount++;
-            log.info("Init count is " + initCount);
             tryInitialize();
         } catch (Throwable ex) {
             log.log(Level.SEVERE, MessageNames.STARTER_SERVICE_DEPLOYER_FAILED_INIT,
@@ -241,21 +278,23 @@ public class StarterServiceDeployer {
         }
     }
 
-    private void tryInitialize() throws IOException {
+    private void tryInitialize() throws IOException, ParseException {
         log.log(Level.FINE, MessageNames.STARTER_SERVICE_DEPLOYER_STARTING, myName);
         /*
          Establish the deployment directory.
          */
-        deploymentDirectoryFile = fileUtility.getProfileDirectory().resolveFile(deploymentDirectory);
+        deploymentDirectoryFile = fileUtility.getProfileDirectory().resolveFile(deployDirectory);
         if (deploymentDirectoryFile == null
                 || deploymentDirectoryFile.getType() != FileType.FOLDER) {
             log.log(Level.WARNING, MessageNames.NO_DEPLOYMENT_DIRECTORY,
-                    new Object[]{deploymentDirectory, fileUtility.getProfileDirectory()});
+                    new Object[]{deployDirectory, fileUtility.getProfileDirectory()});
         }
-        /*
-         Read the maximal policy file if there is one.
-         */
-        readMaximalPolicy();
+        /* Read and parse the configuration file. */
+        
+        FileObject configFile=fileUtility.getProfileDirectory().resolveFile(config);
+        InputStream in=configFile.getContent().getInputStream();
+        configNode=DeployerConfigParser.parseConfig(in);
+
         /*
          Go through the deployment directory looking for services to deploy.
          */
@@ -264,11 +303,11 @@ public class StarterServiceDeployer {
                 Strings.SSAR);
         if (serviceArchives != null) {
             log.log(Level.FINE, MessageNames.FOUND_SERVICE_ARCHIVES,
-                    new Object[]{serviceArchives.size(), deploymentDirectory});
+                    new Object[]{serviceArchives.size(), deployDirectory});
             deployServiceArchives(serviceArchives);
         } else {
             log.log(Level.WARNING, MessageNames.FOUND_NO_SERVICE_ARCHIVES,
-                    new Object[]{deploymentDirectory});
+                    new Object[]{deployDirectory});
 
         }
 
@@ -292,9 +331,15 @@ public class StarterServiceDeployer {
     }
 
     private void deployServiceArchive(FileObject serviceArchive) throws IOException {
-        FileObject serviceRoot =
-                serviceArchive.getFileSystem().getFileSystemManager().createFileSystem(Strings.JAR, serviceArchive);
-        deployService(serviceArchive, serviceRoot);
+        // Create an application environment
+        ApplicationEnvironment env=new ApplicationEnvironment();
+        env.setServiceArchive(serviceArchive);
+        env.setServiceRoot(
+                serviceArchive.getFileSystem().getFileSystemManager().createFileSystem(Strings.JAR, serviceArchive));
+        // Store it in our list of environments.
+        applicationEnvironments.add(env);
+        // Deploy it.
+        deployService(env);
     }
 
     private String findServiceName(FileObject serviceArchive, FileObject serviceRoot) {
@@ -311,21 +356,22 @@ public class StarterServiceDeployer {
         return serviceRoot.getURL();
     }
 
-    private void deployService(FileObject serviceArchive, FileObject serviceRoot) throws IOException {
-        String serviceName = findServiceName(serviceArchive, serviceRoot);
+    private void deployService(ApplicationEnvironment env) throws IOException {
+        String serviceName = findServiceName(env.getServiceArchive(), env.getServiceRoot());
         CodeSource serviceCodeSource =
-                new CodeSource(findServiceURL(serviceArchive, serviceRoot),
+                new CodeSource(findServiceURL(env.getServiceArchive(), env.getServiceRoot()),
                 new Certificate[0]);
         log.log(Level.INFO, MessageNames.CODESOURCE_IS,
                 new Object[]{serviceName, serviceCodeSource});
-        VirtualFileSystemClassLoader cl = createServiceClassloader(serviceRoot, serviceCodeSource);
+        VirtualFileSystemClassLoader cl = createServiceClassloader(env.getServiceArchive(), serviceCodeSource);
         /*
          Create a codebase context.
          */
         CodebaseContext codebaseContext =
                 codebaseHandler.createContext(serviceName);
+        env.setCodebaseContext(codebaseContext);
         addPlatformCodebaseJars(codebaseContext);
-        exportServiceCodebaseJars(serviceRoot, codebaseContext);
+        exportServiceCodebaseJars(env.getServiceRoot(), codebaseContext);
 
         /*
          Setup the classloader's codebase annotation.
@@ -337,8 +383,8 @@ public class StarterServiceDeployer {
          */
 
         // TODO: Figure out how the protection domains, codesources, etc need to work.
-        setupLiaisonConfiguration(serviceArchive, serviceRoot, cl);
-        Properties startProps = readStartProperties(serviceRoot);
+        setupLiaisonConfiguration(env.getServiceArchive(), env.getServiceRoot(), cl);
+        Properties startProps = readStartProperties(env.getServiceRoot());
         String argLine = startProps.getProperty(Strings.START_PARAMETERS);
         final String[] args = constructArgs(argLine);
 

Copied: river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/Strings.java (from r1310153, river/jtsk/skunk/surrogate/src/org/apache/river/container/security/Strings.java)
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/Strings.java?p2=river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/Strings.java&p1=river/jtsk/skunk/surrogate/src/org/apache/river/container/security/Strings.java&r1=1310153&r2=1327138&rev=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/src/org/apache/river/container/security/Strings.java (original)
+++ river/jtsk/skunk/surrogate/src/org/apache/river/container/deployer/Strings.java Tue Apr 17 15:17:52 2012
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.river.container.security;
+package org.apache.river.container.deployer;
 
 /**
  *

Copied: river/jtsk/skunk/surrogate/test/org/apache/river/container/deployer/DeployerConfigParserTest.java (from r1310153, river/jtsk/skunk/surrogate/test/org/apache/river/container/security/PermissionFileParserTest.java)
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/test/org/apache/river/container/deployer/DeployerConfigParserTest.java?p2=river/jtsk/skunk/surrogate/test/org/apache/river/container/deployer/DeployerConfigParserTest.java&p1=river/jtsk/skunk/surrogate/test/org/apache/river/container/security/PermissionFileParserTest.java&r1=1310153&r2=1327138&rev=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/test/org/apache/river/container/security/PermissionFileParserTest.java (original)
+++ river/jtsk/skunk/surrogate/test/org/apache/river/container/deployer/DeployerConfigParserTest.java Tue Apr 17 15:17:52 2012
@@ -15,8 +15,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.river.container.security;
+package org.apache.river.container.deployer;
 
+import java.util.List;
+import java.util.logging.Logger;
 import java.io.InputStream;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -29,9 +31,9 @@ import static org.junit.Assert.*;
  *
  * @author trasukg
  */
-public class PermissionFileParserTest {
-
-    public PermissionFileParserTest() {
+public class DeployerConfigParserTest {
+    private static final Logger log=Logger.getLogger(DeployerConfigParserTest.class.getName());
+    public DeployerConfigParserTest() {
     }
 
     @BeforeClass
@@ -56,10 +58,54 @@ public class PermissionFileParserTest {
      run it through the parser without errors.
      */
     public void testBasicParsing() throws ParseException {
+        ASTconfig config=parseTestConfig();
+        log.fine("grants string is:" + config.toString());
+        String expected="config (grant (permission java.io.FilePermission \"${serviceArchive}\" \"read\") "
+                + "(permission java.net.SocketPermission \"*\" \"connect\")) "
+                + "(classloader (parent systemClassLoader) "
+                + "(jars (classpath (cpEntry commons-vfs-1.0.jar) "
+                + "(cpEntry commons-logging-1.1.1.jar) (cpEntry jsk-platform.jar) "
+                + "(cpEntry jsk-lib.jar) (cpEntry jsk-resources.jar) "
+                + "(cpEntry RiverSurrogate.jar "
+                + "org.apache.river.container.liaison.Strings "
+                + "org.apache.river.container.liaison.VirtualFileSystemConfiguration "
+                + "org.apache.river.container.liaison.VirtualFileSystemConfiguration$MyConfigurationFile "
+                + "\"META-INF/services/*\"))) (codebase jsk-dl.jar)) (configuration "
+                + "(configEntry discoveryGroup defaultDiscoveryGroup))";
+        assertEquals(expected, config.toString());
+    }
+
+    private ASTconfig parseTestConfig() throws ParseException {
         InputStream in=
-                PermissionFileParserTest.class.getResourceAsStream("sample.policy");
-        assertTrue("No sample.policy file found!", in!=null);
-        ASTgrants grants=PermissionFileParser.parseGrants(in);
-        assertEquals("grants (grant java.security.AllPermission)", grants.toString());
+                DeployerConfigParserTest.class.getResourceAsStream("sample.config");
+        assertTrue("No sample.config file found!", in!=null);
+        ASTconfig config=DeployerConfigParser.parseConfig(in);
+        return config;
+    }
+    
+    /**
+    Matching the ASTConfig should return the root node.
+    @throws Exception 
+    */
+    @Test
+    public void testPathMatch() throws Exception {
+        ASTNode config=parseTestConfig();
+        List<ASTNode> matches=config.search(new Class[]{ ASTconfig.class});
+        assertEquals("Length of match list", 1, matches.size());
+        assertEquals("matched node", config, matches.get(0));
+    }
+
+    /**
+    Matching the ASTConfig should return the root node.
+    @throws Exception 
+    */
+    @Test
+    public void testlongerPathMatch() throws Exception {
+        ASTNode config=parseTestConfig();
+        List<ASTNode> matches=config.search(
+                new Class[]{ ASTconfig.class, ASTclassloader.class,
+                ASTjars.class});
+        assertEquals("Length of match list", 1, matches.size());
+        assertEquals("matched node class", ASTjars.class, matches.get(0).getClass());
     }
 }
\ No newline at end of file

Copied: river/jtsk/skunk/surrogate/test/org/apache/river/container/deployer/sample.config (from r1310153, river/jtsk/skunk/surrogate/test/org/apache/river/container/security/sample.policy)
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/test/org/apache/river/container/deployer/sample.config?p2=river/jtsk/skunk/surrogate/test/org/apache/river/container/deployer/sample.config&p1=river/jtsk/skunk/surrogate/test/org/apache/river/container/security/sample.policy&r1=1310153&r2=1327138&rev=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/test/org/apache/river/container/security/sample.policy (original)
+++ river/jtsk/skunk/surrogate/test/org/apache/river/container/deployer/sample.config Tue Apr 17 15:17:52 2012
@@ -1,34 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 // Sample file that our policy file parser should be able to process.
 
 // Grants given to all applications.
 grant {
-    java.security.FilePermission "${serviceArchive}" "read";
-}
-
-// If the archive includes 'security.policy', grant the lesser of maximal
-// and the requests in 'security.policy'.  Decline to start the app if 
-// requested grants exceed the maximal grant below.
-maximal grant {
-    java.security.AllPermission;
+    java.io.FilePermission "${serviceArchive}" "read";
+    java.net.SocketPermission "*" "connect";
 }
 
 classloader {
     // Variables required to set up the application classloader.
     //For a privileged application deployer, parent=containerClassLoader;
-    parent=systemClassLoader;
+    parent systemClassLoader;
 
-    platformJars= 
-        commons-vfs-1.0.jar
-        commons-logging-1.1.1.jar
-        jsk-platform.jar
-        jsk-lib.jar
-        jsk-resources.jar
+    jars {
+        commons-vfs-1.0.jar,
+        commons-logging-1.1.1.jar,
+        jsk-platform.jar,
+        jsk-lib.jar,
+        jsk-resources.jar,
         RiverSurrogate.jar(org.apache.river.container.liaison.Strings,
             org.apache.river.container.liaison.VirtualFileSystemConfiguration, 
             org.apache.river.container.liaison.VirtualFileSystemConfiguration$MyConfigurationFile, 
-            "META-INF/services/*");
+            "META-INF/services/*")
+    }
 
-    platformCodebase=jsk-dl.jar;
+    codebase {jsk-dl.jar}
 }
 
 configuration {

Modified: river/jtsk/skunk/surrogate/test/org/apache/river/surrogate/SurrogateContextTest.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/test/org/apache/river/surrogate/SurrogateContextTest.java?rev=1327138&r1=1327137&r2=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/test/org/apache/river/surrogate/SurrogateContextTest.java (original)
+++ river/jtsk/skunk/surrogate/test/org/apache/river/surrogate/SurrogateContextTest.java Tue Apr 17 15:17:52 2012
@@ -19,7 +19,7 @@
 package org.apache.river.surrogate;
 
 import java.io.File;
-import org.apache.river.container.ApplicationEnvironment;
+import org.apache.river.container.deployer.ApplicationEnvironment;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;

Modified: river/jtsk/skunk/surrogate/testfiles/testroot/profile/default/config.xml
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/surrogate/testfiles/testroot/profile/default/config.xml?rev=1327138&r1=1327137&r2=1327138&view=diff
==============================================================================
--- river/jtsk/skunk/surrogate/testfiles/testroot/profile/default/config.xml (original)
+++ river/jtsk/skunk/surrogate/testfiles/testroot/profile/default/config.xml Tue Apr 17 15:17:52 2012
@@ -39,14 +39,14 @@
     <cfg:component class="org.apache.river.container.codebase.ClassServer"/>
 
     <!-- Deployer for 'service-starter'-style applications. -->
-    <cfg:component class="org.apache.river.container.StarterServiceDeployer">
-        <property name="policy" value="service-starter.policy"/>
+    <cfg:component class="org.apache.river.container.deployer.StarterServiceDeployer">
+        <property name="config" value="service-starter.cfg"/>
         <property name="deployDirectory" value="deploy"/>
     </cfg:component>
     
     <!-- Deployer for 'system apps' like the remote deployment service -->
     <cfg:component class="org.apache.river.container.StarterServiceDeployer">
-        <property name="policy" value="privileged-services.policy"/>
+        <property name="config" value="privileged-services.config"/>
         <property name="deployDirectory" value="deploy-privileged"/>
     </cfg:component>
     <cfg:component class="org.apache.river.container.ShowContextToConsole"/>