By W.ZH, Jan 2009 abstract from Fusion ADF 11g dev guide
Task flow is an important new concept in the ADF 11g, especially the bounded task flow. So this article is to summarize the bounded taskflow for the new beginners.
An ADF bounded task flow is used to encapsulate a reusable portion of an application. A bounded task flow is similar to a Java method in that it:
■ Has a single entry point
■ May accept input parameters
■ May generate return values
■ Has its own collection of activities and control flow rules
■ Has its own memory scope and managed bean lifespan (a page flow scope
An ADF bounded task flow consists of its own set of private control flow rules, activities, and managed beans. A caller requires no internal knowledge about them. Input parameters can be passed into the bounded task flow, and output parameters can be passed out on exit of the bounded task flow. Data controls can be shared between task flows.
Single point of entry
An ADF bounded task flow has a single point of entry, a default activity that executes before all other activities in the task flow.
pageFlow memory scope
You can specify pageFlow as the memory scope for passing data between activities within the ADF bounded task flow. pageFlow scope defines a unique storage area for each instance of an ADF bounded task flow. Its lifespan is the ADF bounded task flow, which is longer than request scope and shorter than session scope.
You can access an ADF bounded task flow by specifying its unique identifier within the XML source file for the bounded task flow and the file name of the XML source file.
You can identify an entire group of activities as a single entity, an ADF bounded task flow, and reuse the bounded task flow
You can also reuse an existing bounded task flow simply by calling it. For example, one task flow can call another bounded task flow using a task flow call activity or a URL.
In addition, you can use task flow templates to capture common behaviors for reuse across different ADF bounded task flows.
Parameters and return values
A caller can pass input parameters to an ADF bounded task flow and accept return values from it. In addition, you can share data controls between bounded task flows.
An ADF bounded task flow can represent a transactional unit of work. You can declaratively specify options on the task flow definition that determine whether, when entering the task flow, the task flow creates a new transaction, joins an existing one or is not part of the existing transaction.
You can specify options on the task flow definition that determine whether or not the ADF bounded task flow can be reentered. For more information.
All memory scopes are supported for managed beans in adfc-config.xml. ADF
bounded task flows allow managed bean scopes of application, session, request,
pageFlow, or none.
In order to allow managed bean customizations in an ADF bounded task flow, ensure
the managed bean metadata resides in the task flow definition for the ADF bounded
task flow. Avoid placing managed beans within the faces-config.xml file.
When an ADF bounded task flow executes, faces-config.xml is first checked for
managed bean definitions, then the task flow definition file for the currently executing
task flow is checked. If no match is found in either location and the managed bean is in
session or application scope, adfc-config.xml and other bootstrap XML source
files are checked.
Lookup precedence is based on memory scope. request scope managed beans take
precedence over session scope managed beans.
Each ADF bounded and unbounded task flow exists inside a page flow scope that is
independent of the memory scope for all other task flows. Page flow scope is not a
single state like session scope. It defines a unique storage area for each instance of an
ADF bounded task flow. Each instance of the called ADF bounded task flow has its
own state. An ADF bounded task flow may therefore be called recursively.
Page flow scope is recommended as a means for passing data values between activities
within a task flow. Application and session scopes are also allowed within task flow
definition files, but are not recommended. Avoid using application and session scope variables because they can
persist in memory beyond the life of the ADF task flow. This may compromise the encapsulation and reusable aspects of a task flow.
■ Avoid using session scope to pass values from one ADF task flow to another. Better use page flow scope variables within the ADF task flow,
and use parameters to pass values between task flows.
■ Use view scope for variables that are needed only within the current view activity and not across view activities.
■ Use request scope when the scope does not need to persist longer than the current request.
■ Use backing bean scope managed beans in your task flow if there is a possibility that your task flow will appear in two region components on the same page and you would like to isolate region instances.
As a rule, use the narrowest scope that will work.
When one task flow calls another task flow (Could be in another remote application.), the calling task flow cannot access the called task
flow’s page flow scope and vice versa.
You can drop its task flow definition from the Application Navigator onto a JSF page:
■ If the bounded task flow contains view activities that are page fragments, it is
added to the JSF page as an ADF region.
(This means all activities of this task flow will happen within this caller’s page.)
■ If the bounded task flow contains view activities that are pages, you have the
option of adding a button or link to the JSF page. When clicked, the button or link
executes the bounded task flow.
(This means when user click this button, browser will guide the user to a new page belong to the page flow.)
You can convert existing activities, JSF page flows, and JSF pages into new ADF
Controller components such as ADF bounded task flows and task flow templates.
You can create a new ADF bounded task flow based on selected pages in a JSF page
flow. Only pages that are part of a flow (that is, those that are linked by JSF navigation
cases) are converted to view activities in the new task flow.
You can convert an existing ADF bounded task flow to an unbounded task flow or
change whether the views it contains are pages or page fragments.
A task flow = activities ( Method Call, Router, Task Flow Call, Task Flow Return,
Save Point Restore, URL View, View-JSP or fragment)
+ control flow cases ( Control Flow Case, Wildcard Control Flow Rule )
Task flow call activity before and after listeners are used to identify the start and end
of an ADF bounded task flow. Specifying a listener in the task flow call activity means
that the listener executes on that specific usage of the called task flow definition.
The task flow return activity identifies the point in the application control flow where
an ADF bounded task flow completes and sends control flow back to the caller. You
can use the task flow return activity only within an ADF bounded task flow.
The ADF bounded task flow can optionally return a value to the calling page when the
modal dialog is dismissed. The return value can be displayed in an input UI
component on the calling page.
The launching command button must specify a return listener. The return listener is a
method binding for a method with one argument, a return event. The return listener
takes the value specified in the returnEvent and sets it on the input component.
The input UI component should accept the return value of the command button by
specifying a backing bean and setting its partialTriggers attribute to the id of the
launching command button (see Using Input Components and Defining Forms in the
Oracle Fusion Middleware Web User Interface Developer’s Guide for Oracle Application
Development Framework for more information). The backing bean containing the return
listener should be registered in adfc-config.xml.
The target bounded task flow in the example contains a single view activity associated
with a page that contains an output text component. The source task flow passes the
value in the input text field as a parameter to the target task flow (for more
information, see Section 15.2, “Passing Parameters to an ADF Bounded Task Flow”).
In addition, the target task flow should specify a return value definition. To return a
value, you must specify:
■ Return value definition on the called bounded task flow. This specifies where the
return value is to be taken from upon exit of the called bounded task flow.
■ Return values on the task flow call activity in the calling task flow. These specify
where the calling task flow can find return values (for more information, see
Section 15.4, “Specifying Return Values”).
By W.ZH Jan 2009
Problem : when you want to start the weblogic server you get error about the LDAP sth like this:
<An error occurred while initializing the Embedded LDAP Server. The exception thrown is java.lang.ClassCastException:………………………………..
Solve: Try to delete the ldap folder from “yourdomain/servername/ldap” and then restart the server.
Critical: An error occurred while initializing the Embedded LDAP Server. The exception thown is th. This may indicate a problem with the data files for the Embedded LDAP Server. If the problem is with the data files and it can not be corrected, backups of previous versions of the data files exist in dir.
By W.ZH Jan 2009
SESCrawlerExport is a component used to link the CS with SES, please refer my article about SES. Let us install it. You can refer to a doc called “Searching Oracle Content Server (Stellent) with Oracle Secure Enterprise Search 10.1.8” to install it. This doc is to help you solve the issues you may have, but not mentioned in that doc .
1. Get the SESCrawlerExport.zip from your CS server, for linux, it should be a folder under in your install package, sth like: …../ContentServer/extras/SESCrawlerExport.zip, download this zip to your PC.
2. Go to content server admin UI, under the menu “administration” in the “admin server”. select your server instance, such as stellenttt
3. Then follow the UI and the doc to install the new component zip file.
4. Then continue to start the config and to finish it.
Default values : Directory where the data feeds should be written to. — datafeeds (No \ or / at the beginning)
5. Make sure the yahoo js files are avaliable, YahooUserInterfaceLibrary is a default component installed in the CS, but it does not copy all the lib into the admin UI web folder, you need manully do it. Go to your CS server, copy the yahoo and event folder from /$CSHOME/ibr/weblayout/resources/yui/ to the CS admin UI web folder: /$CSHOME/contentserver/weblayout/resources/yui/
6. Then you need to run the snap shot to create the feeds and feeds config file for the the items in CS. To run a snap shot, you can input the url or you can go the UCM admin UI, there is a menu under the “administration” called “SES crawler export”.
(for example, http://my.host.com/stellent/idcplg?IdcService=SES_CRAWLER_EXPORT ).
7. After the snap shot is run. you can get the config xml by the URL from the guide. the feed file, feed control and control files and also the cache files fo your items will be all created to a folder under the bin of your CS install home. the folder name is your feedLoc config when you intall the component. Take a look those XMl files and you will understand more about the snapshot.
8. and also try to update any item in your CS, and then check the feed folder again, you will find the feeds XML are auto updated.
How to know what kinds of the service you can run for this SESCrawlerExport and what are their correct name?
Unzip the SESCrawlerExport.zip read readme and sescrawlerexport_service.htm (from a subfolder of resoures). Of course, many action need the authentication, but this two doc give a view that how this component runs.
How to link the Oracle® Secure Enterprise Search (SES 10.1.8.2) with Oracle Content Server (CS 10gR3)
By W.ZH, Jan 2009
This is a looking easy but very very trick task in fact. First, you need to read the Oracle® Secure Enterprise Search Administrator’s Guide, especially the chapter of “Overview of XML Connector Framework” and “Setting Up Oracle Content Server Sources”. Of course, you need to know how to run the Oracle content server and manage it from the admin manage UI.
Yes, there is not any piece of text about the SESCrawlerExport (or RSSCrawlerExport ;-)) from content server doc library. OK, then you need goolge a doc named as “Searching Oracle Content Server (Stellent) with Oracle Secure Enterprise Search 10.1.8”. Read this doc and you will know how to do! How to install the component and link the SES with CS. They do not tell you where to get the SESCrawlerExport.zip, it is in the extras folder of your content server installation package, just search it out from windows or linux box. Copy to your PC and you can install it by this white paper. After run through this doc, 50%, you will fail in the middle.
1. Refer to my article of “How to install and config the SESCrawlerExport in CS“, there are some mismatch of the config info between this doc and the SESCrawlerExport config UI. Such as FeedType, is not in the 10R3 UI to let you config.
2. FeedLoc is a folder name that cannot start with \ or /.
3. Then you can try to run that http://my.host.com/stellent/idcplg?IdcService=SES_CRAWLER_DOWNLOAD_CONFIG&source=<sourceName> to get the configFile.xml file, finally. But , again, please note that you cannot use the RSS_CRAWLER_DOWNLOAD in Oracle® Secure Enterprise Search Administrator’s Guide (Becaue of wrong name). This URL is to verify that SES can get the feed config file from CS. But before you starting doing any SES craw, you need let the CS to create the items’ feeds files and feeds control files for SES. This step call taking a snapshot in CS. So you need to do the snapshot before you can get the feeds and feeds config.
4. To run a snap shot, you can input the url or you can go the UCM admin UI, there is a menu under the “administration” called “SES crawler export”. Is the snapshot runs in the page of http://my.host.com/stellent/idcplg?IdcService=SES_CRAWLER_EXPORT? Of coz not! Remember, this is the default SESCrawlerExport packge comes with CS. It does not run….! So three hours research get this: the reason is because of the YahooUserInterfaceLibrary, its lib files not total be put into the admin web server. Java scripts missed.
What u need to do is:
Go to your CS server, copy the yahoo and event folder from /$CSHOME/ibr/weblayout/resources/yui/ to the CS admin UI web folder: /$CSHOME/contentserver/weblayout/resources/yui/
Then you can get java scripts used by that export page. OK. Restart your CS and then try to run… invoke snpashot,,, it runs!
So by now, if u follow the “Searching Oracle Content Server (Stellent) with Oracle Secure Enterprise Search 10.1.8”. Step by step, you should able to link the SES with CS, then use the SES search UI to search out the resource in your CS. Please note that some files type, such as pic can not be indexed from SES crawler by default, so you might see nothings can be searched out if you only have pics in CS. You can do more research to find out how to do it. Review the scheduler log from SES will help you check the crawler working status.
By W.ZH Jan 2009
SES is search engine by Oracle, different with the google search on web, this search engine let you search in intranet. So this search is for enterprise to use. it support many resoures, such web site, files system, DB and content servers…..
Basic idea is that search Engine will use crawlers to index those sources from time to time(can define), then save the metadata and index info to the SES DB. then client can either use web UI (looks quite like google) or a web service API to do the search resources. Ok, let us take a look.
1. go to URL of http://www.oracle.com/technology/software/products/search/htdocs/winsoft.html to download the SES software,
2. in you PC unzip it to a folder. then just run the setup.exe, follow the steps to install it. (write down the pasword you given)
3. there is a welcome.html page can let access the doc and help.
4. Installer will install the SES engine, a oracle DB and a OC4J web server, and a bit others in your system.
5. in the last step , installer will show two URL, you must save them, one is the admin URL, one is search web UI.
6. good, then you can access the two URL to play with it.
After you have successfully installed Oracle SES, you can start crawling your data. Open a browser, enter the URL provided at the end of the installation for the administration tool (http://host:port/search/admin/index.jsp), and log on. The basic steps here:
1. Define one or more sources for the data you want to search on the Home – Sources page. For example, if your data is in Web pages, then select Web source. A crawl schedule is automatically created along with the source. If Start Crawling
Immediately is selected, then the crawler will start crawling after you click Create.
2. Check the crawler progress and status on the Home – Schedules page.
3. You an go to search page to search this source ( There is a Search link in the upper
right corner of any page)
4. Monitor your search statistics on the Home – General page and the Home –
Ok start roll!
By W.ZH Jan 2009
when I migrate a sample project from 10g or 11g to my version 11g jdev, every thing looks fine and project migrated, but when you try to run it, you will see the JDBC connection error in log (password null), and also you will see that if you change or even open the DB connection and then try to save it, get an error of “unable to initialize credential store.”
Possible solutions from OTN forum:
This looks like a corrupted cwallet.sso file. It happens sometimes that this file, which holds the credentials of the connections and roles.
This file is located in the src/META-INF folder. It can be recreated if you close JDev, delete (or rename) the file and start JDev again. Then you have to add the connection to the applications again. This should recreate the cwallet.sso file.(W.Zh: I found there are two sso and
To my knowledge this should not happen in JD188.8.131.52.1 This cwallet.sso problem was first discovered in TP4 (frequently), where the file got corrupted when you interrupt starting the embedded server.
This has not happened to me since JDev 184.108.40.206.0 I just remember this when I saw you error.
I’ve figured a solution for this bug.
– Creating a new application
– Creating a new connection in the app ressources (now it’ll work : no “Unable to initialize credential store”)
– Copying Model and ViewController project from previous application
Hi. I recently got JDev 220.127.116.11.1 and when I opened my current project, it was migrated from JDev 18.104.22.168.0 and I got the same problem. I solved this checking
Hope this resolution be usefull for somebody.
W.ZH: I slove my problem by method 2 (This time OTM forum can have answers ;-)). Jdev 11g seems need some time to get mature.