Well, the proxy code needs a bit of work. First, I'd say, I need to rollback the serializability requirement for all generated proxies. It's easy enough to make your proxies serializable if you just add java.io.Serializable to the list of classes/interfaces you want proxied (I'll put in a test case for that). Next, we could add some simple genericized methods that only take one class/interface and return exactly that type. I have actually already implemented the "recorder" functionality you speak of. I just have to remember where it is at the moment! I think I'm going to download proxy and give it a bit of TLC tonight.
On Wed, Jul 14, 2010 at 7:01 PM, Matt Benson <gudnabr...@gmail.com> wrote: > James, > What's the status of the genericized proxy 2.0 branch? I think the code I > talked about yesterday is basically a fancy way to describe building an > Interceptor. So proxy might be a good home for it. It's not really limited > to annotations anyway, though I could see providing a subclass configured to > do sane things for annotation proxies. > > -Matt > > On Jul 13, 2010, at 6:10 PM, Matt Benson wrote: > >> Hi all, >> I've been getting friendly with the Bean Validation (bval) podling camp of >> late, and one of the requirements of implementors of JSR303 is that they >> generate annotation instances on the fly. In practice this means proxying >> interfaces. It's a foregone conclusion that a JSR303 implementation must do >> this by virtue of their being required to treat XML-defined constraints more >> or less indistinguishably from constraints expressed via code annotations, >> and the specification group chose the annotation to be the lowest common >> denominator as far as validation constraints are concerned. >> >> Now, obviously there are lots of ways to generate these runtime proxies, >> and we even have a [proxy] component. bval already has mechanisms in place >> to accomplish their XML-to-annotation requirements as far as implementing >> the JSR303 spec is concerned. However, recently the Hibernate-Validator >> project, which is the RI of the spec, released their 4.1.0 version, which >> contained support for the idea of fluent builders for these constraints. >> The logical next step for javax.validation providers is to explore dynamic >> application of constraints so this was bound to happen. However, their >> current implementation requires the values of a custom annotation's methods >> be set either using a custom-written helper class, or referring to methods >> by name. Each approach has its drawbacks (the former requiring extra >> developer involvement; the latter lacking type-safety). >> >> Over the past year or so, I've become a big fan of the Mockito library >> which manages to allow you to stub out the behavior of your mock objects >> using a mechanism that, by recording actual method invocations on a mock >> object, stays completely typesafe as you specify your result objects. It >> occurred to me that something like this would perfectly satisfy my wishes >> for type-safety without requiring an ancillary class to handle a given >> annotation. Having gotten past the hard part (the idea itself) I now have >> an implementation-agnostic API for setting up annotation proxies fluently >> and with type-safety, as well as a working implementation of this API. Note >> that neither the API nor the implementation are in any way restricted to >> javax.validation annotations. >> >> I expect this to be a fairly useful type of component as annotations become >> a larger and larger part of day-to-day Java programming, and for that reason >> would be happy for it to live in Commons. I *don't* know that this is large >> enough to be a component on its own. On the other hand, because my initial >> implementation is backed by Mockito itself I am somewhat hesitant to add >> this to e.g. [lang]. I wonder if any other Commons devs have any thoughts >> or advice on what I should do with this thing now that I've written it. >> >> Thanks for reading, >> Matt > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org