[ 
http://jira.jboss.com/jira/browse/JBAS-1602?page=comments#action_12316635 ]
     
Scott M Stark commented on JBAS-1602:
-------------------------------------

I have the JspServlet patched such that a custom Options can be specified, but 
a problem I'm seeing is that TagLibraryInfoImpl will not resolve a file outside 
of the war base directory. If the path returned by getLocation() is absolute 
this just results in an invalid file. However, a jar uri is resolved regardless 
of where it is located so there is an inconsistency in how tlds are resolved. I 
was tyring to load the shared tlds from the jbossweb-tomcat55.sar/conf/tlds 
directory. If the uri is converted into a relative path with respect to the war 
this works in terms of finding the resource, but the compiler's check for out 
of date dependencies fails as it expects a URL:

20:34:48,937 INFO  [STDOUT] java.net.MalformedURLException: Path 
../jbossweb-tomcat55.sar/conf/tlds/myfaces_core.tld/ does not start with a "/" 
character
20:34:48,937 INFO  [STDOUT]     at 
org.apache.catalina.core.ApplicationContext.getResource(ApplicationContext.java:471)
20:34:48,937 INFO  [STDOUT]     at 
org.apache.catalina.core.ApplicationContextFacade.getResource(ApplicationContextFacade.java:178)
20:34:48,937 INFO  [STDOUT]     at 
org.apache.jasper.JspCompilationContext.getResource(JspCompilationContext.java:267)
20:34:48,937 INFO  [STDOUT]     at 
org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:398)
20:34:48,937 INFO  [STDOUT]     at 
org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:315)
20:34:48,937 INFO  [STDOUT]     at 
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:553)
20:34:48,937 INFO  [STDOUT]     at 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:293)
20:34:48,937 INFO  [STDOUT]     at 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
20:34:48,937 INFO  [STDOUT]     at 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
 
So I had to put the tlds in jars within the jbossweb-tomcat55.sar/conf/tlds and 
this appears to work. The patch to the JspServlet has been submitted to the 
tomcat bugzilla under the following bug report:

http://issues.apache.org/bugzilla/show_bug.cgi?id=34272


> Can't use container level taglibs
> ---------------------------------
>
>          Key: JBAS-1602
>          URL: http://jira.jboss.com/jira/browse/JBAS-1602
>      Project: JBoss Application Server
>         Type: Bug
>   Components: Web (Tomcat) service
>     Reporter: Stan Silvert
>     Assignee: Scott M Stark
>     Priority: Critical
>      Fix For: JBossAS-4.0.2 Final
>  Attachments: EmbeddedServletOptions.java, TldLocationsCache.java
>
>
> JBoss/Tomcat needs a way to install tag libraries globally so they are 
> available to all web applications.  This functionality is mentioned in the 
> JSP 2.0 spec section 7.3.5.  In Tomcat standalone, you can do this, but it 
> doesn?t work in JBoss/Tomcat.
> The way this works is that the Jasper TldLocationsCache ?Scans all JARs 
> accessible to the webapp's classloader and its parent classloaders for TLDs.?
> If I put my jar into Tomcat standalone?s common/lib directory then the tag 
> library will be shared across all web apps.  I?ve tried putting the jar in 
> several ?well known? locations in JBoss/Tomcat and nothing seems to work.
> For Reference, I?ve attached the TldLocationsCache source code from Tomcat 
> 5.5.8.
> Concerning TldLocationsCache, Scott Stark says:
> "This class is useless for non-URLClassLoaders and URLClassLoaders that do 
> not expose their classpath via getURLs which is what we currently do because 
> of an old bad behavior with annotated codebases of rmi classes. "
> Remy Maucherat offered this as a possible solution:
> Would it be possible to have the ENCLoader facade return more interesting 
> things ?
>    /**
>     * A trival extension of URLClassLoader that uses an empty URL[] as its
>     * classpath so that all work is delegated to its parent.
>     */
>    static class ENCLoader extends URLClassLoader
>    {
>       private URL[] urllist = new URL[0];
>       ENCLoader(ClassLoader parent)
>       {
>          super(new URL[0], parent);
>       }
>       void addURLInternal(URL url)
>       {
>          URL[] result = new URL[urllist.length + 1];
>          for (int i = 0; i < urllist.length; i++)
>             result[i] = urllist[i];
>          result[urllist.length] = url;
>          urllist = result;
>       }
>       public URL[] getURLs()
>       {
>          return urllist;
>       }
>    }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://jira.jboss.com/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
JBoss-Development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to