On Fri, 2003-02-21 at 16:52, James Cooley wrote:
> Hi Peter,
> 
>   This was not a requirement for the servlet and I haven't included it - 
> see previous mails. Scott is deciding how we will integrate the servlet 
> into the JBoss startup script and retire the WebService. He might best 
> explain how this will be addressed.

Ok. If there are no new ways of adding the classloader of EJB:s deployed
through an ear with a scoped repository this means that dynamic rmi
classloading will not work for these EJB:s as far as I can see it.

//Peter
> 
> Rgds,
> 
> James
> 
> Peter Antman wrote:
> > Hi,
> > just curious: will this work with a scoped ear-deployer. How are EJBS:
> > deployed from within a scoped ear-deployer made available to the servlet
> > classloader? With WebService this was done through addClassLoader(), but
> > how is it done in this servlet aproach?
> > 
> > //Peter
> > 
> > On Mon, 2003-02-17 at 19:33, James Cooley wrote:
> > 
> >>Hi Dain,
> >>
> >>   I wrote a servlet (attached) and it looks like it will simplify
> >>things.
> >>
> >>It effectively replaces WebService and WebServer (WebService
> >>simply wraps WebServer). WebClassLoader doesn't have a dependency on
> >>WebServ* so it can operate as normal. I ran the DynLoadingUnitTestCase
> >>and it passes. Funnily enough it passes if it succeeds with
> >>    ./build.sh -Dtest=jrmp tests-client-unit
> >>but fails with
> >>    ./build.sh -Dtest=jrmp test
> >>I think this is how it's supposed to be called at any rate.
> >>
> >>A couple of points:
> >>
> >>1. I didn't implement addClassLoader - AFAIK Scott said we will use the
> >>servlets class loader to retrieve all classes. Removing addClassLoader
> >>doesn't appear to cause a problem.
> >>2. The WebServ* classes should be removed.
> >>3. run.sh/run.bat will have to be updated with              
> >>    -Djava.rmi.server.codebase=http://localhost:8080/class-loader/
> >>4. Do we need to have a jmx service for this?
> >>
> >>I've been working on the 3.2 branch but it should work with 4.0. I have
> >>been using my own xdoclet ant script to build it as a .war - do you want
> >>me to use another deployment script as a template?
> >>
> >>I'll have some time over the next couple of days to write a compliant 
> >>build script and make any other changes you may want.
> >>
> >>James
> >>
> >>Dain Sundstrom wrote:
> >>
> >>>We have a small project open for a volunteer.  In Jboss 2 and 3 we have 
> >>>a custom lightweight web server (port 8083) that returns java class 
> >>>files from the classLoader.getResouceAsStream to RMI clients (this is 
> >>>how remote class loading happens).  I talked to Scott at JBoss Boot Camp 
> >>>and we think it is a good idea to replace this with a plain old Servlet 
> >>>for JBoss 4.0 so it can work with regular security, pooling and such.  
> >>>This is a fairly simple piece of code and shouldn't take longer then a 
> >>>day or two.  If you are interested the code can be found in 
> >>>jboss-head/server/src/main/org/jboss/web/WebServer.java
> >>>
> >>>-dain
> >>>
> >>>
> >>>
> >>>-------------------------------------------------------
> >>>This SF.NET email is sponsored by:
> >>>SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
> >>>http://www.vasoftware.com
> >>>_______________________________________________
> >>>Jboss-development mailing list
> >>>[EMAIL PROTECTED]
> >>>https://lists.sourceforge.net/lists/listinfo/jboss-development
> >>>
> >>>
> >>
> >>
> >>----
> >>
> > 
> > 
> >>/* JBoss, the OpenSource J2EE webOS
> >> *
> >> * Distributable under LGPL license.
> >> * See terms of license at gnu.org.
> >> */
> >>
> >>package org.jboss.web;
> >>
> >>import javax.servlet.ServletException;
> >>import javax.servlet.ServletConfig;
> >>import javax.servlet.http.HttpServlet;
> >>import javax.servlet.http.HttpServletRequest;
> >>import javax.servlet.http.HttpServletResponse;
> >>import java.io.IOException;
> >>import java.io.InputStream;
> >>import org.jboss.logging.Logger;
> >>import org.jboss.util.stream.Streams;
> >>
> >>/**
> >> * The HTTPClassLoader Servlet's primary purpose is to simplify dynamic 
>class-loading in RMI.
> >> *
> >> * It can serve any file that is available, including class-files.
> >> * This is a replacement for the WebServer class in this package. 
> >> * 
> >> * @web.servlet
> >> *     display-name="JBoss HTTPClassLoaderServlet"
> >> *     load-on-startup="1"
> >> *     name="HTTPClassLoaderServlet"
> >> *
> >> * @web.servlet-mapping
> >> *     url-pattern="/*"
> >> *
> >> * @link org.jboss.test.jrmp.test.DynLoadingUnitTestCase
> >> * @see http://java.sun.com/j2se/1.4/docs/guide/rmi/codebase.html
> >> *
> >> * @author  <a href="mailto:[EMAIL PROTECTED]";>James Cooley</a>
> >> */
> >>
> >>public class HTTPClassLoaderServlet extends HttpServlet
> >>{
> >>  
> >>   // Constants -----------------------------------------------------
> >>   
> >>   // Attributes ----------------------------------------------------
> >>   private static Logger log = Logger.getLogger(HTTPClassLoaderServlet.class);
> >>
> >>   public static final String CONTENT_TYPE = "application/binary";
> >>
> >>
> >>   public void init(ServletConfig conf) throws ServletException
> >>   {
> >>      super.init(conf);
> >>   }
> >>   
> >>   /**
> >>    * Called by the server (via the service method) to allow a servlet to handle a 
>POST request.
> >>    * The HTTP POST method allows the client to send data of unlimited length to 
>the Web server
> >>    * a single time and is useful when posting information such as credit card 
>numbers.
> >>    */
> >>   public void doPost(HttpServletRequest request, HttpServletResponse response)
> >>      throws IOException, ServletException
> >>   {
> >>      log.trace("post called");
> >>      doGet(request, response);
> >>   }
> >>
> >>   public void doGet(HttpServletRequest request, HttpServletResponse response) 
>throws ServletException
> >>   {   
> >>      String filePath = null;
> >>      boolean traceOn = log.isTraceEnabled();
> >>      response.setContentType(CONTENT_TYPE);
> >>      try
> >>      {
> >>         String servletRoot = request.getContextPath(); 
> >>         int startOfFilePath = servletRoot.length() + 1; // +1 to get the trailing 
>"/"
> >>         String rawPath = request.getRequestURI().substring(startOfFilePath);
> >>         boolean usesJBossProtocol = rawPath.indexOf(']') > 0;
> >>         if(usesJBossProtocol)
> >>            filePath = extractClassName(rawPath);
> >>         else
> >>            filePath = rawPath;
> >>         
> >>         if (traceOn)
> >>         {
> >>            log.trace("servletRoot("+servletRoot+")");
> >>            log.trace("rawPath("+rawPath+")");
> >>            log.trace("filePath("+ filePath+")");
> >>         }
> >>
> >>         if(filePath == null)
> >>         {
> >>            response.sendError(HttpServletResponse.SC_NOT_FOUND, "Requested class 
>name set to null!");
> >>            return;
> >>         }
> >>         
> >>         InputStream classStream = 
>Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath);
> >>         if(classStream != null)
> >>         {
> >>            long bytes = Streams.copy(classStream, response.getOutputStream());
> >>            if(log.isTraceEnabled())
> >>               log.trace("copied " + bytes + " bytes");
> >>         }
> >>      }
> >>      catch(IOException ioex)
> >>      {
> >>         // this will send back the correct HTTP error code
> >>         try
> >>         {
> >>            response.sendError(HttpServletResponse.SC_NOT_FOUND, "Could not find " 
>+ filePath);
> >>         }
> >>         catch(IOException ioexOops)
> >>         {
> >>            log.fatal(ioexOops);
> >>         }
> >>      }
> >>   }
> >>
> >>
> >>
> >>   /**
> >>    *
> >>    * This is to support a JBoss proprietary class loading protocol.
> >>    * We do not use the class loader key as we don't support the
> >>    * addition of classloaders. The rest of this comment describes
> >>    * the protocol.
> >>    * 
> >>    * Parse the path into the class loader key and file path.
> >>    *
> >>    * The class loader key is a string whose format is 
> >>    * "ClassName[oid]",  where the oid substring may contain '/'
> >>    * chars. The expected form of the raw path is:
> >>    *
> >>    *     "SomeClassName[some/object/id]/some/file/path"
> >>    *
> >>    * The class loader key is "SomeClassName[some/object/id]"
> >>    * and the file path is "some/file/path"
> >>    *
> >>    * @param request a <code>HttpServletRequest</code> value
> >>    * @return a <code>String</code> value - the filePath that was found
> >>    * @exception IOException if an error occurs
> >>    */
> >>   protected String extractClassName(String rawPath)
> >>   {
> >>      int endOfKey = rawPath.indexOf(']');
> >>      String filePath = rawPath.substring(endOfKey+2);
> >>      String loaderKey = rawPath.substring(0, endOfKey+1);
> >>      log.trace("loaderKey = "+loaderKey);
> >>      log.trace("filePath = "+filePath);
> >>      return filePath;
> >>   }
> >>   
> >>}
> >>
-- 
------------------------------------------------------------
Peter Antman    Chief Technology Officer, Development
Technology in Media, Box 34105 100 26 Stockholm
WWW: http://www.tim.se  WWW: http://www.backsource.org
Email: [EMAIL PROTECTED]        
Phone: +46-(0)8-506 381 11 Mobile: +46-(0)704 20 58 11
------------------------------------------------------------



-------------------------------------------------------
This SF.net email is sponsored by: SlickEdit Inc. Develop an edge.
The most comprehensive and flexible code editor you can use.
Code faster. C/C++, C#, Java, HTML, XML, many more. FREE 30-Day Trial.
www.slickedit.com/sourceforge
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to