[
https://issues.apache.org/jira/browse/SHINDIG-118?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12577112#action_12577112
]
Luciano Resende commented on SHINDIG-118:
-----------------------------------------
Trunk should be fine, we could advise other to checkout specific revision (e.g
prior to this change) in case they want old code. Branch/merge is painful.
> Major refactoring patch to incorporate several other open issues.
> -----------------------------------------------------------------
>
> Key: SHINDIG-118
> URL: https://issues.apache.org/jira/browse/SHINDIG-118
> Project: Shindig
> Issue Type: Improvement
> Reporter: Kevin Brown
> Assignee: Kevin Brown
> Attachments: ridiculously-large-refactoring.patch.txt
>
>
> This patch provides significant architectural changes to the gadgets server.
> Most of these changes were necessary to address new features and to prepare
> the code base for coming improvements and rapid iteration as the gadget spec
> evolves.
> This patch addresses all of the following open issues:
> - https://issues.apache.org/jira/browse/SHINDIG-21
> - https://issues.apache.org/jira/browse/SHINDIG-23
> - https://issues.apache.org/jira/browse/SHINDIG-36
> - https://issues.apache.org/jira/browse/SHINDIG-49
> - https://issues.apache.org/jira/browse/SHINDIG-50
> - https://issues.apache.org/jira/browse/SHINDIG-79
> - https://issues.apache.org/jira/browse/SHINDIG-80
> - https://issues.apache.org/jira/browse/SHINDIG-83
> Since the patch is so huge that I don't expect anyone to be able to really go
> through it thoroughly, I've written up a summary of what's changed.
> If you haven't yet needed to implement your own CrossServletState and various
> interfaces, you can go ahead and just start using this now.
> If you HAVE implemented your own CrossServletState or other interfaces, you
> might have some conflicts. Most of these should be minor. I'd be more than
> happy to help you integrate these changes.
> Since this is such a large architectural change, it really needs some
> thorough feedback before I'm going to even consider committing it. Please
> speak up if you object to anything I've done here.
> Improvements:
> - Full gadget browser based caching (with room for additional server-side
> caching via filters)
> * Gadgets with no __UP or __MODULE hangman substitutions can be cached
> indefinitely as long as the content of the spec doesn't change. User prefs
> now get passed on the content hash.
> * Gadgets that do have __UP or __MODULE hangman substitutions will still be
> cached, but a change in a user pref value necessitates a change in the
> gadget's iframe url.
> * Pref specs are now passed to the client rather than pref values. Values
> are always extracted from the url parameters.
> - Modularization of feature javascript libraries for optimal performance
> * passing &libs behavior is largerly unchanged, except now any libs not
> mentioned will be inlined
> * This allows sites to cache the most commonly used libs as a single file
> entry,
> - Type URL javascript files will now be inlined with other libraries,
> allowing for significant latency improvements.
> - Improvements to JSON RPC interface
> * Now capable of returning extending view and meta data information,
> allowing consumers to get access to virtually all pieces of the gadget spec
> easily.
> - Much improved test coverage
> * Over 50 new test cases (now over 160 total)
> * At least one test for every non-trivial public class in gadgets and
> gadgets.spec; coverage in gadgets.http is still weak, but improved.
> * Virtually all spec rules checked explicitly
> - Easier customization
> * Most implementation details can now be overridden with your own
> implementation
> - Simplification
> * Smaller classes
> * Removed lots of redundant boiler plate code and refactored into utility
> methods.
> - Improved documentation
> * Virtually every non-trivial public function / class is documented.
> - Full support for all canonical spec fields and most extended spec,
> including substitutions.
> - Laying the groundwork for some significant security improvements. Details
> to be announced separately since this is potentially a sensitive topic for
> some existing containers.
> Major architectural changes:
> - GadgetServer
> * Radically simplified. Spec & Message bundle retrieval is now always done
> serially, since before they were just blocking other threads anyway. Only
> features that do real work will be run under the current model.
> - GadgetDataCache / RemoteContentFetcher
> * Re-worked as a unified, task-specific retrieval interfaces. This allows
> integrators to insert their own intermediate layers (such as distributed
> caches) wherever and however they want rather than relying on the check /
> fetch / store behavior baked into the current implementation. This makes it
> much easier to integrate Shindig in sites that use different retrieval
> models, such as storage of gadget specs to a local file system or "push"
> rather than "pull" models for gadget submission.
> - GadgetFeature
> * Since most features are now run serially, functional requirements for this
> class were reduced, and the class has been simplified significantly.
> - GadgetSpec, GadgetView, Gadget, ParsedGadget
> * Converted to a set of small, focused classes that each address specific
> spec elements, such as module prefs or views.
> * Self parsing, self substiting, and consistent interfaces for all element
> objects
> * included in org.apache.shindig.gadgets.spec package
> - ProcessingOptions, GadgetContext
> * Unified into a single abstract context object that is used consistently
> throughout all the code now.
> New classes:
> DataFetcher<T> (replaces GadgetDataCache<T> and works in conjunction with
> RemoteContentFetcher to retrieve spec / message bundle data)
> GadgetSpecFetcher (standard implementation of DataFetcher<GadgetSpec>; can be
> replaced by custom implementations if desired)
> MessageBundleFetcher (standard implementation of DataFetcher<MessageBundle>;
> can be replaced)
> spec.GadgetSpec (represents a <Module>)
> spec.ModulePrefs (represents Module.ModulePrefs)
> spec.UserPref (Module.UserPref)
> spec.View (Module.Content...with some caveats, which is why we don't call it
> Content)
> spec.Feature (Module.ModulePrefs.Require + Module.ModulePrefs.Optional)
> spec.LocaleSpec (Module.ModulePrefs.Locale; named to not conflict with
> java.util.Locale)
> spec.Icon (Module.ModulePrefs.Icon)
> spec.MessageBundle (represents a <messagebundle>)
> spec.SpecParserException (moved from gadgets)
> http.RenderingRequest (handles most of the PageRenderingServlet's tasks, but
> with member variables instead of trying to track a half dozen parameters)
> http.HttpGadgetContext (implements GadgetContext and replaces
> HttpProcessingOptions)
> http.HttpUtil (utility classes for http)
> http.JsonRpcGadgetContext (implements GadgetContext and replaces
> JsonRpcGadget / JsonRpcContext)
> Removed Classes:
> GadgetDataCache (replaced by DataFetcher)
> GadgetSpec (moved / refactored in gadgets.spec package)
> SpecParserException (moved to gadgets.spec)
> GadgetSpecParser (behavior now built into gadgets.spec.* classes)
> GadgetView (functionality rolled into Gadget and / or GadgetSpec)
> MessageBundle (moved to gadgets.spec)
> MessageBundleParser (baked into spec.MessageBundle)
> MessageBundleSubstituter (baked into gadgets.spec classes)
> ModuleSubstituter (it was only one static substitution, and there won't
> likely ever be any new ones)
> ProcessingOptions (rolled into GadgetContext)
> http.BasicHttpContext (appears to have been unused)
> http.HttpProcessingOptions (replaced by HttpGadgetContext)
> http.JsonRpcContext (replaced by JsonRpcGadgetContext)
> http.JsonRpcGadget (replaced by JsonRpcGadgetContext)
> http.JsonRpcProcessingOptions (replaced by JsonRpcGadgetContext)
> Most classes that were neither removed nor added were probably altered
> slightly to take into account the new interfaces, but for the most part
> they're unchanged.
> Since this is such a sweeping change, I need feedback from as many people as
> possible. Please speak up if you have any objections, suggestions, or
> improvements. I'd like to get this committed sometime in the next week.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.