© 2006 IBM Corporation IBM WebSphere Portlet Factory Architecture.
-
Upload
abel-logan -
Category
Documents
-
view
222 -
download
6
Transcript of © 2006 IBM Corporation IBM WebSphere Portlet Factory Architecture.
© 2003 IBM Corporation
Portlet Factory Components
Developer tool – Portlet Factory Designer
– Plug-in for Eclipse / RAD
Server component – Automation Engine
– Runs in WAR on J2EE app server or Portal Server
– Executed via Servlet or Portlet API
Core Factory technology is used both by design tool and runtime:
– Regeneration engine
– Models, Builders, and Profiling
– In the runtime, these pieces support dynamic profiling
© 2003 IBM Corporation
Builders and Models
Model XML file contains a list of calls to Builders– With all the Builder inputs specified at design time– Builders generate a WebApp structure – this process is called “regeneration”
Regeneration is done:– At design time– On demand at runtime on server
Each builder can:– Introspect the WebApp– Create new elements in WebApp– Modify any existing elements in WebApp– Invoke any other builders in the system
• This makes it easy to make higher and higher level builders
© 2003 IBM Corporation
Builder Architecture
Generated WebApp• Pages and controls
• Variables/Beans
• Schemas and metadata
• Actions & Methods
• Properties
SAP Function Builder
Variable Builder
Imported Page Builder
Regeneration Engine
Model XML File• BuilderCall 1 – SAP Function - builder inputs• BuilderCall 2 – Imported Page - builder inputs• BuilderCall 3 – Data Page - builder inputs• Etc.
Action List
2. During regeneration, for each Builder in the model XML, the appropriate Builder’s regeneration method is invoked. All the the Builder inputs specified by the user in the editor are passed to the Builder.
3. From their regen methods, Builders can introspect, create, and modify any parts of the generated application. They can also invoke any other Builders.
Data Page Builder
Variable
Imported Page
Data Page
SAP Function
Action List Builder
Builder Definition XML Files
•Builder Regen Classes
Portlet Factory Designer
1. Portlet Factory Designer uses BuilderDef files to construct UI for editing Builders in the Model.
© 2003 IBM Corporation
ModelsModels are XML files that contain a list of Builder Calls
<Model id="SimpleModel"> <BuilderCallList> <BuilderCall id="bc1"> <BuilderDefID>com.bowstreet.builders.webapp.ImportedPageBuilder</BuilderDefID> <Inputs> <Input name="Name">inputPage</Input> <Input name="URL">/inputPage.htm</Input> </Inputs> </BuilderCall> <BuilderCall id="bc2"> <BuilderDefID>com.bowstreet.builders.webapp.ActionListBuilder</BuilderDefID> <Inputs> <Input name="Name">main</Input> <Input name="Actions"> <Actions> <Action> <ActionName>inputPage</ActionName> </Action> </Actions> </Input> </Inputs> </BuilderCall> </BuilderCallList></Model>
First Builder Call(Imported Page)
Second Builder Call(Action List)
Sample model XML
© 2003 IBM Corporation
Profiling
Profiles can be used to generate multiple applications from a single source Model
During regeneration, values from the selected profile are used for specified Builder inputs
Because the entire application is created by Builders, and any Builder inputs can be profiled:
– There are no limits on what can be modified by profile
– Presentation, workflow, logic, services, etc., can all be varied by profile as much as you want
Pluggable interfaces are used for all profile determination and profile values, for complete flexibility in how profiling is used
© 2003 IBM Corporation
Profile A WebApp• Pages and controls
• Variables/Beans
• Schemas and metadata
• Actions & Methods
• Properties
SAP Function builder
Variable builder
Imported Page builder
Regeneration Engine
Data Page builder
Action List builder
A
•Builder Regen Classes
Model XML File• BuilderCall 1 – SAP Function - builder inputs• BuilderCall 2 – Imported Page - builder inputs• BuilderCall 3 – Data Page - builder inputs
Builder Architecture - ProfilingProfiles
Action List
Variable
Imported Page
Data Page
SAP Function
Builder Definition XML Files
Inputs for Profile A
© 2003 IBM Corporation
Builder Architecture - Profiling
Profile B WebApp• Pages and controls
• Variables/Beans
• Schemas and metadata
• Actions & Methods
• Properties
SAP Function builder
Variable builder
Imported Page builder
Regeneration Engine
Data Page builder
Action List builder
BProfiles
•Builder Regen Classes
Model XML File• BuilderCall 1 – SAP Function - builder inputs• BuilderCall 2 – Imported Page - builder inputs• BuilderCall 3 – Data Page - builder inputs
Action List
Variable
Imported Page
Data Page
SAP Function
Builder Definition XML Files
Inputs for Profile B
© 2003 IBM Corporation
WebApp Structure
WebApp structure is an abstract representation of a web application
WebApp dispatching and action execution is handled by Portlet Factory runtime library
WebApp Elements:
– Action Lists, Methods, and Classes
– Pages and Data Page elements
– Variables (XML, primitive, or Java objects)– Schemas
– Linked Models
– Events
– Properties
© 2003 IBM Corporation
Portlet Factory WebApp Controller Framework Code generated by Portlet Factory builders works with Portlet Factory
execution controller
– Factory controller runs as Servlet or Portlet
– Generated code uses Portlet Factory runtime library APIs
Key Features of Portlet Factory WebApp Controller– Can run in multiple containers (WebSphere Portal Native, Java Standard Portlet (JSR 168),
J2EE Servlet)
– Rich API set available for application developers
– Caching support
– Events and error handlers
– Linked model and contained model support
– Logging, tracing, and performance monitoring, controllable by properties
– Support for Web Service provider
– Many open extensibility points for further control, including:• Profile selection and profile value handlers• Logging and monitoring• Data Page code generation
© 2003 IBM Corporation
Portlet Factory and Portal Server
Factory WebAppExecutionController
Profile Selection
Main Factory Dispatcher
Application objects
J2EE Components(JDBC, EJB, etc.)
Generated WebApp objects, classes, and JSP’s
WPF-suppliedsupport libraries
Enterprise data sources and web services
= WPF Components
= J2EE App Server
Factory Portlet Adapter= Application or customer code
HTTP Request
= Builder-generated objects
BuilderDef Files
Model XML Files
RegenerationEngine & Cache
BuilderBuilder
BuilderProfile Data
Portal Server
© 2003 IBM Corporation
Portlet Factory and Application Server
Factory WebAppExecutionController
Profile Selection
Main Factory Dispatcher
Application objects
J2EE Components(JDBC, EJB, etc.)
Generated WebApp objects, classes, and JSP’s
WPF-suppliedsupport libraries
Enterprise data sources and web services
= WPF Components
= J2EE App Server
Factory Servlet= Application or customer code
HTTP Request
= Builder-generated objects
BuilderDef Files
Model XML Files
RegenerationEngine & Cache
BuilderBuilder
BuilderProfile Data
Application Server
© 2003 IBM Corporation
Creating Custom BuildersThree components of a Builder:
1. BuilderDef XML file
– The BuilderDef defines all the information about the Builder
– Specify inputs, description, Java class
2. Builder class for regeneration
– The “doBuilderCall” method of this class adds or modifies elements in the application being generated
– Builders can do their work by:
• Calling any other Builders
• Calling methods on the WebApp directly to add/modify objects
3. Optional “Coordinator” class to support custom dynamic builder UI
Builder Skeleton tool creates all these for you
© 2003 IBM Corporation
BuilderDef Example<BuilderDef id="com.bowstreet.examples.DateBuilder">
<ReadableName>Date</ReadableName>
<GenHandlerClassName>com.bowstreet.builders.webapp.foundation.WebAppControlGenHandler</GenHandlerClassName>
<RequiredFactoryVersion>5.0.0</RequiredFactoryVersion>
<Description>Puts current date/time on page</Description>
<Domains><Domain>WebApp</Domain></Domains>
<BuilderData>
<BuilderDataEntry name="BuilderClassName">com.bowstreet.examples.DateBuilder</BuilderDataEntry>
</BuilderData>
<Category>Page and Layout</Category>
<InputDefinitions>`
<InputDefinition name="Name" base="com.bowstreet.core.Base.BuilderName" />
<InputDefinition name="PageLocation" base="com.bowstreet.core.Base.PageLocation" />
<InputDefinition name="Format" base="com.bowstreet.core.Base.StringData" >
<Prompt>Format</Prompt>
<HelpText>Select how date should be formatted</HelpText>
<Editor JavaClass="com.bowstreet.editor.uitools.widgets.BComboBox">
<Argument name="ListData">MM d,M/d/yy,MMMM d yyy,MM/dd/yyyy,HH:mm:ss,HH:mm:ss:z</Argument>
<Argument name="width">200</Argument>
</Editor>
</InputDefinition>
</InputDefinitions>
</BuilderDef>
Builder ID
Name of builder’s regen class
Definitions of all theinputs for this builder
© 2003 IBM Corporation
Builder Class Examplepublic class DateBuilder implements WebAppControlBuilder
{
/**
* This is the method that's called during generation of the WebApp.
* This builder creates a JSP scriptlet that outputs a formatted Date.
*/
public void doBuilderCall(GenContext genContext, WebApp webApp, BuilderCall builderCall,
BuilderInputs builderInputs, PageLocation pageLocation)
{
// Get the format string from builder input
String formatString = builderInputs.getString("Format", "MM/dd/yyyy:HH:mm:ss:z");
// Construct a JSP scriptlet that looks something like:
// <%= new java.text.SimpleDateFormat(“MM/dd/yy”).format(new Date()).toString() %>
String dateExpression = "<%= new java.text.SimpleDateFormat(\"";
dateExpression += formatString;
dateExpression += "\").format(new Date()).toString() %>";
// Call the Text builder to insert the scriptlet at specified location
Text textBuilder = new Text(builderCall, genContext);
textBuilder.setPageLocation(pageLocation);
textBuilder.setText(dateExpression);
textBuilder.invokeBuilder();
}
}
© 2003 IBM Corporation
WebApp
Pages (JSP)
Methods/ActionLists
Linked Models
Variables & LJO’s
Portlet Factory Servlet/PortletRequest for Portlet Factory model/action
Web App execution
Data sourcesand services
Execution: first request for model on server
WebAppRunner
WebAppGenHandler
WebApp Builders
WebApp Builders
WebApp Builders
Determine profile
JSP files
Profile selection handler
Regen & Cache
1.
2.
3.
4.
5.
Instance data creation6.
7.
8.
Methods class generation
9.
© 2003 IBM Corporation
Portlet Factory Servlet/PortletRequest for Portlet Factory model/action
Data sourcesand services
Execution: same session
WebAppRunner
WebAppGenHandler
WebApp Builders
WebApp Builders
WebApp Builders
Determine profile
JSP files
Profile selection handler
Regen & Cache
1.
2.
WebApp
Pages (JSP)
Methods/ActionLists
Linked Models
Variables & LJO’s
3.
Instance data creation
Methods class generation
Web App execution
© 2003 IBM Corporation
Portlet Factory Servlet/PortletRequest for Portlet Factory model/action
Web App execution
Data sourcesand services
Execution: new user, same profile
WebAppRunner
WebAppGenHandler
WebApp Builders
WebApp Builders
WebApp Builders
JSP files
1.
4.
Determine profileProfile selection handler
Find in Cache
2.
3.
5.
WebApp
Pages (JSP)
Methods/ActionLists
Linked Models
Variables & LJO’s
6.
Instance data creation
Methods class generation