The central class for providing custom components (LSPS tasks and functions).
ComponentService is accessed quite frequently so its retrieval and/or instantiation should be fast.
In case it's implemented as @Stateless bean, ensure the application container pools are properly configured.
As long as the custom components are static (which is usual the case),
making the ComponentServiceLocal implementation a @Singleton bean (with ConcurrentHashMap caches) yields the best performance.
In such case, the getCache() method could/should expose the underlying registry to consumers)
Answer an optional component service cache.
If the component service has static nature (the components are registered only once)
and the registered components are thread safe (which is usually true for EJB proxies),
the service can answer the (non-EJB) caching implementation of the ComponentService.
This way the LSPS infrastructure can look up the components directly,
without the unnecessary overhead of the ComponentServiceLocal EJB invocation on each look up.
non-modifiable caching component service or null if such cache is not supported