+1
On Fri, Feb 3, 2012 at 12:32 PM, Vincent Massol <vincent(a)massol.net> 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
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
Here's my +1
Thanks
-Vincent
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs