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