Hi everybody - sorry for the long posting
-:
We are a group of students taking part in a course
focused on web application
development. We've been working on/with jetspeed for some time now, focusing on extending the possibilities in portlet development. We have a working implementation of our ideas. We'd like to hear some feedback from you, regarding: * what do you think about our work? * are there other existing approaches to solve the same problems? * if not, is there a chance to integrate these things? how would the next steps for doing so look like? Basically, the main tasks we adressed were 1. that all portlets on a page share a common namespace, which may lead to unwanted collisions between independent portlets 2. that portlets currently can not hold any state information 3. that there might be portlets which take a long time to compute their results, but the user should get a page immediately 4. two portlets on one page may work on the same set of data - when that happens, inconsistencies can occur when one portlet updates the data from user input while the other has already rendered its output * To solve problem 1., we added a parameter called namespace into the psml file: <entry type="ref" parent="NamespaceTestPortlet"> <parameter name="namespace" value="namespace_1"/> <layout position="4"/> </entry> <entry type="ref" parent="NamespaceTestPortlet"> <parameter name="namespace" value="namespace_2"/> <layout position="5"/> </entry> Our Portlet then uses a function for separating its variables into the different namespaces (withNamespace("name") would return "namespace_1.name" in the first portlet, and "namespace_2.name" in the second portlet). * To solve problems 2 and 3, we introduced a new concept called Worklet. Worklets are independent objects, which are kept in a central worklet repository. The portlets can lookup and insert worklets into the repository. These can be used to preserve state information and to let computations run in the background. Also, different portlets may access the same worklet, and that way share state. We have standardized mechanisms for expiring worklets started by users who are no longer active. On the other hand, we have also encapsulated the usual "isrunning", "isdone", "shouldbeterminated" and so on states used for long running worklets (MarathonWorklets). * For the first three problems, we have not changed the Jetspeed framework. However to adress problem 4, we added a new function, called update, and processing a request works in two phases now: - call update on all Portlets (there is a dummy implementation for backward compatibility) - call getContent on all Portlets That way, we can ensure that the results of the requests are consistent when the actual output is generated. If anyone is interested, we can set up a demo
page on one of the university's servers here.
Cu... Stefan, Stefan, Jens |
- Re: Framework extensions Stefan Reich
- Re: Framework extensions ingo schuster
- Re: Framework extensions Santiago Gala
- RE: Framework extensions Mike Warne
- RE: Framework extensions Mike Warne