Re: [xmlc] XMLC_SOURCE_FILE problems

Jacob Kjome <[email protected]> Wed, 31 Aug 2005 20:46:46 -0500
Newsgroups gmane.comp.java.enhydra.xmlc
Message-ID <[email protected]>
This is a multi-part message in MIME format...

------------=_1125539313-10599-344
Content-Type: text/plain; charset="us-ascii"; format=flowed

At 12:57 AM 9/1/2005 +0200, you wrote:
 >I am generating the interfaces and implementations for my html pages with
 >the following ant task syntax:
 >
 ><xmlc
 >  verbose="on"
 >  srcdir="/webapps/myproject/root"
 >  sourceout="${target.dir}/xmlc/src"
 >  includes="**/*.html"
 >  options="/webapps/myproject/root/WEB-INF/options.xmlc"
 >  packagename="package.for.my.project"/>
 >
 >I want to keep my html files in my webapp's root directory (this seems like
 >what everyone would want to do) so that any html files that I don't have a
 >servlet to change with xmlc can simply be served as static html.
 >

Not a bad idea

 >But for some reason, when I go to call xmlcFactory.create(indexHTML.class),
 >it is looking for the html file in
 >"/webapps/myproject/root/package/for/my/project/index.html" instead of
 >"/webapps/myproject/root/index.html", where I want it to look.  This is
 >obviously due to the generated value for XMLC_SOURCE_FILE in the
 >implementation class.  Why, why, WHY would it set that to the package rather
 >than using the path it found the html file in under the "srcdir" that I
 >passed it?
 >

Because your build environment may have little to nothing to do with your 
deployment environment.  It may in your case, but it doesn't have 
to.  Additionally, although webapps seem to be the primary use-case for 
XMLC, there is nothing that locks XMLC into a webapp paradigm.  As such, 
there has to be a consistent place to look for the markup files that go 
along with XMLC-compile classes built with -for-deferred-parsing.  The only 
place where they can be guaranteed to be found without any extra 
configuration is in the same package alongside the respective compiled 
generated classes.

That said, one can override this behavior by configuring Reparse Resource 
Directories.  For an example, take a look at the Tomcat example app that 
comes with the distribution.  Take a look at the generated web.xml in the 
"build/webapps/xmlc/WEB-INF" directory.  Here are the context params that 
get put in web.xml...

<!-- See Javadoc for org.enhydra.xml.xmlc.servlet.XMLCContext for info on 
the param-->
   <context-param>
     <param-name>xmlcReloading</param-name>
     <param-value>reparse</param-value>
     <description> </description>
   </context-param>

   <context-param>
     <param-name>xmlcReparseResourceDirs</param-name>
     <param-value>D:\dev\xmlc\examples\tomcat\res;D:\dev\xmlc\examples\tomcat\res\pkg</param-value>
     <description> </description>
   </context-param>

   <context-param>
     <param-name>xmlcReparsePackagePrefixes</param-name>
     <param-value>xmlc</param-value>
     <description> </description>
   </context-param>

   <context-param>
     <param-name>xmlcReparseDefaultMetaDataPath</param-name>
     <param-value>options.xmlc</param-value>
     <description> </description>
   </context-param>

XMLCContext uses these parameters to configure the deferred parsing 
factory.  If you have at least one reparse resource directory configured, 
the deferred parsing factory will look there to find the markup files 
rather than the classpath.  But it is a good practice to always package the 
markup files in the package anyway in case you decide at some point not to 
configure at reparse resource directory.  This provides for nice fallback 
behavior.

The other nice thing about this is that if you update the files, they will 
get reloaded and display any new markup available (don't expect new Id's to 
trigger new getElemementFoo() methods, however.  That has to be done at 
compile time).  Note that if you are on a Windows machine (and maybe Unix 
as well), you should modify the files elsewhere and then copy over the 
existing file.  Windows ends up locking files once in use and you can get 
weird behavior.  Same thing with jars and such after they are loaded by the VM.

 >I have to have the "packagedir" parameter because I want to have more than
 >one xmlc project at a time, and they can't all be classes called indexHTML
 >in the root package.
 >

I'm not sure what you mean by "more than one XMLC project at a time"?  I 
would guess that if you had different projects, you'd have different 
packages and, probably, different webapps.  So why would IndexHTML 
conflict?  You'd have the same issue with two index.html files in the same 
webapp in the root of the webapp, no?  I guess I'm missing something?

 >Maybe I'm missing something, but it seems like my requirements of keeping
 >the html files in the web root and having more than one xmlc project at a
 >time would be quite common.  What can I do???
 >

Being able to serve markup files as resources, only based off the webapp 
path rather than off the package path (disregarding the ability to set up 
reparse resource directories) would be a nice feature.  It's possible that 
it could be supported, but it would have to be thought through.  I'm not 
sure of the time-frame of the change either?  Patches are more than welcome!

 >(and please don't say that I need to create a symlink for every html file!)
 >

please create a symlink for every html file!  Kidding, kidding.

Jake

 >Cheers,
 >Erik




------------=_1125539313-10599-344
Content-Type: text/plain; name="message-footer.txt"
Content-Disposition: inline; filename="message-footer.txt"
Content-Transfer-Encoding: 8bit


--
You receive this message as a subscriber of the [email protected] mailing list.
To unsubscribe: mailto:[email protected]
For general help: mailto:[email protected]?subject=help
ObjectWeb mailing lists service home page: http://www.objectweb.org/wws

------------=_1125539313-10599-344--