Category Archives: ADF

ADF JavaScript Partitioning


Most of the performance issue at the client side for the ADF application is related to large number of client side scripting files getting download which increases the download time and relatively degrading the performance of the application. Breaking up the JavaScript into small chunks will result in modularity but will increase the round trip.

To resolve this ADF Faces Framework comes up with a concept of partitioning of the huge JavaScript at the client side based on the components used in the pages. That means only limited number of scripts required for the page is loaded at the client which will increase the performance drastically.

ADF Faces groups the components JavaScript files into two groups namely partitions and features. These two groups are defined separately in two configuration files i.e. adf-js-features.xml and adf-js-partitions.xml.

The default files are location at

C:\oracle\Middleware\oracle_common\modules\oracle.adf.view_11.1.1\ adf-richclient-impl-11.jar\

If the application is loaded without using an explicit partitions then adf will use the configuration settings defined in the above specified files and does the partition.
By default, the partitioning is enabled for performance which can be disabled using the initial parameter in web.xml

<context-param>
<param-name> oracle.adf.view.rich.libraryPartitioning.ENABLED</param-name>
<param-value>false</param-value>
</context-param>

Or

<context-param>
 oracle.adfinternal.view.rich.libraryPartitioning.ENABLED
</param-name>
<param-value>false</param-value>
</context-param>

Or

<context-param>
<param-name>oracle.adf.view.rich.libraryPartitioning.DISABLED</param-name>
<param-value>true</param-value>
</context-param>

Or

<context-param>
<param-name>oracle.adfinternal.view.rich.libraryPartitioning.DISABLED</param-name>
<param-value>true</param-value>
</context-param>

Now we will see how to create these files
•    Create adf-js-partitions.xml in public_html/WEB-INF folder of your application
•    Create adf-js-features.xml in src/META-INF folder of your application
•    The skeleton of these files looks like

adf-js-partitions.xml

<?xml version="1.0" encoding="utf-8"?>
xmlns="http://xmlns.oracle.com/adf/faces/partition">
<partition>
<partition-name>dnd</partition-name>
<feature>AdfDropTarget</feature>
</partition>
</partitions>

<partitions> – root tag to define partitions, all partitions are defined inside this
<partition> – define the partition, any number of partition is allowed
<partition-name> – name of the partion. For example the javascript will be loaded as dnd-11.1.1.4.js
<feature> – hook reference to the particular feature that defines to load the javascript for the component

adf-js-features.xml

<?xml version="1.0" encoding="utf-8"?>
xmlns="http://xmlns.oracle.com/adf/faces/feature">
<feature>
<feature-name>AdfDropTarget</feature-name>
oracle/adf/view/js/dnd/AdfBasicDropTarget.js
<feature-dependency>AdfDragAndDrop</feature-dependency>
</feature>
<feature>
<feature-name>AdfDragAndDrop</feature-name>
oracle/adfinternal/view/js/laf/dhtml/rich/AdfDhtmlDnDContext.js
</feature>
</features>

<features> – root tag for the features, all features are defined inside this
<feature> – define the feature, any number of feature is allowed
<feature-name> – name of the feature that has to be referenced from the partition file
<feature-class> – javascript class for the component
<feature-dependency> – name of the feature which is extended by the javascript class

Sample:

When you don’t have these files in place then the loaded scripts are

When you replicate the default content in your configuration files then the partition will be

Let’s have the partitions which defines only two partition forcomponent. It’s better to have AdfBootStrap and AdfCore as part of the partitions as these are the basic components and JavaScript to render some of the key components. You are free to research on these components to come up with your own core and booting features. You can get the base AdfBootStrap and AdfCore partitions and features configurations from

The partition file with the configuration and hook looks like

And the corresponding features are defined as

And when you run your page in internet explored 8 with Developer Tools on (F12) you can see in the script section that our partition is available as a separate script

Troubleshooting:

If we refer to an invalid feature in the partition then we will get

References:

http://docs.oracle.com/cd/E24382_01/web.1112/e16181/af_arch.htm#CHDDEAJH
http://docs.oracle.com/cd/E12839_01/apirefs.1111/e12046/oracle/adf/view/js/component/rich/input/package-summary.html
http://docs.oracle.com/cd/E25054_01/web.1111/b31973/ap_config.htm#BABCJIDJ
http://adfcodebits.blogspot.com/2012/01/bit-34-using-javascript-partitioning.html

You can download the pdf file of this from here

Referring custom libraries in jdev 10.1.3.4


I recently happened to work on jdeveloper 10.1.3.4 and was given a task of bringing up the server. The project was using the custom libraries which the embedded oc4j was complaining that it could not find saying

Caused by: oracle.oc4j.sql.config.DataSourceConfigException: Unable to create : com.ibm.as400.access.AS400JDBCDriver
 at oracle.oc4j.sql.config.DataSourceConfigUtils.createConnectionFactory(DataSourceConfigUtils.java:283)
 at oracle.oc4j.sql.DataSourceConnectionPoolImpl.<init>(DataSourceConnectionPoolImpl.java:108)
 at oracle.oc4j.sql.spi.ResourceAdapterImpl.createDataSourceConnectionPool(ResourceAdapterImpl.java:99)
 … 13 more

This was very challenging for me because this is the first time I ran an ADF application on Jdeveloper 10g. I searched on the forum with this error and could easily find that the fix is to copy the library to

..\jdevstudio10134\j2ee\home\applib

This is just for information as this could be helpful for newbie who is still working with Jdeveloper 10g

out of Space for Code Cache for Adapters


If you are facing issues like ‘Out of Space for Code Cache for Adapters’ in Jdeveloper 11.1.1.5 then you must do this changes as discussed in this forum post

Set – JVM Options : XX:ReservedCodeCacheSize=128m in setDomainEnv.sh

Display iterated list in horizontal fashion


Recently I had a challenge of showing the list in a horizontal fashion in two columns which I had thought would be easy to implement using af:iterator and af:panelGroupLayout. But when I actually tried it, the horizontal display of the iterated list becomes a challenge.
I tried a couple of options to display close to the requirement but was not actually reaching there.
Finally I got the solution by using

panelFormLayout id="pfl1" rows="1" maxColumns="2">
forEach items="#{List}" var="row" step="2" begin="0">
..
forEach>
<af:forEach items="#{List}" var="row" step="2" begin="1">
..
</af:forEach>
</af:panelFormLayout>

The step and the begin attribute is the key here along with the maxColumns and rows.

Attempt to validate an already invalid RegionSite


was facing this issue and couldn’t find a proper place to look into then I got to know that this issue is surely related to the view..

After serious debugging found that this issue is mainly because of the usage of a taskflow as a region but the taskflow is not having a default activity..

The default activity somehow got removed and setting it back into the place made my day.


Attempt to validate an already invalid RegionSite:
  <_handleException> ADF_FACES-60098:Faces lifecycle receives unhandled exceptions in phase RENDER_RESPONSE 6
 java.lang.IllegalStateException: Attempt to validate an already invalid RegionSite:

New ADF Guru…


chk here

Top 5 user.

https://forums.oracle.com/forums/forum.jspa?forumID=83&start=0

with guru status..

IE8 element not found error



Try It. Love It. Or We'll Take It Back.

We recently stuck with this error in IE8 and in other browser the application is working without any problem.

On searching for a solution we found this link

http://www.winhelponline.com/articles/122/1/Error-Element-not-found-when-attempting-to-add-a-Search-Provider-in-Internet-Explorer-7.html

The fix is to download the attachment – ie7tlbfix.reg and apply the registry fix onto the windows

This issue is discussed here as well

https://forums.oracle.com/forums/thread.jspa?messageID=4376493

 

select tab based on the commandlink


The example of the paneltab selection by clicking the af:commandlink example is here

The same use case can be achieved by passing a request parameter for the goLink like


<af:golink destination="/faces/index?dt=true">

and enable the panelTabbed showdetailitem accordingly..


<af:showdetailitem disclosed="#{param.dt eq 'true'}">

Achieved!!


At last made an entry in Jdeveloper and ADF forum’s Top users list.. 10th now.. will soon climb up..

http://forums.oracle.com/forums/forum.jspa?forumID=83&start=0