Use PSM to push your application to ACCS

To push an application on the Application Container Cloud Service (ACCS) from the terminal, you can use the Oracle product 'PaaS Service Manager Command Line Interface' (PSM CLI). PSM CLI is a tool to help you with scripting tasks you want to do against several Oracle Clouds. The steps to push your application to the Oracle Cloud are not that complex, in short:

  1. We create a container in Storage Cloud for our application.
  2. We put the application archive in the Storage Container.
  3. We install the PSM CLI tool and connect it to our Cloud Identity.
  4. We setup the PSM tool with our username/password/etc. 
  5. We create an application container in ACCS using PSM using the archive from the Storage Cloud.
  6. We monitor the job progress using PSM. 

1. Create a container in Storage Cloud for our application.
curl -i -X PUT -u <username>:<password> \
 https://<identitydomain>.storage.oraclecloud.com/v1/Storage-<identitydomain>/<StorageContainer>


2. Put the application archive in the Storage Container.
curl -i -X PUT -u <username>:<password> \
 https://<identitydomain>.storage.oraclecloud.com/v1/Storage-<identitydomain>/<StorageContainer>/<zipname>.zip -T ./dist/<zipname>.zip



3. Install the PSM CLI tool and connect it to our Cloud Identity.
curl -X GET -u <username>:<password> -H X-ID-TENANT-NAME:<identitydomain> https://psm.us.oraclecloud.com/paas/core/api/v1.1/cli/<identitydomain>/client -o psmcli.zip


4. You have to run the command 'psm setup' to set up the connection to your cloud identity, provide username, password and the identity domain.


5. Create an application in ACCS using PSM using the archive from the Storage Cloud, you have to supply the manifest & depoyment description as well as the application name.
psm accs push -n <ApplicationName> -r node -s hourly -m ./manifest.json -d ./deployment.json -u <StorageContainer>/<zipname>.zip



6. Monitor the job progress.
Use the jobid you got back from the previous task to monitor the job progress, it might takes some time before the creation of the application is complete.
psm accs operation-status -j <jobId>




Once the job progress is completed, you should be able to access your application on Application Container Cloud.


Resources:

New Release ADF EMG Selenium Tools v3.0.0

First of all, the github repository is now under the ADF EMG repository and not anymore under Wilfred his personal account. On the release page there is a new release of the Selenium Tools, version 3.0.0.

This new version is based on Java 8 (version 52+) and compatible with JDeveloper (and thus ADF) 12.2.1.x. The selenium tools work the same as they always did and the components are still in the com.redheap.selenium.component package, I did not rebrand it all to an org.adfemg package structure because of backwards compatibility.

Resources:



New Release: ADF EMG Audit Rules

A new release of the ADF EMG Audit Rules has been out, version: 12.2.1.1.20170129.1659

You can find the artefacts on the download page here.

Or just use the Help -> Check for Updates function and find it in the Open Source section.

Resources:


New Release: SonarQube ojaudit plugin

There is a new release of the ojaudit plugin for SonarQube on github.
Version 2.0 of this plugin is now compatible with SonarQube 5.6 and 6.0.

For the release, please go to: https://github.com/adfemg/sonarqube-ojaudit/releases/tag/2.0

The sources can be found on github under adfemg: https://github.com/adfemg/sonarqube-ojaudit


Put Component References in the correct memory scope

Memory scopes itself can be confusing enough, therefor I always advise my fellow developers to use the ADF scopes as much as possible and avoid the JSF scopes if they can.

When using taskflows, a lot of times, we want to store values in a pageFlowScope bean, for example to use during the lifecycle of the taskflow on several pages. Now a common mistakes is to have the UI components bind to the same bean as the values.
Usually this happens, because there is an actionListener that refreshes the component in the pageFlowScope bean, that also sets values in that same bean.

I am always a fan of splitting up beans in smaller logical blocks of code, but in this case it is necessary as well. There is a good blog by the a-team on the best practises for bindings in ADF. Next to that, there is also a Code Guideline on the ADF Architecture Square:

• [ADFcg1-03009] – Store UI components in requestScope and backingBeanScope beans - only store references to UI components in requestScope and backingBeanScope beans. Never store references to UI components in applicationScope, sessionScope, viewScope or pageFlowScope beans.

Not doing this, can cause problems on a HA clustered environment, but the main and best reason in my eyes for this is because the UI component tree might not be released correctly. This has two side effects, mostly a significantly increasing of memory load of your application, but I have also seen some strange behaviour of the UI component, leading to inconsistent state of the component in the browser.

The tricks is to split the beans in separated concerns, one that manages the UI components, holding the component references, as well as the actionlisteners. In the taskflow we inject the pageFlowScope bean holding the values in this backingBeanScoped bean that manages the UI state.
Because we have access to the values through the injected bean, we can use the getters and setters to read or modify the value in the pageFlowScope bean, while making sure our UI component references never exceed the backingBeanScope.

My next blogpost will show an example of how to set up this beans including code examples.

Resources: