>From the Connection, I can search Jetty Server for the right servlet
context to find state set by the servlet (see code below).  But this seems
a bit fragile and would appreciate it if anybody knows a cleaner solution.

Thanks,
Josh

Set from servlet:

  *protected* *void* doGet(HttpServletRequest request, HttpServletResponse
response) *throws* ServletException, IOException {

    ServletContext s = *this*.getServletContext();

    s.setAttribute("foo", "foo value");

    ...

  }


Set from Connection:

  @Override

  *public* Connection newConnection(Connector connector, EndPoint ep) {

    ServerConnector sc = (ServerConnector)connector;

    System.*out*.println(findAttribute(sc.getServer(), "foo"));
       ....
    }

  *private* Object findAttribute(Server server, String name) {

    Deque<Handler> handlers = *new* ArrayDeque<Handler>();

    addHandlers(handlers, server.getHandlers());



    *while* (!handlers.isEmpty()) {

      Handler h = handlers.pop();

      *if* (h *instanceof* HandlerContainer) {

        addHandlers(handlers, ((HandlerContainer)h).getChildHandlers());

      }

      *if* (!(h *instanceof* WebAppContext)) {

        *continue*;

      }

      WebAppContext ctx = (WebAppContext)h;

      Object o = ctx.getServletContext().getAttribute(name);

      *if* (o != *null*) {

        *return* o;

      }

    }

    *return* *null*;

  }


  *private* *void* addHandlers(Deque<Handler> deque, Handler[] handlers) {

    *for* (Handler h : handlers) {

      deque.add(h);

    }

  }












On Mon, Jan 20, 2020 at 7:52 AM Josh Spiegel <joshlak...@gmail.com> wrote:

> I have the ConnectionFactory and the Connection implementations.
> I have the Servlet (deployed in a war file)
>
> The ConnectionFactory/Connection are deployed using a Jetty module/xml
> with start.jar.
> The servlet is deployed by dropping the war file in webapps.
>
> I have some dynamic state (mainly database connection pools) that I would
> like to share between the ConnectionFactory and the Servlet.
>
> I can set the state object as a context attribute from the servlet.
> However, then it isn't clear to me how I would retrieve it from either the
> ConnectionFactory or Connection.
>
> Thanks,
> Josh
>
>
>
>
>
>
>
> On Mon, Jan 20, 2020 at 1:29 AM Simone Bordet <sbor...@webtide.com> wrote:
>
>> Hi,
>>
>> On Mon, Jan 20, 2020 at 12:36 AM Josh Spiegel <joshlak...@gmail.com>
>> wrote:
>> >
>> > Hi,
>> >
>> > What is the cleanest way for a servlet (e.g. in a war file under
>> webapps) to communicate state with a custom ConnectionFactory running in
>> the same server?
>>
>> A custom ConnectionFactory typically creates Connections that parse
>> bytes that have been read from the network.
>> If that's the case, then your servlet should open a socket and write
>> the custom protocol bytes so that they can be read and parsed by the
>> custom Connection - basically you have to write a client for your
>> custom protocol.
>>
>> > Is there is some way to set Server attributes from the servlet or
>> something like that?
>>
>> You need to detail what you want to do here, and consider the
>> lifetimes of the objects you want to deal with.
>> You do not want that a second request to the servlet overwrites the
>> attribute set by the first request.
>>
>> > A static variable would probably work for me but I am hoping for
>> something that is more decoupled and scoped at the Server level.
>>
>> I doubt a static will work - would not be overwritten for every request?
>>
>> Can you detail the problem first, rather than the solution?
>>
>> --
>> Simone Bordet
>> ----
>> http://cometd.org
>> http://webtide.com
>> Developer advice, training, services and support
>> from the Jetty & CometD experts.
>> _______________________________________________
>> jetty-users mailing list
>> jetty-users@eclipse.org
>> To change your delivery options, retrieve your password, or unsubscribe
>> from this list, visit
>> https://www.eclipse.org/mailman/listinfo/jetty-users
>>
>
_______________________________________________
jetty-users mailing list
jetty-users@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://www.eclipse.org/mailman/listinfo/jetty-users

Reply via email to