The way the your web.xml is configured does not have the requests going to 
JasperReportServlet getting filtered by WicketSessionFilter. Change the filter 
mapping for WicketSessionFilter from /app/* to /report/* or /* and you should 
see it work the way you want.

________________________________

From: Matthew Hanlon [mailto:[EMAIL PROTECTED]
Sent: Tue 6/3/2008 6:18 PM
To: users@wicket.apache.org
Subject: Re: Wicket Session and non-Wicket Servlet



>
> Check out the api for WicketSessionFilter, it will tell you how to make the
> session available for non wicket servlets.
>
>
> http://wicket.apache.org/docs/wicket-1.3.2/wicket/apidocs/org/apache/wicket/protocol/http/servlet/WicketSessionFilter.html
>


Yeah, that's how I had my filter and servlet configured originally.  But the
problem was that the request never seemed to be making it to the servlet,
instead the WicketFilter would pick it up and handle it.  Perhaps that is
another flaw.  So I dropped the mapping of the WicketFilter to the servlet,
and then, of course, I got my IllegalStateException.

Here's my current setup in web.xml:

<filter>
  <filter-name>openSessionInViewFilter</filter-name>
   <filter-class>
      org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
   </filter-class>
</filter>
<filter>
  <filter-name>WicketSessionFilter</filter-name>
  <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
  <init-param>
    <param-name>applicationClassName</param-name>

<param-value>com.alliancemanaged.simis.web.SIMISApplication</param-value>
  </init-param>
  <init-param>
    <param-name>filterName</param-name>
    <param-value>ReportingApplication</param-value>
  </init-param>
</filter>
<!-- Filter Mappings -->
<filter-mapping>
  <filter-name>openSessionInViewFilter</filter-name>
  <url-pattern>/app/*</url-pattern>
</filter-mapping>
<filter-mapping>
  <filter-name>openSessionInViewFilter</filter-name>
  <url-pattern>/report</url-pattern>
</filter-mapping>
<filter-mapping>
  <filter-name>WicketSessionFilter</filter-name>
  <url-pattern>/app/*</url-pattern>
</filter-mapping>
<!-- Servlet to serve up JasperReports -->
<servlet>
  <servlet-name>JasperReportServlet</servlet-name>

<servlet-class>com.alliancemanaged.simis.web.jasperreport.JasperReportServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
<!-- Servlet to serve images for JasperReport HTML output -->
<servlet>
  <servlet-name>JasperImageServlet</servlet-name>

<servlet-class>com.alliancemanaged.simis.web.jasperreport.JasperImageServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<!-- Servlet Mappings -->
<servlet-mapping>
  <servlet-name>JasperReportServlet</servlet-name>
  <url-pattern>/report/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>JasperImageServlet</servlet-name>
  <url-pattern>/reportimage/*</url-pattern>
</servlet-mapping>

I think I got it to work correctly via the method Martijn suggested.  That's
what I had been trying to do, just couldn't figure it out.  If i understand
you correct, Martijn, this is what I'm doing:

MySession session = null;
for(Iterator<String> iter = Application.getApplicationKeys().iterator();
iter.hasNext();) {
String key = iter.next();
Object sess = servletRequest.getSession().getAttribute("wicket:" + key +
":session");
if (sess != null && sess instanceof MySession) {
session = (MySession)sess;
break;
}
}

I'm not sure if that's the best or most robust way, but it seems to get the
job done.  If there's a better solution, please tell!

Regards,
Matthew.



>
> On Tue, Jun 3, 2008 at 4:30 PM, Martijn Dashorst <
> [EMAIL PROTECTED]>
> wrote:
>
> > You can't access the Wicket Session from outside a Wicket request
> > using Session.get(). It is a thread local that is maintained by the
> > request cycle. If it was possible in 2.0, then that was a bug and most
> > certainly a security risk.
> >
> > You should try to look up the Wicket session in the HttpSession of
> > your servlet using the session id and wicket key.
> >
> > Or just store the report in the http session instead.
> >
> > Martijn
> >
> > On Tue, Jun 3, 2008 at 10:21 PM, Matthew R Hanlon <[EMAIL PROTECTED]>
> > wrote:
> > > Okay, I may have this all wrong, and then that's my problem.  I have an
> > > application that was developed under the 2.0 branch that I recently
> > migrated
> > > to 1.4.  This application uses a servlet to handle requests for Jasper
> > > Reports, and under 2.0 everything worked great.  I store the report
> > request
> > > in the user's Session, and retrieve it in the JasperReportServlet to
> look
> > up
> > > the request.  In my JasperReportServlet I was doing:
> > >
> > >
> > >
> > > public final void doGet(final HttpServletRequest servletRequest, final
> > > HttpServletResponse servletResponse) throws ServletException,
> IOException
> > >
> > > {
> > >
> > >      String requestId =
> > >
> >
> servletRequest.getParameter(ReportingConstants.PARAMETER_NAME_REPORT_REQUEST
> > > );
> > >
> > >      ReportRequest reportReq = null;
> > >
> > >      MySession session = (MySession)Session.get();
> > >
> > >      reportReq = session.getReportRequest(requestId);
> > >
> > >
> > >
> > >      // handle report request, etc.
> > >
> > > }
> > >
> > >
> > >
> > > However, in 1.4 when I do Session.get() from my JasperReportServlet I
> am
> > > getting the error java.lang.IllegalStateException: you can only locate
> or
> > > create sessions in the context of a request cycle.
> > >
> > >
> > >
> > > So, can I no longer get an object from my wicket Session from a
> > non-wicket
> > > Servlet?  I've been looking all over, and can't seem to find the right
> > > answer.  Thanks for any help.
> > >
> > >
> > >
> > > Regards,
> > >
> > > Matthew.
> > >
> > >
> > >
> > >
> >
> >
> >
> > --
> > Become a Wicket expert, learn from the best: http://wicketinaction.com 
> > <http://wicketinaction.com/> 
> > Apache Wicket 1.3.3 is released
> > Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.3
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
> --
> Ryan Gravener
> http://twitter.com/ryangravener
>



--
Matthew Rollins Hanlon
http://squareoftwo.org <http://squareoftwo.org/> 
________________________________________
Hanlon's Razor:
"Never attribute to malice that which can be adequately explained by
stupidity."
http://wikipedia.org/wiki/Hanlon's_razor


______________

The information contained in this message is proprietary and/or confidential. 
If you are not the 
intended recipient, please: (i) delete the message and all copies; (ii) do not 
disclose, 
distribute or use the message in any manner; and (iii) notify the sender 
immediately. In addition, 
please be aware that any message addressed to our domain is subject to 
archiving and review by 
persons other than the intended recipient. Thank you.
_____________

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to