More introspection inside InternalRegistryImpl could be useful for handling some awkward edge cases, such as preventing recursion when a decorator service is accidentally employed to decorate itself.
On Sun, Dec 2, 2012 at 7:53 AM, Alessio Gambi <[email protected]>wrote: > Hi, > > no rush. > > At the moment, I am going deeper inside the IoC modules to see where the > data I would like to extract are. > > My solution at the moment is to patch RegistryImpl to persist some > interesting data about services, modules, configurations and their > inter-relation. > It's a brute force approach that does not taste good, but at the moment is > the simplest to implement (or at least it seams to be so). > > Moreover, the tapestry Lazy approach to service instantiation, which is > perfect for performant production app and short startup application time, > for my case study is tricky, as I need to forcefully instantiate all the > services > in order to get their "actual" configurations. > > Right now I miss only two pieces in my puzzle: How can I get the actual > configured objects for a given service (identified by serviceID) ? > Registry has getOrder/getUnord/getMapp Configuration methods but I > totally miss the way I can invoke them in a clean way. > I prefer to avoid String matching on ServiceDef3 objects to link > Map-Mapped, List-Ordered, Collection-Unordered. > It is also not clear to me how can I provide the second parameter > to the get*Configuration method (the "GenericType"). > > > As a case study, I am working on "Symbols". I am trying to answer > questions like the following ones: > > - What is the complete list of symbols available in the application ? > > - What values do they have ? What type is contributed ? > > - Where are they contributed ? > > - Where are they overwritten ? > > - Where a given symbol is used/injected ? > > - What SymbolProviders are contributed ? In what order (using ordering > constraints) ? Is there a conflict somewhere (like two services contributed > with before:* ?) > > - ... > > -- Alessio > > > On Nov 30, 2012, at 12:02 AM, Howard Lewis Ship wrote: > > > I hope to respond to your post soon; quite busy with multiple clients > right > > now. > > > > I know in the past I have made specific decisions to simplify manual > > coding, even though it made IDE support more complex. > > > > In addition, I think some features I've introduced made certain edge > cases > > of Tapestry more "concise", but not necessarily better (*) and probably > > harder to support in an IDE. > > > > (*) What I've found is that some of the very concise features made it > much > > more complicated to explain what Tapestry is doing at any point in time. > > Everything becomes a checklist. > > > > > > On Thu, Nov 22, 2012 at 7:37 AM, Alessio Gambi <[email protected]> > wrote: > > > >> Gentlemen, > >> > >> my name is Alessio Gambi, I have a PhD in Informatics from the > University > >> of Lugano (Switzerland), a M.Sc. from the Politecnico of Milan (Italy) > and > >> another M.Sc. form the University of Illinois at Chicago (USA). > >> > >> As you guessed, I am also a huge fan of T5; therefore, I would like to > >> contribute to the community. > >> > >> Differently from many of you, I do not want (at least for the moment :) > ) > >> became an active developer *of* the framework itself. > >> And I plan to contribute by developing, or better, formalizing high > level > >> knowledge about development of T5 applications, and also by developing > tools > >> that support the programmers and the other actors involved in this (fun) > >> process of making T5-based applications. > >> > >> I go straight to the point so I do not take much of your time. > >> > >> Goals > >> > >> Goal n1 > >> Define a methodology that is tailored on and specific to Tapestry5. The > >> framework offers a great deal of functionalities and features that must > be > >> used at the right time, for precise purposes, and in the intended way. > >> In other words, develop according to the T5 way of doing things, while > >> avoiding as much as possible "The Hard Way"® > >> > >> Goal n2 > >> Design and implement as set of tools that support such a specific > >> development process. Here, I am talking about means to improve the > quality > >> of the design, not to ease the implementation by automate activities, > and > >> not > >> to reduce the time to produce code. > >> > >> > >> Some motivating examples just to stimulate further discussion: > >> > >> Example: You are just arrived in a company where they have plenty > >> of T5 modules (aka Library and Application Modules) and you are asked to > >> find or define the best datatype (hint: this is a keyword) to use in a > >> brand new requirement. > >> How do you proceed? Note: You do not have access > >> to the code of such modules. > >> > >> > >> Example: You are given an Library Module that was developed by a > >> colleague that left the company, the module is 1K LOC and makes a lot > >> (hint: A LOT) of contributions, service definitions, customizations. > >> Your boss asks you to explain how that module > fits > >> in the main application. How do proceed ? Note: some services override > T5 > >> default behavior, there are ClassTransformationWorkers-here and there. > >> > >> > >> How can you help ? > >> > >> Do not blow up the dev-list with flames-like mail... contact me in > >> private, unless you feel it is better to share your thoughts/experiences > >> with the dev community. > >> > >> > >> For Goal 1 I need stories (as sort as possible, but not shorter !) that > >> tells me your experiences as developers of T5 applications, and as > >> developers of the framework itself. > >> Dev apps with T5: > >> - How do you usually organize your work ? Agile vs Waterfall ? > >> - How do you plan pages/components/services? > >> - Do you evolve your code? I start by putting everything in a > >> page, then I realize there's a change for a component, then I evolve the > >> component by adding some AJAX, ... > >> - Do you adopt some specific pattern ? I like to define a > >> Service*Source that will create instances of * because then I can > >> contribute to that ** > >> - How do you approach the integration with other frameworks ? > >> - Common Use Case and Scenarios? > >> - ... > >> > >> Dev T5 itself: > >> - I am interesting to understand your > >> motivations/assumptions/requirements about the different features of the > >> framework that you developed somehow. > >> - Can you list if there are new roles that developers cover with > >> T5 ? Tester -> Page tester, component tester, service tester, service > >> integration tester ? Component development ? Datatype designer ? > Validator > >> designer ? > >> - ... > >> > >> Do not be shy, I will not just you, and I do not assume that everything > >> MUST be in favor of Tapestry... I would like also to see also > weaknesses > >> of T5 and its limitations. > >> > >> For Goal 2 I need requirements and helps with the code. > >> Requirements: > >> - What king of activity of you process do you like to be > supported > >> ? Any suggestions on how you plan to do that ? > >> > >> Help with the code: > >> - The first step is to extract the info from the framework > itself. > >> How do you do that without patching or touching core, internals and ioc > ? > >> Simple example: How can I recover the configuration of a service > >> after everything is initialized ? > >> > >> - The second step is in organize the information. Are these info > >> about validation? Are that related to TypeCoercion ? > BeanEditing/Displaying > >> ? > >> BTW: what are the main area of knowledge that you can identify in > >> Tapestry ? Services, Data, DataTransformation, Pages, Navigation, > >> Components? > >> > >> > >> > >> If I can get enough things I plan to start writing down and disseminate. > >> If you like to contribute we can setup a mini-task-force. If you like to > >> review and comments on the various > >> outcome that is fine anyway. > >> > >> > >> > >> Cheers > >> > >> -- Alessio > >> > >> > >> > > > > > > -- > > Howard M. Lewis Ship > > > > Creator of Apache Tapestry > > > > The source for Tapestry training, mentoring and support. Contact me to > > learn how I can get you up and productive in Tapestry fast! > > > > (971) 678-5210 > > http://howardlewisship.com > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > -- Howard M. Lewis Ship Creator of Apache Tapestry The source for Tapestry training, mentoring and support. Contact me to learn how I can get you up and productive in Tapestry fast! (971) 678-5210 http://howardlewisship.com
