<html>
    <head>
      <base href="http://icedtea.classpath.org/bugzilla/" />
    </head>
    <body><span class="vcard"><a class="email" href="mailto:jon.vanalten@redhat.com" title="Jon VanAlten <jon.vanalten@redhat.com>"> <span class="fn">Jon VanAlten</span></a>
</span> changed
              <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - API: Avoid ever creating Request objects without a receiver"
   href="http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=2052">bug 2052</a>
          <br>
             <table border="1" cellspacing="0" cellpadding="8">
          <tr>
            <th>What</th>
            <th>Removed</th>
            <th>Added</th>
          </tr>

         <tr>
           <td style="text-align:right;">CC</td>
           <td>
                
           </td>
           <td>jon.vanalten@redhat.com
           </td>
         </tr></table>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - API: Avoid ever creating Request objects without a receiver"
   href="http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=2052#c1">Comment # 1</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - API: Avoid ever creating Request objects without a receiver"
   href="http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=2052">bug 2052</a>
              from <span class="vcard"><a class="email" href="mailto:jon.vanalten@redhat.com" title="Jon VanAlten <jon.vanalten@redhat.com>"> <span class="fn">Jon VanAlten</span></a>
</span></b>
        <pre>(In reply to Omair Majid from <a href="show_bug.cgi?id=2052#c0">comment #0</a>)
<span class="quote">> The Request API currently allows the creation of requests without a
> receiever. The agent encounters a NullPointerException when it tries to
> handle them, and no reply (not even ERROR) is ever sent to the client. In my
> test, the client hung until I killed it.
> </span >

As an immediate, API-preserving measure that we can consider even before 2.0, I
would be all for adding some sanity check for this in RequestQueueImpl, and
sending Error response to any listeners without even needing to go over the
wire.  A check at the agent side also seems appropriate.

<span class="quote">> A Request without a receiver set is essentially a mistake by the developer
> trying to use the Request API. We should try and limit such mistakes. Each
> Request object requires a target (in the constructor); it should also
> require a receiver.
> </span >

That does sound reasonable.  As a nit, the target is not currently *strictly*
required (we don't do null check).  If we add this to the constructor, we
should probably do null checks there.

<span class="quote">> On a slightly different note, should a receiver be part of the request API
> at all? Seems more flexible if anything that wants to handle a request can
> handle it.</span >

What would such flexibility offer to plugin developers?

I can think of one pitfall.  Someone implementing a plugin that requires
command channel will not be able to know whether the Request that they create
on the client side will have side effects above and beyond the actions of the
RequestHandler that they implement on the agent side.  This sort of scares me,
and unless there is some practical reason I would prefer if the
destination/handler remains explicit.  It would also require on the agent side,
to go through *all* of the registered handlers to try and handle requests,
which seems wasteful.

That said, maybe there is some nicer way of communicating the intended
destination/handler?  I really just tried to keep it simple, look up receiver
as OSGi service by class name.  It would really be a semantic difference, but
we could create some property other than class name.  Whether we do that or
not, it might also be worthwhile to change ReceiverRegistry so that it enforces
uniqueness.  Right now, unless I am missing something, any RequestHandler can
be registered to a given class name; this means that more than one such Handler
can be registered, and we just arbitrarily take the first one that OSGi runtime
gives us when we go and look it up.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>