You could integrate with cactus..  Look at /src/test-cactus, there are some
examples...  Maven has a plugin as well..

> -----Original Message-----
> From: Filippos Slavik [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, December 10, 2003 7:07 PM
> To: Turbine Developers List; Eric Pugh
> Subject: Re: [PATCH] workaround for EAR/WAR deployments
>
>
> On Wednesday 10 December 2003 10:26, Eric Pugh wrote:
> > Filippos,
> >
> > I think the patch got eaten..  Could you repost to the list
> and send it to
> > me directly?
>
> Ok, I'm sending the patch again as an attachement this time.
> > Also, do you have unit tests demonstrating the functionality?
>
> Nope, I don't have... but I don't know how I can simulate a
> web-container
> enviroment with a Junit testcase .. Is there any kind of
> integration with
> junit testcases and tomcat for instance ?
>
> > That would make it easier for us to write unit tests that
> validate all the
> > services.
>
> Slavikos
>
> >
> > Eric
> >
> > > -----Original Message-----
> > > From: Filippos Slavik [mailto:[EMAIL PROTECTED]
> > > Sent: Tuesday, December 09, 2003 9:37 PM
> > > To: [EMAIL PROTECTED]
> > > Subject: [PATCH] workaround for EAR/WAR deployments
> > >
> > >
> > > I'm sending my patch for Turbine based web-apps that are
> > > being deployed as a
> > > WAR/EAR modules.
> > >
> > > This is a workaround and not a complete solution of the
> > > issue, since there is
> > > a need for a major refactoring in turbine's services which
> > > assumes that there
> > > is always an "applicationRoot" available.
> > >
> > > The hack here is based on the fact that fortunately all
> > > services (or most of
> > > them) and the turbine's main servlet initialization access
> > > resources through
> > > the turbine's static getRealPath(String) method which returns
> > > an absolute
> > > path of the resource.
> > >
> > > The proposed new behaviour is:
> > >
> > > There are two new methods.
> > >
> > > [1] java.io.InputStream getResourceAsStream(String) which
> returns an
> > > InputStream, obtained from the servlet's context, to the
> > > specified resource.
> > >
> > > [2] java.io.File getTempFileFromResource(String) which
> retrieves an
> > > InputStream, using the above method, and writes all
> > > resource's content to a
> > > temporary created file somewhere in the platforms temp directory
> > > (File.createTempFile(Stirng, String) is used).
> > >
> > > Turbine's static method getRealPath(String) is altered as:
> > >
> > > 1) first an attempt is made to retrieve the requested
> > > resource from the
> > > servlet's context and if successfull the absolute path of the
> > > temporary file
> > > is returned to the caller
> > >
> > > 2) if step (1) is not succesfull then the old behaviour is
> > > used instead (which
> > > should only happen if we're running junit tests AFAIK)
> > >
> > > patch against TURBINE_2_3 version.
> > >
> > > I have succesfully compiled turbine with the patch applied
> > > and deployed an WAR
> > > turbine based app contained within an EAR module. Certainly
> > > this is just a
> > > workaround and not all services will run correctly. In my
> > > case, the following
> > > services were enabled during tests:
> > > services.FactoryService.classname=org.apache.turbine.services.
> > > factory.TurbineFactoryService
> > > services.PoolService.classname=org.apache.turbine.services.poo
> > > l.TurbinePoolService
> > > services.RunDataService.classname=org.apache.turbine.services.
> > > rundata.TurbineRunDataService
> > > services.ServletService.classname=org.apache.turbine.services.
> > > servlet.TurbineServletService
> > > services.AssemblerBrokerService.classname=org.apache.turbine.s
> > > ervices.assemblerbroker.TurbineAssemblerBrokerService
> > > services.PullService.classname=org.apache.turbine.services.pul
> > > l.TurbinePullService
> > > services.MimeTypeService.classname=org.apache.turbine.services
> > > .mimetype.TurbineMimeTypeService
> > > services.GlobalCacheService.classname=org.apache.turbine.servi
> > > ces.cache.TurbineGlobalCacheService
> > > services.UniqueIdService.classname=org.apache.turbine.services
> > > .uniqueid.TurbineUniqueIdService
> > > services.SecurityService.classname=gr.forthnet.backgroundftp.w
> > > eb.turbine.services.security.BackgroundFTPSecurityService
> > > services.TemplateService.classname=org.apache.turbine.services
> > > .template.TurbineTemplateService
> > > services.VelocityService.classname=org.apache.turbine.services
> > > .velocity.TurbineVelocityService
> > >
> > > And I had no problems at all.
> > >
> > > If the patch will be accepted I would like to continue and
> > > refactor some
> > > services which currently requires an "applicationRoot" available.
> > >
> > > Best Regards
> > > Filippos Slavik
> > >
> > >
> > >
> > > Index: Turbine.java
> > >
> ===================================================================
> > > RCS file:
> > > /home/cvspublic/jakarta-turbine-2/src/java/org/apache/turbine/
> > > Turbine.java,v
> > > retrieving revision 1.45
> > > diff -u -r1.45 Turbine.java
> > > --- Turbine.java  2 Jul 2003 16:52:24 -0000       1.45
> > > +++ Turbine.java  9 Dec 2003 21:14:20 -0000
> > > @@ -54,10 +54,15 @@
> > >   * <http://www.apache.org/>.
> > >   */
> > >
> > > +import java.io.BufferedInputStream;
> > > +import java.io.BufferedOutputStream;
> > >  import java.io.File;
> > >  import java.io.FileInputStream;
> > >  import java.io.FileNotFoundException;
> > > +import java.io.FileOutputStream;
> > >  import java.io.IOException;
> > > +import java.io.InputStream;
> > > +import java.io.OutputStream;
> > >  import java.util.Properties;
> > >
> > >  import javax.servlet.ServletConfig;
> > > @@ -135,6 +140,7 @@
> > >   * @author <a href="mailto:[EMAIL PROTECTED]">Henning P.
> > > Schmiedehausen</a>
> > >   * @author <a href="mailto:[EMAIL PROTECTED]">Quinton
> > > McCombs</a>
> > >   * @author <a href="mailto:[EMAIL PROTECTED]">Eric Pugh</a>
> > > + * @author <a href="mailto:[EMAIL PROTECTED]">Filippos Slavik</a>
> > >   * @version $Id: Turbine.java,v 1.45 2003/07/02 16:52:24
> > > henning Exp $
> > >   */
> > >  public class Turbine
> > > @@ -263,6 +269,9 @@
> > >      private void configure(ServletConfig config,
> > > ServletContext context)
> > >              throws Exception
> > >      {
> > > +         // Set the Servlet's context right away.
> > > +         setTurbineServletContext(context);
> > > +
> > >          //
> > >          // Set up Commons Logging to use the Log4J Logging
> > >          //
> > > @@ -284,6 +293,14 @@
> > >          if (applicationRoot == null ||
> > > applicationRoot.equals(WEB_CONTEXT))
> > >          {
> > >              applicationRoot = webappRoot;
> > > +            if(applicationRoot==null) {
> > > +                 // if we're running within a servlet container
> > > enviroment
> > > +                 // the applicationRoot attribute will have a
> > > null value, since
> > > +                 // the applicationRoot can be a WAR or EAR
> > > file. Just set here
> > > +                 // a dummy value to avoid NullPointerExceptions
> > > with jakarta's
> > > +                 // common configuration framework
> > > +                 applicationRoot="foo";
> > > +            }
> > >              // log.info("got empty or 'webContext'
> Application root.
> > > Application root now: " + applicationRoot);
> > >          }
> > >
> > > @@ -390,7 +407,7 @@
> > >
> > >
> > >          setTurbineServletConfig(config);
> > > -        setTurbineServletContext(context);
> > > +
> > >
> > >          getServiceManager().setApplicationRoot(applicationRoot);
> > >
> > > @@ -459,6 +476,60 @@
> > >      }
> > >
> > >      /**
> > > +     * Returns the resource located at the named path as an
> > > <code>InputStream</code> object.
> > > +     *
> > > +  * @param resource_path a <code>String</code>
> > > specifying the path to the
> > > resource
> > > +  * @return the <code>InputStream</code> returned, or
> > > <code>null</code> if no
> > > resource exists at the specified path.
> > > +  */
> > > + public static InputStream getResourceAsStream(String
> > > resource_path) {
> > > +         return
> > > getTurbineServletContext().getResourceAsStream(resource_path);
> > > +    }
> > > +
> > > +    /**
> > > +     * Returns a File instance of a given resource. This
> > > method is supplied
> > > here
> > > +     * as a workaround for all turbine specific code which
> > > tries to access
> > > web-app
> > > +     * resources directly with absolute paths (getRealPath()).
> > > +     *
> > > +     * The tweak here is that the resource is retrieved from an
> > > <code>InputStream</code>
> > > +     * acquired from the servlet's context and it is written
> > > to a temporary
> > > file.
> > > +     *
> > > +  * @param resource_path a <code>String</code>
> > > specifying the path to the
> > > resource
> > > +  * @return An <code>File</code> instance pointing to
> > > the temp file or
> > > <code>null</code>
> > > +  * if the resource couldn't be found.
> > > +  */
> > > + public static File getTempFileFromResource(String
> > > resource_path) {
> > > +         InputStream in = null;
> > > +         OutputStream out = null;
> > > +         try {
> > > +                 File f_out =
> > > File.createTempFile("turbine_temp_resource", ".tmp");
> > > +                 f_out.deleteOnExit();
> > > +                 in = new
> > > BufferedInputStream(getResourceAsStream(resource_path));
> > > +                 out = new BufferedOutputStream(new
> > > FileOutputStream(f_out));
> > > +                 int b;
> > > +                 while((b=in.read())!=-1)
> > > +                         out.write(b);
> > > +                 return f_out;
> > > +         } catch (Exception ex) {
> > > +                 return null;
> > > +         } finally {
> > > +                 if(in!=null) {
> > > +                         try {
> > > +                                 in.close();
> > > +                                 in = null;
> > > +                         } catch(Exception ex) {
> > > +                         }
> > > +                 }
> > > +                 if(out!=null) {
> > > +                         try {
> > > +                                 out.flush();
> > > +                                 out.close();
> > > +                                 out = null;
> > > +                         } catch(Exception ex) {
> > > +                         }
> > > +                 }
> > > +         }
> > > +    }
> > > +    /**
> > >       * Finds the specified servlet configuration/initialization
> > >       * parameter, looking first for a servlet-specific
> > > parameter, then
> > >       * for a global parameter, and using the provided
> default if not
> > > @@ -1120,13 +1191,19 @@
> > >       */
> > >      public static String getRealPath(String path)
> > >      {
> > > -        if (path.startsWith("/"))
> > > -        {
> > > -            path = path.substring(1);
> > > +        // try to retrieve the requested resource
> > > +        // using the getTempFileFromResource(String).
> > > +        File resource_file = getTempFileFromResource(path);
> > > +        if(resource_file==null || !resource_file.exists()) {
> > > +         // oops! Resource is not available which means that
> > > +         // either we are not currently running within a servlet
> > > +         // container enviroment or we were unable to retrieve
> > > +         // the resource via getResourceAsStream() for
> > > some reason.
> > > +         // Fallback to Turbine's default behaviour;
> > > +                 resource_file = new
> > > File(getApplicationRoot(), path.startsWith("/") ?
> > > path.substring(1) : path);
> > >          }
> > > -
> > > -        return new File(getApplicationRoot(),
> > > path).getAbsolutePath();
> > > -    }
> > > +        return resource_file.getAbsolutePath();
> > > + }
> > >
> > >      /**
> > >       * Return an instance of the currently configured
> Service Manager
> > > --
> > >
> ####################################################################
> > > Filippos Slavik
> > > FORTHnet R&D, Heraklion, Greece
> > > e-mail : [EMAIL PROTECTED]
> > > phone : (+30) 2811 391230
> > > Key ID: 0xF4B5B375 Filippos Slavik(search pgp.mit.edu)
> > > Key FingerPrint: 81D4 25D0 01EB 9DCA 62E4  B694 20E7 31FB
> F4B5 B375
> > >
> ####################################################################
> > >
> > > "The software said 'runs on Win95 or better,' so I installed it
> > > on Linux..."
> > >
> > >
> > >
> > >
> > >
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail:
> [EMAIL PROTECTED]
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
>
> --
> ####################################################################
> Filippos Slavik
> FORTHnet R&D, Heraklion, Greece
> e-mail : [EMAIL PROTECTED]
> phone : (+30) 2811 391230
> Key ID: 0xF4B5B375 Filippos Slavik(search pgp.mit.edu)
> Key FingerPrint: 81D4 25D0 01EB 9DCA 62E4  B694 20E7 31FB F4B5 B375
> ####################################################################
>
> "The software said 'runs on Win95 or better,' so I installed it
> on Linux..."
>
>
>
>


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

Reply via email to