[ http://jira.jboss.com/jira/browse/JBAS-1602?page=history ]

Scott M Stark updated JBAS-1602:
--------------------------------

    Description: 
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;
      }
   }


  was:
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;

      }

   }




The only user of the is org.apache.jasper.EmbeddedServletOptions is the 
org.apache.jasper.servlet.JspServlet. If the JspServlet had a 
engineOptionsClass init parameter then we could externalize all jsp options 
settings including the TldLocationsCache.

> 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
JBoss-Development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to