On 02/03/2012 06:32 AM, Vincent Massol wrote:
Hi devs,Thomas and I have been brainstorming about the need to introduce a generic notion of Environment in XWiki Commons. The idea is that there are some modules that are currently in Platform that should/could be moved to Commons. To name just two: * Cache * Extension However these modules need a notion of Environment. They don't need the full notion of Container that we have in Platform though (they don't need the notion of request/response/session for example). So here's a proposal. * Introduce the following modules: xwiki-commons-environment |_ xwiki-commons-environment-api |_ xwiki-commons-environment-standard |_ xwiki-commons-environment-servlet * With the following Java content: - in xwiki-commons-environment-api: Environment (Interface) |_ getTemporaryDirectory() --> File |_ getPermanentDirectory() --> File |_ getResource() --> URL |_ getResourceAsStream() --> InputStream - in xwiki-commons-environment-standard @Named("default") StandardEnvironment |_ setResourceDirectory(File) |_ setTemporaryDirectory(File) |_ setPermanentDirectory(File) - in xwiki-commons-environment-servlet @Named("default") ServletEnvironment |_ setTemporaryDirectory(File) |_ setPermanentDirectory(File) Usage from other components: @Inject private Environment environment; * Usage in a standard environment (standard as in Java SE): ECM ecm = new ECM(); ecm.initialize(getClass().getClassLoader()); StandardEnvironment env = (StandardEnvironment) ecm.lookup(Environment.class); env.setPermanentDirectory(new File(…)); … However to make it simpler to initialize XWiki in a standard environment we will provide a System helper class in xwiki-commons-environment-standard: ECM ecm = System.initialize()<-- uses System classloader and sets tmp dir to java.io.tmp.dir, no permanent dir set, no resource dir ECM ecm = System.initialize(File permanentDirectory)<-- uses System classloader and sets tmp dir to java.io.tmp.dir, resource dir points to permanent dir ECM ecm = System.initialize(File temporaryDirectory, File resourceDirectory)<-- uses System classloader and sets tmp dir to java.io.tmp.dir ECM ecm = System.initialize(File temporaryDirectory, File resourceDirectory, File temporaryDirectory)<-- uses System classloader ECM ecm = System.initialize(File temporaryDirectory, File resourceDirectory, File temporaryDirectory, ClassLoader classLoader) ECM ecm = System.initialize(ClassLoader classLoader)<-- Sets tmp dir to java.io.tmp.dir, no permanent dir set, no resource dir
Is this java.lang.System?
Note: in 99% of use cases the user just has to write the following to initialize XWiki: ECM ecm = System.initialize(); * Technical impl details: - getTemporaryDirectory default to java.io.tmpdir - getResource default to getPermanentDir * Relationship with Container: - We initialize the Environment component in the Container init classes (DefaultServletContainerInitializer for Servlets) - We deprecate ApplicationContext. Code that's using ApplicationContext is now asked to use the Environment component instead
What happens with ApplicationContextListener and ApplicationContextListenerManager?
The other components in the container-api will remain unchanged? -- Sergiu Dumitriu http://purl.org/net/sergiu/ _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

