Hi Erik, 3) You are right. For some reason I thought you meant a GUI. 4 & 6) I think its a great idea it will simplify the user's code. Actually let me take a crack at it. So the 2 changes would be as follows: 1) The user provides a map with instancename -> instanceobject and 2) the evaluator will silently ignore instances that are not imported inside the policy
7) I agree XML for the customexpressions is more elegant than properties, I also agree about externalizing all the in-built expressions (acplparsermap) as an XML. Looking forward to your patch. 8) Good point I will add the privileged blocks whereever required 9 & 13) Will look into the logging and cleaning up code 10) I think most of the places we do have statements like this: if(logger.isLoggable(Level.FINE)) logger.fine(Thread.currentThread().getName()+" iterating over instances " ); Is that not sufficient or have we missed putting the if in some places? 11) As a matter of fact in our original ANT build we had it built as a seperate jar but then while migrating to maven in the interest of time we put it all together. Will work on seperating it out 12) I suppose this is the maven convention? Again in the interest of time I didn't change the folder structure, do you see a compelling reason for this? I noticed some other projects like Apache Muse weren't following it either 14) I personally don't prefer the Apache Geronimo style but if everyone feels strongly about this I am OK with changing it. 15) Please do provide a patch. Again we appreciate your in depth feedback! Neeraj 3) >NRJ: The factory is a good idea. What do you have in mind in terms of a >user interface? I just thought in rationalizing the current APIs and make all user exposed methods interface based. If I understand correctly, there are two kinds of API: User API, Service Provider Implementation API User API is the user view to imperius SPI API is for instance the datastore interfaces, mostly the one in the external packages. 4) >NRJ- There is a direct correlation between the arguments passed to the >evaluatePolicy method and the imported classes/instances within the >policy. >For e.g. > >If the import statement in the policy is as follows: > >Import Class a : a1,a2; >Import Class b: b1,b2; > >Then the evaluatePolicy method call would have inputMap as the parameter > >where >Map inputMap = ["a" --> instanceInfoListForA] > ["b" --> instanceInfoListForB ] > >where >instanceInfoListForA = [instanceInfoA1 , instanceInfoA2] >instanceInfoLIstForB = [instanceInfoB1 , instanceInfoB2 ] IMO non declared instanceinfo objects could be silently ignored. e.g. <source> Map inputMap = ["a" --> instanceInfoListForA] ["b" --> instanceInfoListForB ] ["c" --> instanceInfoListForC ] where instanceInfoListForA = [instanceInfoA1 , instanceInfoA2] instanceInfoLIstForB = [instanceInfoB1 , instanceInfoB2, instanceInfoB3 ] instanceInfoLIstForC = [instanceInfoC1 ] </source> B3 and C1 could be silently ignored since the policy has: >Import Class a : a1,a2; >Import Class b: b1,b2; I can create a patch if you agree. 6) Simplified User API by hiding InstanceInfo? e.g. Map map = new HashMap(); map.put("a1", myobjecta1); map.put("a2", myobjecta2); map.put("b1", myobjectb1); map.put("b2", myobjectb2); spl.executePolicy(name,map); Internally, PolicyManager.executePolicy can create InstanceInfo. 7) Properties Loader (customexpressions): Currently custom expressions are configured in a property file placed at the user.dir or splhome. I propose the following: - change properties to xml format - default naming of the file would change from customexpressions.properties to imperius.xml - imperius.xml would be loaded by default from the locations: cur.dir, user.dir and splhome. - allow configuring customexpressions via the SPLPolicyRuleProvider interface. The operation void registerExpressions(InputStream xml) is added to the SPLPolicyRuleProvider. <imperius> <configuration> <spl-expression class-name="sample.SendMail"/> <spl-expression class-name="sample.ExecuteCommand"/> </configuration> <imperius> - Externalize ACPLParserMap expressions registration to another XML file: org.apache.imperius.spl.Expressions.xml I can also provide a patch. 8) Access to protected resources. System.getProperty, Class.forName, etc None of the access to these resources happen in privilege blocks, so imperius won't work in secured environment. 9) Cosmetic: There are plenty of messages output to system.out. These should be moved to log. 10) Logging code should be enclosed within a check condition: e.g. if( logger.isDebugEnabled() ) { logger.debug(xxxx) } 11) Samples in the JavaSPL should be moved to its own module. I propose javaspl-samples 12) Unit tests should be moved to /src/test/ 12) Sources should be moved from /src/ to /src/java/ or /src/main/ 13) Cleanup code: Remove commented out code; Remove empty methods such as static mains..; make classes private when possible 14) Code Formatting: use of Apache Geronimo coding style? 15) Prevent nullpointerexceptions. in some cases I got NPE, so need to prevent these situations. I propose to create unit tests for the test cases I have and provide a patch. Regards ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "Those are my principles. If you don't like them I have others." Neeraj Joshi Autonomic Computing Policy Development Tivoli, IBM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~