Thanks for the confirmation Matthias ! 

On 2019/09/05 23:23:01, "Matthias J. Sax" <[email protected]> wrote: 
> I must create a new instance. Only creating a `new
> WrappingValueTransformer()` won't work.
> 
> 
> -Matthias
> 
> 
> 
> On 9/5/19 2:42 AM, Jorg Heymans wrote:
> > Hi,
> > 
> > If i have a ValueTransformer that wraps another ValueTransformer like:
> > 
> > class WrappingValueTransformer<V, VR> implements ValueTransformer<V, VR> {
> >   ....
> >   final ValueTransformer<V, VR> delegateTransformer;
> > 
> >   ProcessorContext processorContext;
> > 
> >   WrappingValueTransformer(ValueTransformer<V, VR> delegateTransformer) {
> >     this.delegateTransformer = delegateTransformer;
> >   }
> > 
> >   @Override
> >   public void init(ProcessorContext processorContext) {
> >     this.processorContext = processorContext;
> >     delegateTransformer.init(processorContext);
> >   }
> > 
> >   @Override
> >   public VR transform(V v) {
> >       ....
> >       VR transform = delegateTransformer.transform(v);
> >       ....
> >       return transform;
> >   }
> > 
> >   @Override
> >   public void close() {
> >     delegateTransformer.close();
> >   }
> > }
> > 
> > Should the Supplier for this wrapper ensure that the delegate transformer 
> > is also instantiated anew each time, like:
> > 
> > () -> return new WrappingValueTransformer(new AnotherValueTransformer());
> > 
> > Or can the WrappingValueTransformer hold on to the transformer it wraps, 
> > like:
> > 
> > ValueTransformer t = new AnotherValueTransformer();
> > () -> return new WrappingValueTransformer(t);
> > 
> > Reason i'm asking is that over in openzipkin/brave there is an 
> > IllegalStateException (https://github.com/openzipkin/brave/issues/982) 
> > occuring when accessing ProcessorContext#headers() during transform() from 
> > a ValueTransformer that is wrapped in TracingValueTransformer. A fix seems 
> > to be to make sure that the wrapping transformer also instantiates anew the 
> > transformer it wraps. But according to ProcessorContext semantics this does 
> > not seem necessary, as init() is called each time which guarantees correct 
> > setup of the context on the transformer. Can anyone shed light on this ?
> > 
> > Regards,
> > Jorg Heymans
> > 
> > 
> 
> 

Reply via email to