© 2006 IBM Corporation IBM WebSphere Portlet Factory Architecture.

18
© 2006 IBM Corporation IBM WebSphere Portlet Factory Architecture

Transcript of © 2006 IBM Corporation IBM WebSphere Portlet Factory Architecture.

© 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