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