jsf custom grid tags
Download
Skip this Video
Download Presentation
JSF Custom Grid Tags

Loading in 2 Seconds...

play fullscreen
1 / 50

JSF Custom Grid Tags - PowerPoint PPT Presentation


  • 78 Views
  • Uploaded on

JSF Custom Grid Tags. Mehmet Nacar Tallahassee, FL March, 2006. Optional JSF Background Material. Standard JSF Validators. required attribute checks if the input text is empty. <h:inputText id="username“ required="true“ value="#{resource.username}“ />

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' JSF Custom Grid Tags' - judah-potts


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
jsf custom grid tags

JSF Custom Grid Tags

Mehmet Nacar

Tallahassee, FL

March, 2006

standard jsf validators
Standard JSF Validators
  • required attribute checks if the input text is empty.

<h:inputText id="username“ required="true“ value="#{resource.username}“ />

<h:message id="junk1" for="username“ showDetail="true"

errorStyle="color:red"/>

There are also validator methods to check format of the value

Also there values to look up the property validity.

How do you write custom validators? How do you use them in the JSF page/bean code? Where do they go in the code base? What validators does VLab need? Where do they go? This is more of a discussion topic. --Marlon

standard navigation
Standard Navigation
  • Navigation among JSF pages provided by faces-config.xml
  • Navigation rules defined like below.

<navigation-rule>

<from-view-id>/upload/gFTP.jsp</from-view-id>

<navigation-case>

<from-outcome>proxy</from-outcome>

<to-view-id>/upload/gftpProxy.jsp</to-view-id>

</navigation-case>

<navigation-case>

<from-outcome>success</from-outcome>

<to-view-id>/upload/fileList.jsp</to-view-id>

</navigation-case>

<navigation-case>

<from-outcome>link</from-outcome>

<to-view-id>/upload/junk.jsp</to-view-id>

</navigation-case>

</navigation-rule>

managed beans
Managed Beans
  • All beans has own specific property values.
  • There are also common properties among the beans.
  • submitAction() method is common for all beans.
    • Returns “success” value that controls navigation.
  • error and errorStatus properties are also common for all beans.
    • <h:outputText value="#{taskgraph.error}" rendered="#{taskgraph.errorStatus}" style="color:red" />
  • Error properties catch exceptions and display message summary to the user.
beans in faces config xml
Beans in faces-config.xml
  • managed-bean>
  • <description>Context Bean is for context tags</description>
  • <managed-bean-name>context</managed-bean-name>
  • <managed-bean-class>ogce.gsf.context.ContextBean</managed-bean-class>
  • <managed-bean-scope>session</managed-bean-scope>
  • </managed-bean>
basic idea for grid service clients
Basic Idea for Grid Service Clients
  • We write JSF tag libraries wrap calls to the Java CoG kit.
  • This simplifies association of page events (button clicks, link clicks) with composite Grid actions.
    • And increase reuse of code.
  • For documentation of the COG Abstraction API and some programming examples, see http://wiki.cogkit.org/index.php/Java_CoG_Kit_Abstraction_Guide
custom tags
Custom Tags
  • task
    • Creates and submits grid tasks
  • taskgraph
    • Creates and submits grid taskgraphs as Directed Acyclic Graph (DAG)
    • That is, describes composite, multistep actions
  • taskAdd
    • Sub component for taskgraph. Adds dependency
  • proxy
    • Gets and manage proxies from Myproxy server
  • storeContext
    • Stores job information to ws-context server.
  • upload
    • Provides upload capability to JSF (Browser to portal server)
jsf grid beans
JSF Grid Beans
  • Package ogce.gsf has the following:
    • ResourceBean: loads properties from resources.properties
    • ProxyManagerBean: stores the Grid credential.
    • TaskBean: simple job submission
    • TaskGraphBean: creates composite task submissions
    • FactoryBean: manages multiple TaskBean and TaskGraphBean instances for a single user
    • GridFTPManagerBean: file operations and file browsing
    • ContextBean: client to the WS-Context server, provides context browsing.
  • Described in more detail below.
managed beans again
Managed Beans (Again)
  • All beans has own specific property values.
  • There are also common properties among the beans.
  • submitAction() method is common for all beans.
    • Returns “success” value that controls navigation.
  • error and errorStatus properties are also common for all beans.
    • <h:outputText value="#{taskgraph.error}" rendered="#{taskgraph.errorStatus}" style="color:red" />
  • Error properties catch exceptions and display message summary to the user.
resource bean
Resource Bean
  • Resource bean works with resource bundles.
    • resource.properties should be on the classpath.
    • For webapps its path is WEB-INF/classes
    • For jars its path is the parent directory.
    • The following are example properties with associated get/set methods.

hostname = gf1.ucs.indiana.edu

provider = GT2

taskname = test

executable = PWSCF/pwscf

#arguments = 120

stdin = /tmp/pwscf_input

stdout = /tmp/out

source = gridftp://gf1.ucs.indiana.edu/home/manacar/altix

target = gridftp://gf1.ucs.indiana.edu/home/manacar/out

contextURI = /tmp/vlab/manacar

username = manacar

portNumber = 7512

proxy manager bean
Proxy Manager Bean
  • Gets proxy from myproxy server.
  • Stores the proxy into session, since proxy is sharable among portlets.
  • Its parameters taken by resource bean.
  • Action method of proxy bean is authenticate.

<h:commandButton id="submit“ action="#{ProxyManagerBean.authenticate}“ value="GetProxy"/>

task bean
Task Bean
  • Major task unit of Java COG abstractions.
  • Corresponds to GRAM job submissions.
  • Gets input parameters, prepares task and submit it.
  • Works with Factory Bean.
    • Factory Bean manages multiple instances for a single user.
    • Each Factory Bean associated with Cookie/Session, so Tomcat and JSF manage Factory Beans for different users
      • So we only have to worry about multiple beans owned by same user.
      • Tomcat distinguishes different users for us.
  • All submitted tasks stored in the factory.
  • TaskBean implements StatusListener to report status changes
  • <o:task id="task1" method="#{task.create}" type="FileTransferInput" />
  • <o:task id="task2" method="#{task.create}" type="JobSubmit" />
  • <o:task id="task3" method="#{task.create}" type="FileTransferOutput" />
task submission form
Task Submission Form

Corresponding JSF snippets

<o:taskGraph id="myGraph" method="#{taskgraph.test}" >

<o:task id="task1" method="task.create" type="FileTransfer" />

<o:task id="task2" method="task.create" type="JobSubmit" />

<o:task id="task3" method="task.create" type="FileTransfer" />

<o:taskAdd name="task1" method="taskgraph.add" />

<o:taskAdd name="task2" depends="task1" method="taskgraph.add" />

<o:taskAdd name="task3" depends="task2" method="taskgraph.add" />

</o:taskGraph>

<h:panelGrid columns="3" >

<h:outputText value="Hostname (*) "/>

<h:inputText value="#{task.hostname}"/>

</h:panelGrid>

<h:panelGrid columns="3" >

<h:outputText value="Provider (*) "/>

<h:inputText value="#{task.provider}"/>

</h:panelGrid>

<h:panelGrid columns="2">

<h:commandButton id="submit" value="Submit" action="#{taskgraph.submitAction}"/>

<h:commandButton value="Clear" type="Reset"/>

</h:panelGrid>

task monitoring with jsf data model
Task Monitoring with JSF Data Model

<h:dataTable value="#{jobData.jobs}" var="job">

<h:column>

<f:facet name="header">

<h:outputText style="font-weight: bold" value="Job ID" />

</f:facet>

<h:outputText value="#{job.jobId}"/>

</h:column>

<h:column>

<f:facet name="header">

<h:outputText style="font-weight: bold" value="Submit Date" />

</f:facet>

<h:outputText value="#{job.submitDate}"/>

</h:column>

<h:column>

<f:facet name="header">

<h:outputText style="font-weight: bold" value="Finish Date" />

</f:facet>

<h:outputText value="#{job.finishDate}"/>

</h:column>

<h:column>

<f:facet name="header">

<h:outputText style="font-weight: bold" value="Status" />

</f:facet>

<h:outputText value="#{job.status}"/>

</h:column>

</h:dataTable>

Corresponding Java class.

public class Job {

private String jobId;

private String status;

private String submitDate;

private String finishDate;

}

factory bean
Factory Bean
  • Controls bean creations and listeners.
    • Clones beans and stores bean instances in the session.
  • Factory Bean contain three hashmaps to store task features.
    • Beans (TaskBean)
    • Graphs (TaskGraph)
    • Listeners (for both)
  • Java COG listeners propagates status changes to listeners and beans.
    • status, finishDate properties changes accordingly.
  • Monitoring actions are called by Factory Bean
  • Factory Bean initiates stores data to JobData object that shown by JSF page
  • JobData has List to in data table.
  • Action methods
    • monitorAction() is for task bean
    • monitorGraph() is for taskgraph bean
taskgraph bean
TaskGraph Bean
  • TaskGraph Bean manages a workflow of tasks.
  • It creates composite tasks using DAG.
  • User has to define tasks and their dependency.
    • Otherwise tasks runs independently.
  • TaskGraph can compose sub taskgraphs.
  • TaskGraph Bean has two internal Java COG object.
    • Taskgraph object: defines taskgraph spec and paramaters.
    • Handler object: works with StatusListener to get status changes.
  • TaskGraphBean has to implement StatusListener to report status changes
gridftpmanagerbean
GridFTPManagerBean
  • Provides file browsing, download, upload and file removing.
  • Establish a gridftp connection

<h:commandButton id="submit" value="Submit" action="#{gftp.getConnection}"/>

  • Browse files with doList()

doList() loads filelist. It is an internal method called by getConnection()

  • Delete files with delete()

<h:commandButton value="Delete" action="#{gftp.delete}" actionListener="#{gftp.filename}">

<f:param id="finame" name="fname" value="#{file}"/>

</h:commandButton>

  • Download files with download()

<h:commandLink value="" action="#{gftp.download}" actionListener="#{gftp.filename}">

<h:graphicImage value="#{file.piclink}"/>

<f:param id="fname" name="fname" value="#{file}"/>

</h:commandLink>

contextbean
ContextBean
  • ContextBean provides navigation on ws-context server.
  • Session keys of context server are like below.
    • vlab://tmp/manacar/task1/timestamp
    • This is just a URI structured name convention
  • vlab://tmp/ is the root for all
  • Each user’s personal context follows.
  • Similar to linux directory structure. (Base directory like below.)
    • vlab://tmp/manacar/blah/blah2/blah3
  • More detail later.
grid faces tags
Grid Faces Tags
  • All of the beans shown previously can be used in conventional standalone JSF way.
  • They are also associated with custom JSF tag extensions we developed:
    • <o:task/>, <o:taskGraph/>, <o:taskAdd/> and <o:contextStore/>
  • Purpose is to define composite actions that are associated with submit button clicks, etc.
    • That is, commandButton and commandLink
  • Taskgraph is parent tag and the others are child tags.

<f:verbatim>

<o:taskGraph id="myGraph" method="#{taskgraph.test}" binding="#{taskgraph.taskgr}" >

<o:task id="task1" method="#{task.create}" type="FileTransferInput" />

<o:task id="task2" method="#{task.create}" type="JobSubmit" />

<o:task id="task3" method="#{task.create}" type="FileTransferOutput" />

<o:taskAdd id="taskadd1" name="task1" depends="task2" method="taskgraph.add" />

<o:taskAdd id="taskadd1" name="task2" depends="task3" method="taskgraph.add" />

<o:contextStore id="context" type="store" method="none" />

</o:taskGraph>

</f:verbatim>

importing gsf taglibs
Importing GSF Taglibs

<tag>

<name>taskGraph</name>

<tag-class>ogce.gsf.tags.TaskGraphTag</tag-class>

<body-content>JSP</body-content>

<attribute>

<name>id</name>

</attribute>

<attribute>

<name>method</name>

</attribute>

<attribute>

<name>binding</name>

</attribute>

</tag>

  • Taglibs are defined in tld files.
  • Corresponding components defined in faces-config.xml

<component>

<description>Taskgraph component</description>

<component-type>taskGraph</component-type>

<component-class>ogce.gsf.tags.UITaskGraph</component-class>

</component>

ws context
WS-Context
  • A context is a nugget of information with an associated name.
    • You can read/write contexts.
    • You can store arbitrary byte arrays--but for VLAB we typically store strings
  • WS-Context server provides database access wrapped with web services.
  • We’ve developed smart clients to store contexts like unix file system.
    • Normally contexts are flat, associated only with UUID, not structured
    • We added the structure to use file system tree-like structure.
  • Basically there two concepts in WS-Context.
    • Session keys (URI) are (hopefully) human comprehensible names.
      • vlab://tmp/manacar/12506-041932/tr/
    • Context keys (uuid) define the unique system name of the context.
      • uuid:0A556090-7464-11DA-ABF3-E30096A3A69A-1135418397994
  • Session keys to store branches (directories)
  • Context keys to store contexts (files)
  • A session can contain one or more session and contexts
ws context ii
WS-Context II
  • Storing information to context store is done by several beans.
    • TaskGraph Bean creates a unique context URI for each job submission
    • TaskListener stores changing values on runtime like status, finishDate
    • Hpsearch stores output file location on remote site (needed for vizualization).
  • VLab monitoring pages involves context reading and browsing.
  • Browsing page takes user home directory on context service and allow users to navigate on their workspace.

<user-attribute>        <description>User Name</description>        <name>user.name</name>

</user-attribute>

  • Only storing to context is tagged by taglibs.
    • <o:contextStore id="context" type="store" method="none" />
  • Context browsing is done by associated JSF pages and data tables
    • ContextListBean
    • Context Attributes
reading context in jsf
Reading Context in JSF

<h:outputText value="Context Name "/>

<h:outputText value="#{context.contextName}" />

<h:outputText value="Context Value "/>

<h:outputText value="#{context.contextValue}" />

<h:outputText value="Context Status "/>

<h:outputText value="#{context.contextStatus}" />

<h:commandButton value="New Job Submit with Context Values“ action="#{context.contextAction}"/>

browsing on context
Browsing on context
  • Context browsing provided by navigate(String parent) method.
  • Portlet gets user.name property and builds up user’s context
    • vlab://tmp is root context for vlab portal
    • User manacar will have context
      • vlab://tmp/manacar
  • When reach to leaf node, It can access to contexts in it.
  • For example, vlab://tmp/manacar/task1/timestamp
    • There are certain context in this location listed below.
    • Resource bean properties (with taskname)
    • Status context
    • SubmitDate context
    • FinishDate context
    • Input file location
    • Output file location
    • FSU location (transferring output file for viz. process)
    • Etc.
using the context navigation
Using the Context Navigation

<h:dataTable value="#{contextlist.contexts}" var="ctx">

<h:column>

<f:facet name="header">

<h:outputText style="font-weight: bold" value="Icon" />

</f:facet>

<h:commandLink value="" action="#{context.navigate}" actionListener="#{context.contextName}">

<h:graphicImage value="#{ctx.piclink}"/>

<f:param id="cname" name="cname" value="#{ctx}"/>

</h:commandLink>

</h:column>

<h:column>

<f:facet name="header">

<h:outputText style="font-weight: bold" value="Context Name" />

</f:facet>

<h:outputText value="#{ctx.name}"/>

</h:column>

</h:dataTable>

reading from context
Reading from context
  • Methods from ContextBean
  • navigate()
    • Main method of context navigation
    • Prepares contextList to being display by navigation JSF page.
  • getSessionDirectoryInfo(String parent)
  • getContextFromLeafSession(Vector session_info)
  • wipeOut(String user_session_key)
  • wipeOut(“%") deletes all sessions.
storing to context
Storing to context
  • Context store tag wraps Context Bean storeContext method as taglib.
  • ContextBean wraps context API with JSF pages.
  • ContextPublishClient is base API for ws-context smart client.
  • 3 methods to save a context
    • SessionInfo[] find_session(String user_identifier, String qualifier)
    • URI find_session_key(String identifier, String qualifier)
    • ContextDetail saveContext(String user_identifier, URI session_key, byte [] context_byte_array)
properties properties
properties.properties

########################################################################

#

# FTHPIS - Property file used to set parameters for UDDI-Extended

# Information Service

# Web Site: http://grids.ucs.indiana.edu/~maktas/fthpis/index.html

#

#########################################################################

#########################################################################

#

# Userid/passwords should not generally be stored in clear text

#

#########################################################################

cgl.fthpis.jdbcUser = uddi_user

cgl.fthpis.jdbcPassword = changeIt

#########################################################################

#

# The WSDL address for the inquiry and publishing API of the target

# UDDI-Extended Information Service

#

#########################################################################

#UDDI_Extended_WSDL = http://localhost:8080/uddi_wscontext/services/UDDI_Extended

#UDDI_WSContext_WSDL = http://localhost:8080/uddi_wscontext/services/UDDI_WSContext

UDDI_Extended_WSDL = http://gf8.ucs.indiana.edu:4647/uddi_wscontext/services/UDDI_Extended

UDDI_WSContext_WSDL = http://gf8.ucs.indiana.edu:4647/uddi_wscontext/services/UDDI_WSContext

################################################################################

# NB Parameters. Please replace following NB parameters to point to your

# Narada Broker

################################################################################

hostname = gf8.ucs.indiana.edu

portnum = 4648

These are properties in the client’s uuid_wscontext_beta.jar.

You will need to change if you ever need to contact another server.

To Do: needs to be taken out and added to project.properties of the portal maven build.

ws context jars
Ws-Context jars
  • NaradaBrokering.jar
  • activation.jar
  • axis-ant.jar
  • axis.jar
  • commons-discovery.jar
  • commons-logging.jar
  • jaxrpc.jar
  • jsp-api.jar
  • jug-uuid.jar
  • junit.jar
  • mail.jar
  • saaj.jar
  • servlet-api.jar
  • uddi_wscontext_beta.jar
  • wscontext.0_wtimestamp.jar
  • wsdl4j.jar

Jar conflicts can lead to problems. Axis.jar is a known offender.

Context monitoring

Hpsearch

gridsphere 2 x
GridSphere 2.x
  • Deployment on Gridsphere requires some additional configuration.
  • Make sure CATALINA_HOME set.
  • GridSphere normally runs in Tomcat 5.0.2x. If you want to run in Tomcat 5.5.x, you should
    • a) install Tomcat 5.5\'s java 1.4.2 compatibility package as instructed above, and
    • b) copy ant.jar and ant-launcher.jar from Tomcat 5.0.2x\'s common/lib directory into 5.5.x\'s common/lib.
  • Also edit the tomcat-users.xml file in the jakarta-tomcat-5.5.x/conf directory to add the following role and user:
    • <?xml version=\'1.0\' encoding=\'utf-8\'?>

<tomcat-users>

<role rolename="manager"/>

<user username="gridsphere" password="gridsphere" roles="manager"/>

</tomcat-users>

jsf sample portlet
JSF Sample Portlet
  • Sample portlet is the Sun provided guessNumber portlet example available from the JSF source code distribution. It is packaged to work inside the GridSphere container.
  • Instructions:
    • Set gridsphere environment variable
      • gridsphere.home=/home/manacar/gridsphere-2.0.2
      • gridsphere.build=/home/manacar/gridsphere-2.0.2/build
    • ‘ant install’ makes it work on Gridsphere
  • To work with Tomcat 5.5.x, all commons jar files from Tomcat 5.0.2x should be added to common/lib. Otherwise JSFportlets doesn’t work.
  • Move the following jar files from $CATALINA_HOME/server/lib to $CATALINA_HOME/common/lib: (It is for only Tomcat 5.0.2x)
    • commons-beanutils.jar
    • commons-digester.jar
  • After deploying, start up GridSphere and create a group from Admin->Groups with the "guessNumber" portlet in it. Then add yourself to the group. if you don’t use predefined groups and tabs. (optional group.xml, layout.xml setup files)
gridsphere portlets
Gridsphere portlets
  • GridSphere portlet apps use the following files:
    • web.xml (required) - specifies GS portlet loader servlet
    • gridsphere-portlet.xml (required) - specifies GS portlet loader portlet
    • portlet.xml (required) - a portlet descriptor
    • (optional) group.xml - a group descriptor
    • (optional) layout.xml - a layout associated with the group
myproxymanager portlet
MyproxyManager Portlet
  • The following steps for developing a JSF portlet:
  • Place source code into /src directory
    • ~/jsfMyproxyManager/src/proxymanager
  • Place JSP files into /webapp directory
    • ~/jsfMyproxyManager/webapp
  • Place config files into /webapp/WEB-INF
    • ~/jsfMyproxyManager/webapp/WEB-INF
  • Place required jars into /lib/ext
    • ~/jsfMyproxyManager/lib
      • jsf-api.jar
      • jsf-portlet.jar
      • proxymanager-api-3-3.0.jar
      • jsf-impl.jar
      • jstl.jar
      • standard.jar
web xml
web.xml

web.xml

<web-app>

<display-name>JSF Proxy portlets</display-name>

<description>

Provides JSF Proxy portlets

</description>

<context-param>

<param-name>javax.faces.STATE_SAVING_METHOD</param-name>

<param-value>client</param-value>

</context-param>

<context-param>

<param-name>javax.faces.application.CONFIG_FILES</param-name>

<param-value>/WEB-INF/faces-config.xml</param-value>

