tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Gibby <dgi...@edirectpublishing.com>
Subject Re: difference in jsp:usebean between tomcat 4 and 5
Date Thu, 15 Apr 2004 17:48:01 GMT
I just found that the JSP 1.2 Errata - May 24th, 2002 (rev b) at

http://jcp.org/aboutJava/communityprocess/maintenance/jsr053/errata_1_2_b.html

documents that tomcat 5 does this as the spec designates.

Daniel Gibby wrote:

> Hi, I've noticed a change in the java code that results from a 
> jsp:usebean when upgrading from tomcat 4 to tomcat 5.
> I'm wondering if this is a change in the spec or just a coding 
> difference between versions:
>
> *This jsp:*
> <jsp:useBean id="payment" class="mybeans.ValidateableBean" 
> scope="session" />
> *Results in this java code: *
>
> *on tomcat-5.0.19:*
> mybeans.ValidateableBean payment = null;
> synchronized (session) {
>    payment = (mybeans.ValidateableBean) 
> _jspx_page_context.getAttribute("payment", PageContext.SESSION_SCOPE);
>    if (payment == null){
>        payment = new mybeans.ValidateableBean();
>        _jspx_page_context.setAttribute("payment", payment, 
> PageContext.SESSION_SCOPE);
>    }
> }
>
> *in tomcat-4.1.27 (same on tomcat-4.1.30 I believe):*
> mybeans.ValidateableBean payment = null;
> synchronized (session) {
>    payment = (mybeans.ValidateableBean) 
> pageContext.getAttribute("payment", PageContext.SESSION_SCOPE);
>    if (payment == null){
>        try {
>            payment = (mybeans.ValidateableBean) 
> java.beans.Beans.instantiate(this.getClass().getClassLoader(), 
> "mybeans.ValidateableBean");
>        } catch (ClassNotFoundException exc) {
>            throw new InstantiationException(exc.getMessage());
>        } catch (Exception exc) {
>            throw new ServletException("Cannot create bean of class " + 
> "mybeans.ValidateableBean", exc);
>        }
>        pageContext.setAttribute("payment", payment, 
> PageContext.SESSION_SCOPE);
>    }
> }
>
> Was this a 'performance enhancement'? The problem I have with the 
> tomcat 5 code is that it doesn't catch errors. ValidateableBean just 
> happened to be an abstract class with multiple ValidateableBean 
> subclasses. The section of code that this is in had an if statement 
> around it that made sure that the 'payment' variable shouldn't have 
> been null, and that it was already an instance of a ValidateableBean 
> subclass, so the code would have just called pageContext.getAttribute 
> and have been done.
>
> Tomcat 4 was fine with the abstract class because when it compiled it 
> never tried validate the call to 'new mybeans.ValidateableBean()'
> Tomcat 5 throws an error that an abstract class can't be instantiated 
> (which is true, but why does is the compiler now forced to perform 
> this check?)
>
> Insights?
>
> Daniel Gibby
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message