users@grizzly.java.net

Re: issue 460? -- note

From: Richard Corsale <igf1_at_yahoo.com>
Date: Mon, 2 Mar 2009 08:44:36 -0800 (PST)

well, my thinking is that its somewhat confusing to add the context to the adapter OR to the webserver. Really what we could do here is simply have an addGrizzlyAdapter(GrizzlyAdapter, GrizzlyContext). This way it would be clear to the API user that a context must set in the loader its self, which would over ride the one set in the Adapter. The addGrizzlyAdapter would accept an Object of type GrizzlyContext with the constructor being either (String Context) or (List<String> ContextList) as the second param. I think the most common useage is to bind an adapter to a single context :) so adding an adapter would look like

addGrizzlyAdapter(adapterImpl, new GrizzlyContex("/my/new/Context"))

this new data class for the context would give us a little controll over formating contexts, in the event that we wanted to make a context case insenctive for example, or apply UTF-X or special chars etc etc.

BTW, when I updated to 1.9.9 all problems I had with this issue went away! Great work!

--Richard
  



----- Original Message ----
From: Jeanfrancois Arcand <Jeanfrancois.Arcand_at_Sun.COM>
To: users_at_grizzly.dev.java.net
Sent: Monday, March 2, 2009 10:22:39 AM
Subject: Re: issue 460? -- note


Salut,

Richard Corsale wrote:
> Ahhh I see, in the ServletServer class that I included in that project > Line 41, I call (setContextPath(ServletContext);) if I omit that it works! So the bug is deffinetly related to setting the context in the Adapter, rather than setting it in the webservers addGrizzlyAdapter String[] parameter. If were going to mandate that the server be passed the adapter and the context when its added, We should probably remove the setContextPath from ServletAdapter class. On the other hand, could remove the array of strings from the addGrizzlyAdapter and relocate that to the ServletAdapter and make an addContext(); class there. (I know I harp on this :) but it just seems like better design IMO)

The issue we have here is the WebServer API requires:

addGrizzlyAdapter(GrizzlyAdapter ga);

The ServletAdapter is a special case as it can be used directly with the SelectorThread, bypassing the GrizzlyWebServer. So we need the setContextPath/ServletPath

What we may want to do is to define a GrizzlyServletWebServer which extends the GrizzlyWebServer and add something like you are proposing, like:

addServletAdapter(ServletAdapter)

and internally use the getServletPath/ContextPath information to register to the Mapper.

What peoples thinks? My only concern is I would really like to keep one single entry point with Grizzly Http, hence I'm +0 on adding this new API.

A+

-- Jeanfrancois





