Wednesday, June 17, 2015

Virtual Directory Mapping - Displaying images/pdf/documents on the browser from network folder

Virtual Directory Mapping is one of the ways where you can display the content from your folder directory onto a page. I have used this technique in the past to display generated reports from network systems folder onto a web page.

<virtual-directory-mapping> is one of the deployment descriptor element in weblogic.xml. It is commonly used to display images and files in browser from selected network folder.

Below is the link to oracle documentation:
http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/weblogic_xml.html#1039396

I will be using example from Oracle Documentation with minor modification for giving more information on how it can be used.
<virtual-directory-mapping>
     <local-path>//testpc/myimages</local-path>
     <url-pattern>/images/*</url-pattern>
     <url-pattern>*.jpg</url-pattern>
</virtual-directory-mapping>
The above mapping can be used to display all the images with .jpg extension on to a web page for matching url pattern.

Example1:
http://myexample.test.com/myapp/images/1.jpg will load 1.jpg image from //testpc/myimages/images folder.

Example2:
http://myexample.test.com/myapp/generatedReports/report1.pdf can be loaded from //testpc/reports/generatedReports folder.

<virtual-directory-mapping>
     <local-path>//testpc/reports</local-path>
     <url-pattern>/generatedReports/*</url-pattern>
</virtual-directory-mapping>


if you notice the <local-path> in my example is hard-coded. If you have to change the location according to the environment where the artifact is getting is installed, it may become pain.

I have used plan.xml (Deployment Plan) to modify the values in weblogic.xml after deploying the artifact in weblogic server.
http://docs.oracle.com/cd/E11035_01/wls100/deployment/config.html

You have to create plan.xml for each environment and apply to the installed artifact from weblogic console.



Wednesday, June 10, 2015

Refresh an ADF Table manually through Managed Bean

For refreshing an ADF Table from Managed Bean, you need to first execute the Iterator binding for that table.
Below is an example code that you need to add to your managed bean for executing the iterator.

DCBindingContainer dcBindings =                                                                                 (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();
DCIteratorBinding iterBind = null;
if (dcBindings != null) {
    iterBind = (DCIteratorBinding)dcBindings.get("iterator name here");
    Map map = new HashMap();
    map.put("parameter1","parameter value"); //specify parameters for the iterator here
    dcBindings.setParameterValues(map);
}
if (iterBind != null) {
   iterBind.executeQuery();
}

Specify table binding to the Table you want to refresh. Make sure you define it on your managed bean as transient as it is not serializable.

private transient RichTable myTable;

Once you execute the Iterator, Rerender the table using partial target. Below is a sample code.

AdfFacesContext facesContext = AdfFacesContext.getCurrentInstance();
facesContext.addPartialTarget(specify table binding name);

Import statements for the above code:

import oracle.adf.view.rich.context.AdfFacesContext;
import oracle.adf.model.BindingContext;
import oracle.adf.model.binding.DCBindingContainer;
import oracle.adf.model.binding.DCIteratorBinding;
import java.util.HashMap;
import java.util.Map;

You can also do this by invoke action. Below are the details of how you do it through invoke action.

On page binding of the JSF page. Click on + icon in the Executables section and select invokeAction. It will prompt for Id and the Binds value. You can specify any Id but it should be unique and select Method Action you want it to bind.

Create a boolean field in managed bean with setters and getters.
private boolean refreshTable;

Once you added the invoke action to the page binding, You need to select the invoke action and go to  its properties and select Refresh to "ifNeeded" and RefreshCondition to EL expression.
example:
RefreshCondition - {pageFlowScope.myBean.refreshTable}

The table will get refreshed only when refreshTable value is true.

Testing ADF application using ADF EMG Task Flow Tester

ADF EMG Task Flow tester is a web based testing tool for ADF applications. It can be used to test task flows with pages and task flow with fragments. Task flows can be tested independently.

A sophisticated mechanism is also provided to specify task flow parameters.

ADF EMG task Flow Tester can help you in a number of ways:
  • It allows you to unit test your task flows in complete isolation, ruling out dependencies with other task flows when finding and investigating issues.
  • It allows you to quickly test various combinations of task flow input parameter without redeploying the application
  • It keeps your application cleaner (and saves time) as you no longer need to create separate test pages for each and every bounded task flow with page fragments that you used to create before.
  • You can use the tester to simulate a call to your task flow so you can easily test task flow return values and the return navigation outcome.

Configuring ADF Task Flow Tester:

Installing ADF Task Flow Tester:

Open "Check for Updates" by selecting from Help menu in JDeveloper




You can also use install from local file. Download the zip file from below location



Once you download the zip file, open JDeveloper and select "Check for updates" from Help Menu and select the "Install from Local File" checkbox and browse the downloaded zip file.


Restart the JDeveloper for changes to take effect. The ADF EMG Task Flow Tester will be then available in the JDeveloper Library list.


Configuring ADF Web Project (ViewController) to use ADF Task Flow Tester:

Note: Before configuring ADF Task Flow Tester, make sure you are running the ADF application on an Integrated Weblogic Domain.

Open project properties
Right Click web project and select project properties or double click project name to open project properties.


Select Libraries and Classpath from Left Menu. Click "Add Library" and Select ADF EMG Task Flow Tester



After you clicked OK to add the library, the following dialog appears, indicating a run configuration named "Task Flow Tester" has been added to your project, which is also set as default run configuration.



You can now run the tester, by clicking on the run icon in the toolbar and choosing the "Task Flow Tester" run configuration. Likewise, you can run the tester in debug mode by clicking on the debug icon

Using ADF Task Flow Tester:

After launching the task flow tester, the following page will open
             

Clicking on the icon (see below diagram) user will have option to load artifacts from the project and also from the ADF Jar files.
                    
         
You can now select the task flow you want to test, enter task flow input parameter values, set run options as you like and run the test.
           
           




         




Tuesday, June 9, 2015

Testing Oracle ADF applications using Selenium

Selenium is a popular web based automation tool for testing web applications. It provides the capability to record and play. It has Selenium IDE component that can be installed as a plugin in Mozilla Firefox and enables developer to test their web application through the selenium. The selenium IDE is currently available only on Firefox.

In this blog post, I will be giving details about
      How to install and configure selenium IDE
      How to record script using Selenium IDE (ADF application)
      How to convert/export the recorded script to Java JUnit test case.
      How to do continuous testing with recorded scripts

Download the Selenium IDE:

1.      Selenium IDE can be downloaded from seleniumhq website.
a)      Open the below link in Firefox Browser.


b)      click on 2.9.0 release link to install formatters

c)        The link opens a popup window on left side top corner. Click on allow button.


d)      Another popup window “Software Installation” will open click on “Install Now” button.


e)      Verify all the formats are installed:
         i)  Open Selenium IDE (Firefox browser à Tools à Selenium IDE)
        ii)  Click on Options à Format
      


Configuring Selenium IDE:

Open Selenium IDE options (Selenium IDE à Options à Options)

                  1.       Turn off auto recording:
    ·         Uncheck “Start recording immediately on open”
                  2.       Enable experimental features
    ·         Check “Enable experimental features”

Recording Selenium Script:


         1.        Open Selenium IDE and click on Record button.
         2.       Selenium IDE will automatically capture all the user interactions and record it as a script                     (consists of commands, targets, and value)
         3.       After completing the recording click on stop button.
         4.       Save the recording

       Note:
             ·         Selenium scripts can be recorded only from Firefox Browser. 
             ·         Only for ADF applications:
   The script captures extra command “Selected Window” for every user interaction. Need to      remove all the “select window” commands from script before running.

Running the recording script

      1.       For Oracle ADF applications, it is recommended to run the scripts using lowest execution time.
      








        2.       Click on “Play current test case” button  for running selected script. To run all the scripts                click on “Play entire test suite” button 

Running Selenium Test Cases using Maven

  1. Create new project with maven structure in existing web application.
Example:
                my-portal
my-portal-view  (ADF Application – ViewController Project)
src
main
java
resources
test
java
resources
my-portal-test  (New Test Project for Testing ADF application using Selenium)
src
main
java
resources
test
java
resources

  1. Create a new POM file for the test project with below dependencies. Do not add the new pom as a module dependency in the parent pom of the project. This pom file must run only after the server restart or after code got deployed to the application server.
                                <dependency>
                                                <groupId>org.seleniumhq.selenium</groupId>
                                                <artifactId>selenium-server</artifactId>
                                                <version>2.46.0</version>
                                                <scope>provided</scope>
                                </dependency>
                                <dependency>
                                                <groupId>org.seleniumhq.selenium</groupId>
                                                <artifactId>selenium-java</artifactId>
                                                <version>2.46.0</version>
</dependency>
                                <dependency>
                                                <groupId>junit</groupId>
                                                <artifactId>junit</artifactId>
                                                <version>4.12</version>
                                                <scope>test</scope>
                                </dependency>                              


Note:
·         In Jenkins, a new job must be created to run the above created pom file and it must be added as a downstream job for the server restart job. This way, after restart this job will be triggered to run all the test cases.

Creating JUnit Test case

       1.   Select script in IDE and click on FileàExport Test case as à Java /JUnit4/WebDriver



        2.   Select the Folder location (project name à src/main/test/”package-name” )  and click on Save           button
      
       Note: There is a bug when exporting selenium script as a java junit test case, it doesn’t change                       the package name. You need to manually open each class you export and change the                             package name.

        3.   Exported Java junit case also adds an extra “/” to the baseURL. Remove it from the end of the             path.
      
      Example:
               @Before
               public void setUp() throws Exception {
                  driver = new FirefoxDriver();
                  baseUrl = "http://localhost:7001/";
                  driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
              }
                
   If you notice, the baseURL is hardcoded with the environment where you have recorded the script.      You need to specify a property so that the value can be passed as environment property for running    the same script in different environments. Below sections explains on how it can be done.

Configuring environment variable for running tests in different environments:

        1.       In JDeveloper, Right click on JUnit class and click on run button.
        2.       A new firefox browser window will open and runs the script
Note: In order for the tests to run on Build machine, make below changes to the code
a)      Change the base URL to get the value from system property
Example:
  @Before
  public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl =  System.getProperty("env.url");
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }

b)      Running the build from local using maven, use below command:
mvn clean test –Denv.url=http://localhost:7001 (Developer machine)
mvn clean test –Denv.url=https://dev.mycompany.com (Dev Environment)

Build Machine (Jenkins Job)
mvn clean test –Denv.url=https://dev.mycompany.com

c)       For running Junit tests from JDevloper, please specify env property. Steps to specify property value in JDeveloper:
Right click on the project à Project Properties
Select Run/Debug/Profile à select Default à click on Edit button
enter “–Denv.url=http://localhsot:7001” under Java_Options.











Building ADF application using maven


In latest versions of JDeveloper, maven is supported out of the box. But, in older versions of JDeveloper (11g R1), it is not yet supported.

The details I will be giving in this post will be useful for the people who doesn't want to use Maven that comes out of the box with JDeveloper or to the people who are still using JDeveloper 11g R1 version.

I was architect for several ADF projects and wanted the ADF applications to build around continuous integration principles. We used Archiva as internal repository to store ADF artifacts.

Firstly, you need to identify the ADF libraries for the ADF application you are building.

How to identify the ADF libraries you need for the project to build?
When you create ADF project from JDeveloper, it adds all the ADF related libraries to the project. Some of them you don't need at all to run your application. The best way to identify is by removing them from the libraries and compiling the ADF application.

It looks simple, but depending on what components or java code you use it might end up tedious work. Once you identify the libraries, view each library and note down the location and upload it to the Archiva.

Screenshot of cleaned up libraries:



Uploading the artifacts to Archiva?
For every dependency library in Maven you need to have <artifactId> <groupId> and <version> number.
Oracle releases the libraries from release to release without making any changes to their versions, very few times they change the version. So, we came up with our own way to customize them in our archiva. Below is the standard we came up with.

groupId- oracle.adf.modules - This value remains same across all versions.
artifactId - jsf-ri - changes to the library
version - 11.1.1.6 - changes with the version you are using.

Below is the list of libraries I have identified in the ADF application we were using in our company. The ADF application we build doesn't have MDS customization's and Graphs.

<properties>
        <oracle.adf.version>11.1.2.4</oracle.adf.version>
        <oracle.adf.group.id>oracle.adf.modules</oracle.adf.group.id>
</properties>

<!-- Start Custom ADF Libraries -->
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-controller</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-controller-api</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-controller-rt-common</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-controller-security</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-dt-at-rt</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-faces-databinding-rt</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-pageflow-dtrt</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-pageflow-fwk</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-pageflow-impl</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-pageflow-rc</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-richclient-api</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-richclient-impl</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-share-base</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-share-ca</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-share-security</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-share-support</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adfdt_common</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adflibrary</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adflogginghandler</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adfm</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adfsharembean</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adftransactionsdt</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>cache</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>commons-el</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>db-ca</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>db-ca</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>glassfish.el</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>glassfish.jstl</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>identitystore</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>javax.activation</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>javax.jsp</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>javax.mail</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>javax.servlet</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>jdev-cm</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>jsf-api</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>jsp-el-api</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>ojmisc</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>oracle-el</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>trinidad-api</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>trinidad-impl</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>xmlparserv2</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- End ADF Libraries -->

Depending on the functionality you are using, you might have to add more artifacts to the above list. But, customizing them into above standards help you in migrating the libraries from one version to another.

I am attaching a sample pom file for reference:

<project xmlns="http://maven.apache.com/POM/4.0.0" xmlns:xsi="http://www.w3.com/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.com/POM/4.0.0 http://maven.apache.com/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.mycompany.my-portal</groupId>
        <artifactId>my-portal-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <artifactId>my-portal-view</artifactId>
    <name>my-portal-view</name>
    <packaging>war</packaging>
    <description>This package contains my portal view files</description>
    <inceptionYear>2015</inceptionYear>
    <properties>
        <oracle.adf.version>11.1.2.4</oracle.adf.version>
        <oracle.adf.group.id>oracle.adf.modules</oracle.adf.group.id>
    </properties>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <configuration>
                    <webXml>src\main\webapp\WEB-INF\web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <!-- Start Third party libraries -->
        <dependency>
            <type>jar</type>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>weblogic.portal</groupId>
            <artifactId>weblogic</artifactId>
            <version>10.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>weblogic.security</groupId>
            <artifactId>identity</artifactId>
            <version>10.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>com.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.4</version>
            <scope>provided</scope>
        </dependency>
        <!-- Start Custom ADF Libraries -->
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-controller</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-controller-api</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-controller-rt-common</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-controller-security</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-dt-at-rt</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-faces-databinding-rt</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-pageflow-dtrt</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-pageflow-fwk</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-pageflow-impl</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-pageflow-rc</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-richclient-api</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-richclient-impl</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-share-base</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-share-ca</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-share-security</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adf-share-support</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adfdt_common</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adflibrary</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adflogginghandler</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adfm</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adfsharembean</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>adftransactionsdt</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>cache</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>commons-el</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>db-ca</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>db-ca</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>glassfish.el</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>glassfish.jstl</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>identitystore</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>javax.activation</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>javax.jsp</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>javax.mail</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>javax.servlet</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>jdev-cm</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>jsf-api</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>jsp-el-api</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>ojmisc</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>oracle-el</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>trinidad-api</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>trinidad-impl</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>${oracle.adf.group.id}</groupId>
            <artifactId>xmlparserv2</artifactId>
            <version>${oracle.adf.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- End ADF Libraries -->
    </dependencies>
</project>