Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #18570

Re: Wormholes

From Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at>
Newsgroups comp.lang.java.programmer
Subject Re: Wormholes
Date 2012-09-06 09:32 +0000
Organization A noiseless patient Spider
Message-ID <slrnk4grd8.u9l.avl@gamma.logic.tuwien.ac.at> (permalink)
References <0ska4895k2mp2j5fb5p4qnue7lsbdpoeoo@4ax.com> <9mbhh9-mce.ln1@s.simpson148.btinternet.com> <aapoq4F75iU1@mid.individual.net> <u40lh9-726.ln1@s.simpson148.btinternet.com>

Show all headers | View raw


Steven Simpson <ss@domain.invalid> wrote:
> So, we throw in a ThreadLocal:
>
>    static ThreadLocal<Context> context = ...;
>
>    class MyAppSpecBox extends Box {
>      InputStream getFieldContent() {
>        Context ctxt = context.get();
>        ...
>      }
>    }
>
> We set it before invoking the hierarchy:
>
>    Box root = cache.fetch(key);
>    Context ctxt = new Context(...);
>    context.set(ctxt);
>    InputStream in = root.getContent();

What strikes me odd in this scenario is the coincidence of
two things:
   There's *only one* specific Box-subclass, that requires 
      specific extra information
   The code that kicks off processing of the object tree does
      know about this specific need and does know how to
      cater to it specifically (and the specific piece of 
      information is even available at that place).

That looks really bolted (or duct-taped) on.

At some point in future, such things tend to accumulate.

Then either you end up with "invoking" code, that sets up
a number of different ThreadLocal<...>s for those specific
Boxes (that may or may not actually show up in the tree),
or you still set up only one such ThreadLocal<Context>,
and a couple of specific Boxes use it.

in the former case it seems like the Box abstraction
completely missed the point.

In the latter case, it seems as if it might then turn out to
be reasonable to modify the Box baseclass to pass along the
Context directly (even if some Boxes still don't need it):

class Box {
       InputStream getContent(Context ctx) {
              child-loop { ... child.getContext(ctx); }
              ... getFieldContent(ctx);
              ...
       }
       InputStream getFieldContent(Context ctx) {
           getFieldContent(); // default-impl
       }
       InputStream getFieldContent() {return null;}
}

subclasses that need the context would override getFieldContent(Context)
the others (like the old ones) would still just override getFieldContent().

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Wormholes Roedy Green <see_website@mindprod.com.invalid> - 2012-09-03 18:12 -0700
  Re: Wormholes eric@invalid.com (EricF) - 2012-09-04 02:06 +0000
    Re: Wormholes Roedy Green <see_website@mindprod.com.invalid> - 2012-09-04 10:08 -0700
    Re: Wormholes Wanja Gayk <brixomatic@yahoo.com> - 2012-09-09 13:55 +0200
  Re: Wormholes Arne Vajhøj <arne@vajhoej.dk> - 2012-09-03 22:34 -0400
    Re: Wormholes Stuart <DerTopper@web.de> - 2012-09-04 12:15 +0200
  Re: Wormholes markspace <-@.> - 2012-09-03 21:00 -0700
    Re: Wormholes Robert Klemme <shortcutter@googlemail.com> - 2012-09-04 07:08 +0200
  Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-04 08:47 +0200
    Re: Wormholes Lew <noone@lewscanon.com> - 2012-09-04 03:10 -0700
      Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-04 16:09 +0200
        Re: Wormholes Gene Wirchenko <genew@ocis.net> - 2012-09-04 08:34 -0700
          Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-04 17:46 +0200
            Re: Wormholes Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-09-04 09:31 -0700
        Re: Wormholes Lew <lewbloch@gmail.com> - 2012-09-04 11:14 -0700
        Re: Wormholes Arne Vajhøj <arne@vajhoej.dk> - 2012-09-04 19:59 -0400
    Re: Wormholes Roedy Green <see_website@mindprod.com.invalid> - 2012-09-04 13:20 -0700
      Re: Wormholes Arne Vajhøj <arne@vajhoej.dk> - 2012-09-04 20:00 -0400
      Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-05 09:01 +0200
      Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-05 09:02 +0200
      Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-05 09:02 +0200
        Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-05 09:03 +0200
      Re: Wormholes markspace <-@.> - 2012-09-05 17:34 -0700
  Re: Wormholes Steven Simpson <ss@domain.invalid> - 2012-09-04 14:18 +0100
    Re: Wormholes Robert Klemme <shortcutter@googlemail.com> - 2012-09-05 21:51 +0200
      Re: Wormholes Steven Simpson <ss@domain.invalid> - 2012-09-05 23:26 +0100
        Re: Wormholes Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-09-06 09:32 +0000
          Re: Wormholes Steven Simpson <ss@domain.invalid> - 2012-09-06 11:47 +0100
            Re: Wormholes Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-09-06 15:10 +0000
              Re: Wormholes Steven Simpson <ss@domain.invalid> - 2012-09-06 20:12 +0100
                Re: Wormholes Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-09-06 21:08 +0000
  Re: Wormholes Nigel Wade <nmw@ion.le.ac.uk> - 2012-09-04 17:26 +0100
  Re: Wormholes Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-09-04 09:28 -0700
  Re: Wormholes David Lamb <dalamb@cs.queensu.ca> - 2012-09-04 16:54 -0400

csiph-web