>
> --Richard
>
> ------------------------------------------------------------------------
> *From:* Richard Corsale <igf1_at_yahoo.com>
> *To:* users_at_grizzly.dev.java.net; Jeanfrancois Arcand <Jeanfrancois.Arcand_at_Sun.COM>
> *Sent:* Friday, February 27, 2009 3:58:27 PM
> *Subject:* Re: issue 460? -- note
>
> Ok Im uploading attached to this message a test case, its a netbeans project, and its just as simple as I could make it. There are 3 files here + I use the server 1.9.7 the latest upload from the 24th
>
> the 3 files I have here are:
>
> Main: the execution point
> ServletServer: this aggregates the adapters into one bean (I have also tested with servlet and grizzly adapters created in the Main file, its exactly the same)
> testServelt: well this is just the servlet that prints outPut
>
> Problem:
> take a look at the Main file, there you will see that I load 6 instances of testServlet, 3 that extend the root context /test1, /test2, /test3 . All of these are accessable no problem. Now look at the last three
> that I load: /test/test4, /test/test5, /test/test6 ONLY test4 works. The other subContexts /test/test > 4 fail with the message:
>
>
> Resource Not Found
>
>
> ------------------------------------------------------------------------
> *From:* Survivant 00 <survivant00_at_gmail.com>
> *To:* users_at_grizzly.dev.java.net
> *Sent:* Friday, February 27, 2009 2:46:47 PM
> *Subject:* Re: issue 460? -- note
>
> we be easier if I had a testcase that I could run.
>
>
>
>
> 2009/2/27 Richard Corsale <igf1_at_yahoo.com <mailto:igf1_at_yahoo.com>>
>
>
> When I attempt to load adapters as follows:
>
> (assume that "Server" is a grizzlyWebServer )
> -----------------------
> this.Server.addGrizzlyAdapter(sa, new String[]{ContextPath});
>
> in a loop which is read from the hashmap containing the Grizzly
> adapter and its coresponding context (as one context is specific to
> one servlet in this instance)
>
> output:
> DEBUG >> API.GrizzlyHarness : About to load servlet:
> /OortCloud/test2 to root folder: .
> DEBUG >> API.GrizzlyHarness : About to load servlet:
> /OortCloud/test3 to root folder: .
> DEBUG >> API.GrizzlyHarness : About to load servlet:
> /OortCloud/debug to root folder: .
> DEBUG >> API.GrizzlyHarness : About to load servlet: /OortCloud/test
> to root folder: .
>
>
> Only the first adapter gets installed, the subsequent adapters are
> not loaded (at least to their specified context). So I can only
> acess test2 if I specify a RootFolder I can access all
> can someone onfirm
>
>
> ----- Original Message ----
> From: Richard Corsale <igf1_at_yahoo.com <mailto:igf1_at_yahoo.com>>
> To: users_at_grizzly.dev.java.net <mailto:users_at_grizzly.dev.java.net>
> Sent: Friday, February 27, 2009 1:42:41 PM
> Subject: issue 460?
>
>
> ohhh see I was adding contexts one at a time, in a loop rather than all
> at once (we really should encapsulate the context in the adapter as a
> constructor param, since its mandatory for and relative to the
> grizzlyadapter :) )
>
> heres how I have been doing it:
>
> This
> is the bean that holds servlets/GrizzlyAdapters and their relitive
> contexts, I refer to this as a ServletServer as it makes more sence (to
> me) to load servlets into a server.
> -----------------------------------
> public class ServletServer{
>
> private HashMap<String, ServletAdapter> ServletAdapters = new
> HashMap<String, ServletAdapter>();
>
> public ServletServer(Servlet ServletClass, String ServletContext) {
> addServlet(ServletContext, ServletClass);
> }
>
> public ServletServer() {
> }
>
>
> /**
> * Adds a new servlet to this server, will overwrite an existing
> instance if
> * the contexts collide.
> *
> * @param Context <b the context/uri for this servlet >
> * @param ServletInstance
> */
> public void addServlet(String ServletContext, Servlet
> ServletInstance){
> ServletAdapter sa = new ServletAdapter();
> sa.setServletInstance(ServletInstance);
> // sa.setRootFolder(OortFileUtils.instance.getObjectsDirectory(ServletInstance));
> sa.setHandleStaticResources(true);
> sa.addInitParameter("default-encoding", "UTF-8");
> sa.setContextPath(ServletContext);
> sa.setProperty("load-on-startup","1");
> this.ServletAdapters.put(ServletContext, sa);
> }
>
> public HashMap<String, ServletAdapter> getServletAdapters() {
> return ServletAdapters;
> }
> }
>
>
> And here is the controller code that loads these adapters into the
> GrizzlyWebserver from the bean
>
> -------------------------------------------------
> public void doLoadServletServer(ServletServer servletServer){
> HashMap<String, ServletAdapter> servletStore =
> servletServer.getServletAdapters();
> for(String context: servletStore.keySet()){
> ServletAdapter sa = servletStore.get(context);
> // String RootFolder =
> OortFileUtils.getObjectsDirectory(servletStore.get(context));
> // sa.setRootFolder(RootFolder);
> loadServletAdapter(sa);
> }
>
> }
>
> private void loadServletAdapter(ServletAdapter sa){
> OortDebug.out.print("About to load servlet:
> "+sa.getContextPath()+" to root folder: "+sa.getRootFolder() , this);
> this.Server.addGrizzlyAdapter(sa, new String[]{sa.getContextPath()});
>
> }
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
> <mailto:users-unsubscribe_at_grizzly.dev.java.net>
> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
> <mailto:users-help_at_grizzly.dev.java.net>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
> <mailto:users-unsubscribe_at_grizzly.dev.java.net>
> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
> <mailto:users-help_at_grizzly.dev.java.net>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net <mailto:users-unsubscribe_at_grizzly.dev.java.net>
> For additional commands, e-mail: users-help_at_grizzly.dev.java.net <mailto:users-help_at_grizzly.dev.java.net>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
For additional commands, e-mail: users-help_at_grizzly.dev.java.net