[
https://issues.apache.org/jira/browse/TAP5-795?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12736056#action_12736056
]
Massimo Lusetti commented on TAP5-795:
--------------------------------------
Well eager loading is somehow an edge case which has been (ab)used for starting
service at runtime bootstrap, then has been introduced the RegistryStartup
service.
I don't mean that an ordering on eager loading is bad, I just say it not seems
the right solution for your use case and, as you said, it's more like an
extension to IoC.
Cheers
> Tapestry IoC should provide an OrderedConfiguration for EagerLoaded services
> ----------------------------------------------------------------------------
>
> Key: TAP5-795
> URL: https://issues.apache.org/jira/browse/TAP5-795
> Project: Tapestry 5
> Issue Type: Improvement
> Components: tapestry-ioc
> Affects Versions: 5.1
> Environment: Any
> Reporter: Peter Stavrinides
> Priority: Critical
>
> It is mentioned in the documentation that the order in which services are
> created is not defined when using eagerLoad(). This is somewhat counter
> productive in a sense as you can get into serious trouble If ordering of
> eagerloaded services is important (and very often it is, as the very concept
> implies ordering and availability before other services), yet ordering is
> ignored for eagerloaded services?
> So by using :
> binder.bind(SomeService.class).eagerLoad(); you can produce a NPE or
> potentially work just fine and this IoC quirk goes undetected, which is a
> ticking time bomb. Perhaps this method should be renamed to
> eagerLoadUnordered() or better yet removed entirely, and another way of
> ordering these should be introduced.
> An illustrative example is given below with two eagerloaded services
> (SiteInitialise sets up database connections and the connection pool,
> ImageService loads a cache of image data, so implicitly ImageService requires
> SiteInitialise to be loaded first).
> //Example: The shell of the eagerloaded ImageService service
> public class ImageService {
> /** Cache to hold thumbnail images */
> private static ConcurrentHashMap<Integer, Thumbnail>
> imageCache_ = new ConcurrentHashMap<Integer, Thumbnail>();
>
> public void preloadImageCache() {
> DbConnection connection = null;
> try {
> //This can potentially turn into a Null Pointer
> Exception as the startup order is arbitrary
> connection =
> DatabaseConnection.getReadConnection();
> //database query
> } catch (Exception e) {
> //handle exception
> }
> }
> public static ImageService build() {
> return new ImageService();
> }
> public ImageService() {
> preloadImageCache();
> }
> }
> //Workaround: adding a dependency on the other eagerloaded service will solve
> it, but this is not a practical solution if there are many of these services
> public class ImageService {
> /** Cache to hold thumbnail images */
> private static ConcurrentHashMap<Integer, Thumbnail>
> imageCache_ = new ConcurrentHashMap<Integer, Thumbnail>();
>
> public void preloadImageCache() {
> DbConnection connection = null;
> try {
> connection =
> DatabaseConnection.getReadConnection();
> //database query
> } catch (Exception e) {
> //handle exception
> }
> }
> public static ImageService build(SiteInitialise
> siteInitialise) {
> return new ImageService(siteInitialise);
> }
> public ImageService(SiteInitialise siteInitialise) {
> if(siteInitialise.isConnectionOk())
> preloadImageCache();
> }
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.