Aside; do we need to make the default value for this hint alphabetical? To match prior tomcat behavior letting folks upgrade without configuration change. -- Jody Garnett
On Wed, 8 Sept 2021 at 07:07, Jody Garnett <jody.garn...@gmail.com> wrote: > Thanks Fernando I appreciate you taking the time to revise the proposal. > +1 > > -- > Jody Garnett > > > On Mon, 6 Sept 2021 at 08:09, Fernando Mino < > fernando.m...@geosolutionsgroup.com> wrote: > >> Thanks Jody for your hints. >> >> Indeed, using rendering hints to pass the pre-process behavior to >> GeoTools makes sense, it helps us to avoid adding a new extension point and >> I added this approach to the proposal. Since we need different behavior >> per-workspace we'll make rendering evaluate the current feature, and make >> GeoServer cache the per-feature-namespace result during the current >> rendering task in progress for performance optimization. >> >> The proposals were updated for your revision and feedback: >> >> https://github.com/geotools/geotools/wiki/Rendering-pre-process-Mark-Factories-Hint >> https://github.com/geoserver/geoserver/wiki/GSIP-204 >> >> >> Regards, >> >> Fernando Mino >> >> == >> >> GeoServer Professional Services from the experts! >> >> Visit http://bit.ly/gs-services-us for more information. >> >> == >> >> Fernando Mino >> >> Software Engineer >> >> @fmy2kec >> >> GeoSolutions Group >> phone: +39 0584 962313 >> >> fax: +39 0584 1660272 >> >> https://www.geosolutionsgroup.com/ >> >> http://twitter.com/geosolutions_it >> >> ------------------------------------------------------- >> >> Con riferimento alla normativa sul trattamento dei dati personali (Reg. >> UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si >> precisa che ogni circostanza inerente alla presente email (il suo >> contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è >> riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il >> messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra >> operazione è illecita. Le sarei comunque grato se potesse darmene notizia. >> >> This email is intended only for the person or entity to which it is >> addressed and may contain information that is privileged, confidential or >> otherwise protected from disclosure. We remind that - as provided by >> European Regulation 2016/679 “GDPR” - copying, dissemination or use of this >> e-mail or the information herein by anyone other than the intended >> recipient is prohibited. If you have received this email by mistake, please >> notify us immediately by telephone or e-mail. >> >> >> On Fri, Aug 13, 2021 at 12:30 AM Jody Garnett <jody.garn...@gmail.com> >> wrote: >> >>> Right, sorry I missed that requirement earlier. >>> >>> For the workspace, or GetMap, use case that is a clear need for using a >>> Hint (pass your comparator in as a hint and make a getMarkFactories( hints >>> ) method; it probably already should of had one. >>> >>> Jody >>> >>> On Thu, Aug 12, 2021 at 2:34 PM Fernando Mino < >>> fernando.m...@geosolutionsgroup.com> wrote: >>> >>>> Hi Jody, >>>> >>>> Thanks for the insight on Factory registry as a better alternative. >>>> Indeed the DynamicSymbolFactoryFinder.getMarkFactories() -> >>>> FactoryRegister.setOrdering(..) approach will do the trick for one of the >>>> scenarios we want to support (I will amend the proposal to add this to >>>> support the global configuration use case) but we also have the >>>> per-workspace use case that allows: >>>> - To have several different MarkFactory ordering and filtering on >>>> several workspaces. >>>> - To have several WMS GetMap requests (and rendering threads) in >>>> parallel, rendering Mark shapes with different MarkFactory implementations >>>> order and availability profiles. >>>> >>>> Probably I'm wrong (and please let me know if indeed there is a way to >>>> achieve this with DynamicSymbolFactoryFinder.getMarkFactories() -> >>>> FactoryRegister.setOrdering), but looks like the per-workspace >>>> configuration + multithreading support is not possible with FactoryRegister >>>> due to its not-thread-safe, globally cached and synchronized-static-methods >>>> caller(DynamicSymbolFactoryFinder). >>>> >>>> To use FactoryRegistry we would need to change >>>> DynamicSymbolFactoryFinder to allow us to store and index different >>>> FactoryRegistry instances per workspace, but the problem here is GeoTools >>>> Rendering module is not aware of GeoServer workspaces, and that is why I >>>> proposed the on-the-fly filtering and ordering interceptor extension point, >>>> to allow us to control this filtering from GeoServer code during request >>>> runtime. >>>> >>>> Naturally any better idea to solve this second use case is welcome. >>>> >>>> Regards, >>>> >>>> Fernando Mino >>>> >>>> == >>>> >>>> GeoServer Professional Services from the experts! >>>> >>>> Visit http://bit.ly/gs-services-us for more information. >>>> >>>> == >>>> >>>> Fernando Mino >>>> >>>> Software Engineer >>>> >>>> @fmy2kec >>>> >>>> GeoSolutions Group >>>> phone: +39 0584 962313 >>>> >>>> fax: +39 0584 1660272 >>>> >>>> https://www.geosolutionsgroup.com/ >>>> >>>> http://twitter.com/geosolutions_it >>>> >>>> ------------------------------------------------------- >>>> >>>> Con riferimento alla normativa sul trattamento dei dati personali (Reg. >>>> UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si >>>> precisa che ogni circostanza inerente alla presente email (il suo >>>> contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è >>>> riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il >>>> messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra >>>> operazione è illecita. Le sarei comunque grato se potesse darmene notizia. >>>> >>>> This email is intended only for the person or entity to which it is >>>> addressed and may contain information that is privileged, confidential or >>>> otherwise protected from disclosure. We remind that - as provided by >>>> European Regulation 2016/679 “GDPR” - copying, dissemination or use of this >>>> e-mail or the information herein by anyone other than the intended >>>> recipient is prohibited. If you have received this email by mistake, please >>>> notify us immediately by telephone or e-mail. >>>> >>>> >>>> On Wed, Aug 11, 2021 at 8:11 PM Jody Garnett <jody.garn...@gmail.com> >>>> wrote: >>>> >>>>> Thanks for doing this up as a proposal, it really helps with >>>>> discussion. >>>>> >>>>> I did not think that MarkFactory or ExternalGraphicFactory needed to >>>>> be aware of priority as this is handled by FactoryRegistry; but you are >>>>> correct none of the existing implementations extend AbstractFactory. >>>>> >>>>> Your proposal is on MarkFactory; do you need a similar change for >>>>> ExternalGraphicFactory? >>>>> >>>>> I am not quite sure how MarkFactoriesProcessor is intended to work: >>>>> >>>>> - processFactories( Iterator<MarkFactory> factories ): >>>>> Iterator<MarkFactory> >>>>> Processing an iterator on the fly is good, it amounts to doing >>>>> pair wise ordering, or a comparator, which is already supported by >>>>> FactoryRegistry. >>>>> - priority(): int >>>>> What is the int for? Is it to order between competing instances >>>>> of MarkFactoriesProcessor ? >>>>> >>>>> >>>>> My hesitation is seeing more than one way to do things, especially if >>>>> it is a one-off for a specific factory. So I would like to see what the >>>>> limitation you are running into with the existing setup, and if your >>>>> proposal is an improvement we could do it for all FactoryFinders. We can >>>>> look at other factory finders for examples of helper methods used to >>>>> address common challenges (factory iterator providers for injecting >>>>> instances, establishing pairwise ordering >>>>> <https://github.com/geotools/geotools/blob/06d379a2fdbfdbf94641c16813c37ef02aa7f63c/modules/library/referencing/src/main/java/org/geotools/referencing/ReferencingFactoryFinder.java#L546>, >>>>> ...). I know that establishing pairwise ordering is a pain, and there is >>>>> already a helper method that takes a comparator >>>>> <https://github.com/geotools/geotools/blob/main/modules/library/metadata/src/main/java/org/geotools/util/factory/FactoryRegistry.java#L1265> >>>>> to make this easier. >>>>> >>>>> Checking your proposal you reference propose changing the code here >>>>> <https://github.com/geotools/geotools/blob/2c0f22f0a5a13885aa1d85faa6f715ea87f3c90e/modules/library/render/src/main/java/org/geotools/renderer/style/SLDStyleFactory.java#L1362> >>>>> : >>>>> >>>>> *Iterator<MarkFactory> it = >>>>> DynamicSymbolFactoryFinder.getMarkFactories();* >>>>> >>>>> >>>>> I would ask instead that you change DynamicSymbolFactoryFinder >>>>> directly; that interface is already responsible for SPI discovery, >>>>> >>>>> Here is a proposed alternative approach: >>>>> >>>>> 1. Leave StyleFactory alone (it already has too much logic) and >>>>> trust DynamicSymbolFactoryFinder.getMarkFactories() to respect your >>>>> ordering, especially since you are trying to work around how factory >>>>> discovery is based on classpath order. >>>>> >>>>> 2. Create a method DynamicSymbolFactoryFinder setMarkFactoryOrder( >>>>> Comparator<MarkFactory> comparator ): >>>>> >>>>> public static synchronized >>>>> Iterator<MarkFactory> setMarkFactoryOrder( Comparator<MarkFactory> >>>>> comparator ) { >>>>> getServiceRegistry().setOrdering( MarkFactory.class, >>>>> comparator ); >>>>> } >>>>> >>>>> 4. This calls FactoryRegister.setOrdering( category, comparator ) >>>>> <https://github.com/geotools/geotools/blob/main/modules/library/metadata/src/main/java/org/geotools/util/factory/FactoryRegistry.java#L1265> >>>>> which >>>>> should do the trick. >>>>> >>>>> >>>>> -- >>>>> Jody Garnett >>>>> >>>> -- >>> -- >>> Jody Garnett >>> >>
_______________________________________________ GeoTools-Devel mailing list GeoTools-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel