[xwiki-devs] [VOTE] New xwiki-commons-environment module
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
+1 On Fri, Feb 3, 2012 at 12:32 PM, Vincent Massol <[email protected]> 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 [email protected] http://lists.xwiki.org/mailman/listinfo/devs
-- Thomas Mortagne
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/
On Feb 4, 2012, at 7:00 AM, Sergiu Dumitriu wrote:
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?
No
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?
Good point, I had missed those. I propose to deprecate them too. I don't think we need replacements for them since we now haven events sent when the application is initialized. We could add new events when we need them.
The other components in the container-api will remain unchanged?
Yes. Thanks -Vincent
On 02/05/2012 04:03 PM, Vincent Massol wrote:
On Feb 4, 2012, at 7:00 AM, Sergiu Dumitriu wrote:
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?
No
Right, I missed the end of the line above...
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?
Good point, I had missed those. I propose to deprecate them too. I don't think we need replacements for them since we now haven events sent when the application is initialized. We could add new events when we need them.
The other components in the container-api will remain unchanged?
Yes.
Thanks -Vincent
+1. -- Sergiu Dumitriu http://purl.org/net/sergiu/
+0 Thanks, Marius On Fri, Feb 3, 2012 at 1:32 PM, Vincent Massol <[email protected]> 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 [email protected] http://lists.xwiki.org/mailman/listinfo/devs
participants (4)
-
Marius Dumitru Florea -
Sergiu Dumitriu -
Thomas Mortagne -
Vincent Massol