Hi,
I think we have some issues in Tuscany to interpret the @location attribute
for <implementation.spring>. The current behavior is that we try to use
TTCL.getResource() to find a URL for the location. If it is an XML file,
then we take it as the Spring application context. I see two problems:
1) TTCL.getResource() is not reliable. It won't work if the contribution is
loaded using a different classloader other than the TCCL. See
https://issues.apache.org/jira/browse/TUSCANY-3069.
2) The SCA spec says the location points to an archive or directory where
META-INF/MANIFEST.MF and META-INF/spring/*.xml are checked. Isn't a
deviation that we use @location as a URI to the spring context xml file?
To resolve the location, depending on the scheme of the URI, it can be
relative to the current contribution, an external archive/directory or a URI
within another contribution. But it shouldn't be checked against the
classpath. The itests/spring uses the context files as relative URIs but
they are outside the contribution.
The following is quoted from the spec:
The only part of this that is specific to Spring is the
<implementation.spring> element. The location
attribute of that element specifies the target uri of an archive file or
directory that contains the Spring
application context files. The resource paths to the Spring application
context configuration files that are
used to create the application context are then identified as follows:
If the resource identified by the location attribute is an archive file,
then the file META-INF/MANIFEST.MF is
read from the archive. If the location URI identifies a directory, then
META-INF/MANIFEST.MF must exist
underneath that directory. If the manifest file contains a header
"Spring-Context" of the format:
Spring-Context ::= path ( ';' path )*
Where path is a relative path with respect to the location URI, then the set
of paths specified in the header
identify the context configuration files. If there is no MANIFEST.MF file or
no Spring-Context header within
that file, then the default behaviour is to build an application context
using all the *.xml files in the METAINF/
spring directory.
Thanks,
Raymond