Carsten Ziegeler wrote:
With the help from Leszek we now have a Cocoon version in trunk which
which was rather small and of questionable quality, thanks for the
credit tough :)
does not need any deployment plugin. This means you can just drop the
jar files into WEB-INF/lib and are done! So it doesn't matter if you're
using Maven, Ant or some other strange tool :)
All you need is the main Spring applicationContext.xml with our two
elements for setting up Cocoon and the Avalon bridge.
So, what has changed?
We now load all configuration files directly from within the jar files,
so all files in META-INF/cocoon/avalon, META-INF/cocoon/spring and
META-INF/cocoon/properties are applied at runtime without the need to
extract these files.
do we need to load configuration files from WEB-INF/cocoon/*? After all
if one wants to have configuration unpack it may be done using
WEB-INF/classes/META-INF/cocoon/*. Same result. No duplication.
CocoonPropertyOverrideConfigurer could be then simplified. We could drop
scanClassPath and just provide a 'location' attribute which is
classpath*:/META-INF/properties for core and ./config/properties for
blocks.
So we could remove:
CocoonPropertyOverrideConfigurer.java:110-115
if ( this.scanClassPath ) {
ResourceUtils.readProperties("classpath*:META-INF/cocoon/spring",
mergedProps, this.resourceLoader,
this.logger);
ResourceUtils.readProperties("classpath*:META-INF/cocoon/spring/" +
mode, mergedProps,
this.resourceLoader, this.logger);
}
SettingsElementParser.java:78-82
try {
this.handleBeanInclude(parserContext, null,
Constants.DEFAULT_SPRING_BLOCK_CONFIGURATION_LOCATION, "*.xml", true);
} catch (Exception e) {
throw new BeanDefinitionStoreException("Unable to read spring
configurations from " + Constants.DEFAULT_SPRING_BLOCK_CONFIGURATION_LOCATION, e);
}
SettingsBeanFactoryPostProcessor.java:188-196 (2 includes instead of 4)
// now read all properties from the properties directory
ResourceUtils.readProperties("classpath*:META-INF/cocoon/properties",
properties, this.getResourceLoader(), this.logger);
// read all properties from the mode dependent directory
ResourceUtils.readProperties("classpath*:META-INF/cocoon/properties/" +
mode, properties, this.getResourceLoader(), this.logger);
// now read all properties from the properties directory
ResourceUtils.readProperties("/WEB-INF/cocoon/properties", properties,
this.getResourceLoader(), this.logger);
// read all properties from the mode dependent directory
ResourceUtils.readProperties("/WEB-INF/cocoon/properties/" + mode,
properties, this.getResourceLoader(), this.logger);
Currently on startup of Cocoon, all COB-INF directories are extracted to
{webapp-directory}/blocks/{block-name}.
What is missing?
1. With the changes from above, Cocoon does not run as an unexpanded war
file anymore. So I think we should extract the COB-INF directory into
the temporary directory and mount the blocks from there. This should be
very simple to change.
apart from one thing, how do I do that?:
<map:match pattern="mobile/**">
<map:mount uri-prefix="mobile" src="blocks/geminismart-server-mobile/"/>
</map:match>
<map:match pattern="central/**">
<map:mount uri-prefix="central" src="blocks/geminismart-server-central/"/>
</map:match>
<map:match pattern="**">
<map:mount uri-prefix="" src="blocks/mobilebox-webapp-commons/"/>
</map:match>
when I get block files unpacked to some temporary directory which
location can change any time.
2. We should check on startup if we need to extract a COB-INF directory
again. If anyone has a good idea how to check this without too much work
would be great.
wouldn't it be sufficient if we checked for blocks/block-name directory
existence?
3. Update to our deployer plugins (and perhaps archetypes) - we changed
some directory names and obviously the deployment has changed. So we
should check if all our plugins, development procedures, archetypes etc.
are still working. I just tested the core-webapp.
Next few hours I will be trying to get all my 2.2 projects up and
running again.
Once we have solved these three issues we should release a RC-1 asap.
+1
--
Leszek Gawron CTO at MobileBox Ltd.