On Wednesday, April 25, 2018 at 7:52:01 PM UTC-7, Tatu Saloranta wrote: > > On Wed, Apr 25, 2018 at 4:16 PM, <[email protected] <javascript:>> > wrote: > So: to make sure `PrettyPrinter` works in thread-safe manner, it needs > to either: > > 1. Be stateless (like `MinimalPrettyPrinter`), immutable. OR > 2. Implement `com.fasterxml.jackson.core.util.Instantiatable`, > implement `createInstance()` method > that creates stateful instance that is not shared across threads > > `DefaultPrettyPrinter` does the latter. If you want to sub-class it, > however, you MUST override `createInstance()` > method; otherwise it will probably not work the way you want (since by > default it can not create instance of sub-class). > > So use of `DefaultPrettyPrinter` should be fine without any extra work. > Assuming that all code paths in Jackson do use `createInstance`. So > one thing that could be useful is to see how > your code is creating generators. With that, it should be possible to > create actual test case with custom `PrettyPrinter` > that verifies that a copy must have been made (keep a flag or > something, set on "blueprint" instance, cleared for > actual instances created). > > -+ Tatu +- >
This is indeed confusing, because I did just use DefaultPrettyPrinter with some settings changes, and not a subclass, but the thread behavior was clearly still wrong. I am assuming something must be bad about my JsonFactory code: super._createGenerator(out, ctxt).setPrettyPrinter(printer); I think maybe I need to switch that code to this instead? return super._createGenerator(out, ctxt).setPrettyPrinter(printer.createInstance()); Matthew. -- You received this message because you are subscribed to the Google Groups "jackson-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