</context-param>

<context-param>

<param-name>com.sun.faces.portlet.INIT_VIEW</param-name>

<param-value>/ProxyManager.jsp</param-value>

</context-param>

<context-param>

<param-name>com.sun.faces.validateXml</param-name>

<param-value>true</param-value>

</context-param>

web xml ii
web.xml II

<!-- Faces Servlet -->

<servlet>

<servlet-name>Faces Servlet</servlet-name>

<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

<load-on-startup> 1 </load-on-startup>

</servlet>

<servlet>

<servlet-name>PortletServlet</servlet-name>

<servlet-class>org.gridlab.gridsphere.provider.portlet.jsr.PortletServle

t</servlet-class>

</servlet>

<!-- Faces Servlet Mapping -->

<servlet-mapping>

<servlet-name>Faces Servlet</servlet-name>

<url-pattern>/myproxy/*</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>PortletServlet</servlet-name>

<url-pattern>/jsr/jsfMyproxyManager</url-pattern>

</servlet-mapping>

</web-app>

faces config xml
faces-config.xml

<faces-config>

<application>

<locale-config>

<default-locale>en</default-locale>

<supported-locale>de</supported-locale>

<supported-locale>fr</supported-locale>

<supported-locale>es</supported-locale>

</locale-config>

</application>

<navigation-rule>

<description>

The decision rule used by the NavigationHandler to

determine which view must be displayed after the

current view, greeting.jsp is processed.

</description>

<from-view-id>/ProxyManager.jsp</from-view-id>

<navigation-case>

<description>

Indicates to the NavigationHandler that the response.jsp

view must be displayed if the Action referenced by a

UICommand component on the greeting.jsp view returns

the outcome "success".

</description>

<from-outcome>success</from-outcome>

<to-view-id>/GetProxy.jsp</to-view-id>

</navigation-case>

</navigation-rule>

slide41
<navigation-rule>

<description>

The decision rules used by the NavigationHandler to

determine which view must be displayed after the

current view, response.jsp is processed.

</description>

<from-view-id>/GetProxy.jsp</from-view-id>

<navigation-case>

<description>

Indicates to the NavigationHandler that the greeting.jsp

view must be displayed if the Action referenced by a

UICommand component on the response.jsp view returns

the outcome "success".

</description>

<from-outcome>success</from-outcome>

<to-view-id>/ViewAndDispose.jsp</to-view-id>

</navigation-case>

</navigation-rule>

<navigation-rule>

<description>

The decision rules used by the NavigationHandler to

determine which view must be displayed after the

current view, response.jsp is processed.

</description>

<from-view-id>/ViewAndDispose.jsp</from-view-id>

<navigation-case>

<description>

Indicates to the NavigationHandler that the greeting.jsp

view must be displayed if the Action referenced by a

UICommand component on the response.jsp view returns

the outcome "success".

</description>

<from-outcome>success</from-outcome>

<to-view-id>/ProxyManager.jsp</to-view-id>

</navigation-case>

</navigation-rule>

<managed-bean>

<description>

The "backing file" bean that backs up the guessNumber webapp

</description>

<managed-bean-name>MyProxyBean</managed-bean-name>

<managed-bean-class>proxymanager.MyProxyBean</managed-bean-class>

<managed-bean-scope>session</managed-bean-scope>

</managed-bean>

</faces-config>

portlet xml
portlet.xml

<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" vers

ion="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati

on="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/x

ml/ns/portlet/portlet-app_1_0.xsd">

<portlet>

<description>JSF MyProxy Portlet</description>

<portlet-name>myproxyManager</portlet-name>

<display-name>JSF MyProxy Portlet</display-name>

<portlet-class>com.sun.faces.portlet.FacesPortlet</portlet-class>

<supports>

<mime-type>text/html</mime-type>

<portlet-mode>VIEW</portlet-mode>

</supports>

<portlet-info>

<title>MyProxy Portlet</title>

<short-title>myproxy</short-title>

</portlet-info>

</portlet>

</portlet-app>

group xml
group.xml

<?xml version="1.0" encoding="UTF-8"?>

<portlet-group>

<group-name>jsfMyproxyManager</group-name>

<group-description>JSF MyProxy portlets</group-description>

<group-visibility>PUBLIC</group-visibility>

<portlet-role-info>

<portlet-class>jsfMyproxyManager#myproxyManager</portlet-class>

<required-role>USER</required-role>

</portlet-role-info>

</portlet-group>

layout xml
layout.xml

<portlet-tabbed-pane>

<portlet-tab label="JSF MyProxy Manager">

<title lang="en">JSF MyProxy Manager</title>

<portlet-tabbed-pane style="sub-menu">

<portlet-tab label="myproxyManager">

<title lang="en">MyProxy Portlet</title>

<table-layout>

<row-layout>

<column-layout>

<portlet-frame label="proxyPF">

<portlet-class>jsfMyproxyManager#myproxyManager </portlet-class>

</portlet-frame>

</column-layout>

</row-layout>

</table-layout>

</portlet-tab>

</portlet-tabbed-pane>

</portlet-tab>

</portlet-tabbed-pane>

gridsphere portlet xml
gridsphere-portlet.xml

<portlet-app-collection>

<portlet-app-def>

<portlet-app id="org.gridlab.gridsphere.provider.portlet.jsr.PortletServlet">

<portlet-name>JSR Portlet Servlet</portlet-name>

<servlet-name>PortletServlet</servlet-name>

</portlet-app>

<concrete-portlet-app id="org.gridlab.gridsphere.provider.portlet.jsr.PortletSer

vlet.1">

<concrete-portlet>

<portlet-name>Portlet Servlet</portlet-name>

<default-locale>en</default-locale>

<language locale="en">

<title>Portlet Servlet</title>

<title-short>Portlet Servlet</title-short>

<description>A JSR Portlet Loader</description>

<keywords>portlet servlet</keywords>

</language>

</concrete-portlet>

</concrete-portlet-app>

</portlet-app-def>

</portlet-app-collection>

managed beans1
Managed Beans
  • The most important features of a bean is are the properties that it exposes. A property is any attribute of the bean that has
    • a name
    • a type (type should be a Java Object)
    • methods for getting and/or setting the property value
myproxybean
MyProxyBean

public class MyProxyBean {

private int SECS_PER_MIN = 60;

private int SECS_PER_HOUR = 3600;

private GSSCredential proxyCred=null;

String userName = null;

String hostName = null;

String passPhrase = null;

String proxyView = null;

Integer lifetime = null;

Integer portNumber = null;

public MyProxyBean() {

}

….

….

….

}

getproxy jsp
GetProxy.jsp

<HTML>

<HEAD> <title>Proxy Fetching Example</title> </HEAD>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<body bgcolor="white">

<f:view>

<h:form id="entryForm" >

<h3>Fill out the form to get your proxy credential</h3>

<h:panelGrid columns="3">

<h:outputLabel for="userSt">

<h:outputText value="User Name:"/>

</h:outputLabel>

<h:inputText id="userSt"

required="true"

value="#{MyProxyBean.userName}">

</h:inputText>

<h:message id="junk1" for="userSt"

showDetail="true"

errorStyle="color:red"/>

<h:outputLabel for="submit">

<h:outputText value="Get Credential:"/>

</h:outputLabel>

<h:commandButton id="submit"

action="#{MyProxyBean.authenticate}"

value="GetProxy"/>

</h:panelGrid>

</h:form>

</f:view>

</body>

</HTML>

standard jsf navigation rules
Standard JSF navigation rules
  • Make sure MyProxyBean.authenticate returns a value “success” to match with navigation

<navigation-rule>

<description>

The decision rule used by the NavigationHandler to

determine which view must be displayed after the

current view, greeting.jsp is processed.

</description>

<from-view-id>/ProxyManager.jsp</from-view-id>

<navigation-case>

<description>

Indicates to the NavigationHandler that the response.jsp

view must be displayed if the Action referenced by a

UICommand component on the greeting.jsp view returns

the outcome "success".

</description>

<from-outcome>success</from-outcome>

<to-view-id>/GetProxy.jsp</to-view-id>

</navigation-case>

</navigation-rule>

getting session
Getting Session
  • PortletSession gets session in the bean
  • It’s allowed to store session to ProxyStore.
  • FacesContext facesContext = FacesContext.getCurrentInstance();
  • PortletSession portletSession = (PortletSession) facesContext.getExternalContext().getSession(false);
  • try {
  • ProxyManager.addProxy(portletSession, proxyCred);
  • GSSCredential proxy = (GSSCredential) ProxyManager.getDefaultProxy(portletSession);
  • } catch(Exception ex) { }
ad