Showing posts with label Performance. Show all posts
Showing posts with label Performance. Show all posts

Sunday, July 15, 2018

JDev/ADF sample - ADF Postback Payload Size Optimization

  • ADF Postback Payload Size Optimization. Recently I came across property called oracle.adf.view.rich.POSTBACK_PAYLOAD_TYPE. This property helps to optimize postback payload size. It is described in ADF Faces configuration section - A.2.3.16 Postback Payload Size Optimization. ADF partial request is executing HTTP post with values from all fields included. When postback property is set to dirty, it will include into HTTP post only changed values. As result - server will get only changed attributes, potentially this can reduce server time processing and make HTTP request size smaller. This especially can be important for large forms, with many fields.
    Download - GitHub

Sunday, May 27, 2018

JDev/ADF sample - Oracle ADF BC REST - Performance Review and Tuning

  • Oracle ADF BC REST - Performance Review and Tuning. I thought to check how well ADF BC REST scales and how fast it performs. For that reason, I implemented sample ADF BC REST application and executed JMeter stress load test against it. You can access source code for application and JMeter script on my GitHub repository. Application is called Blog Visitor Counter app for a reason - I'm using same app to count blog visitors. This means each time you are accessing blog page - ADF BC REST service is triggered in the background and it logs counter value with timestamp (no personal data).
    Download - GitHub

Friday, November 10, 2017

JDev/ADF sample - ADF Performance Story - This Time Developer Was Wrong

  • ADF Performance Story - This Time Developer Was Wrong. ADF is fast. If ADF application is slow, most likely this is related to development mistakes. I would like to tell you one story, based on my ADF tuning experience. Problem description: ADF application runs fast in DEV, when DB size is small. Same application runs slow in TEST/PROD, when DB size is large. Question - what is slow. Answer - slow means forms are loading slow. Ok, lets go to the story.
    Download - ADFRangeSizeApp.zip

Wednesday, August 30, 2017

JDev/ADF sample - ADF Client Side Validation with JavaScript

    Download - ADFFormattingApp_v2.zip

Saturday, July 22, 2017

JDev/ADF sample - ADF Goes Client Side - UI Performance Boost with JavaScript

  • ADF Goes Client Side - UI Performance Boost with JavaScript. If you would like to boost ADF UI performance, you should look into client side validation and formatting options possible to be done in ADF UI. Today I will describe how you can implement client side converter, to format number value on client side, without making request to the server. Same approach could be used to implement client side validators. You can raise error message and it will be assigned to UI field in the same way, just like any standard ADF error message. While this approach is documented long ago in Oracle ADF developer guide - How To Create Client Side Converter, it is not well known and not often used.
    Download - ADFFormattingApp.zip

Wednesday, December 21, 2016

JDev/ADF sample - Skip LOV Validation for ADF BC Bulk Insert

  • Skip LOV Validation for ADF BC Bulk Insert. This post is about ADF BC LOV. I will describe how you could optimize bulk insert of new rows into VO, when some of the attributes are assigned with LOVs. By default ADF would validate new row attribute value through LOV (LOV Validation and Programmatic Row Insert Performance) for each new row. This will lead to bad performance, especially if you insert a set of new rows programmatically - there will be multiple SQL queries executed to check if LOV attribute value exists.
    Download - LOVValidationBulkInsertApp.zip

Saturday, June 18, 2016

JDev/ADF sample - ADF BC Range Paging and ADF UI Table Pagination Use Case

  • ADF BC Range Paging and ADF UI Table Pagination Use Case. ADF UI table pagination and ADF BC range paging sounds like a perfect combination. But to make it work perfect, a bit of extra effort is required. In the case of search/edit implementation, it can't remember updated record when navigating back to search screen (VO runs with Range Paging and UI table is displayed with pagination). I will explain how to solve it and show how to keep UI table displaying current page and prevent jumping to the first page.
    Download - SearchEditApp.zip

Sunday, April 10, 2016

JDev/ADF sample - Monitoring ADF 12c Client Request Time with Click History

  • Monitoring ADF 12c Client Request Time with Click History. You must be excited to read this post, I will describe one very useful feature, available in ADF 12c. This feature - Click History. You can follow steps described by Duncan Mills, to enable and read click history data in server log. There is one more option available - we can read click history data from ADF request (captured by filter class) and log it in custom way (for later analysis). Click history gives such information as client request start/end time (you can calculate client request duration), component client ID, component type, action event type, etc. All this is useful to understand application performance perceived by the client.
    Download - DashboardApp.zip

Sunday, February 28, 2016

JDev/ADF sample - Oracle JET Live List with WebSocket

    Download - JETWebSocket_v2.zip

Saturday, February 6, 2016

JDev/ADF sample - Oracle JET and WebSocket Integration for Live Data

  • Oracle JET and WebSocket Integration for Live Data. I was researching how to plugin WebSocket into JET. I would like to share my findings and explain how it works. It is amazing, how scalable and quick it is to send JSON message through WebSocket channel and render it in JET. Luckily WebSocket client is implemented in JavaScript, this integrates perfectly with Oracle JET (also based on JavaScript).
    Download - JETWebSocket.zip

Saturday, January 23, 2016

JDev/ADF sample - Database Change Notification Listener Implementation

  • Database Change Notification Listener Implementation. Oracle DB could notify client, when table data changes. Data could be changed by third party process or by different client session. Notification implementation is important, when we want to inform client about changes in the data, without manual re-query. I had a post about ADS (Active Data Service), where notifications were received from DB through change notification listener - Practical Example for ADF Active Data Service. Now I would like to focus on change notification listener, because it can be used in ADF not only with ADS, but also with WebSockets. ADF BC is using change notification to reload VO, when configured for auto refresh - Auto Refresh for ADF BC Cached LOV.
    Download - WebSocketReusableApp.zip

Thursday, September 17, 2015

JDev/ADF sample - Use Case of Auto Re-Execute Functionality in ADF BC

  • Use Case of Auto Re-Execute Functionality in ADF BC. There are use cases, when data in DB is changed by background processes and we would like to display to the user latest data available. Very common implementation for this use case is to re-execute ADF iterator and VO each time when Task Flow or UI screen is accessed. Obviously this works, but performance would suffer - usually there is no need to re-fetch data each time, it must be re-fetched only when changes are detected in DB. ADF BC provides out of the box such functionality - it can detect changes in DB and re-execute VO through Database Change Notification. Make sure to grant CHANGE NOTIFICATION system privilege to the data source user.
    Download - ADFAltaApp_v9.zip

Thursday, July 30, 2015

JDev/ADF sample - Using Shared AM to Cache and Display Table Data

  • Using Shared AM to Cache and Display Table Data. This post is based on Steve Muench sample Nr. 156. In my personal opinion, ADF samples implemented by Steve Muench still remain one of the best source of examples and solutions for various ADF use cases. Sample Nr. 156 describes how to use Shared AM to display cached data in UI table. Typically Shared AM's are used to implement cached LOV's (session or application scope). But it could go beyond LOV, based on the use case we could display cached data in the table or form. I have tested this approach with 12c and it works fine.
    Download - ADFBCSharedSessionLOVApp.zip

Thursday, July 16, 2015

JDev/ADF sample - Auto Refresh for ADF BC Cached LOV

    Download - ADFBCSharedSessionLOVApp.zip

Saturday, July 11, 2015

JDev/ADF sample - ADF BC Session Cached LOV - Understanding Expire Time

  • ADF BC Session Cached LOV - Understanding Expire Time. ADF BC offers LOV caching feature. There are two caching levels - application and session. With application level enabled, it makes LOV rows available for all users. On contrary for session level LOVs, data is cached for single session only. In this post I will focus on session level LOV's and I'm going to explain when cached data expires and is re-fetched.
    Download - ADFBCSharedSessionLOVApp.zip

Thursday, June 11, 2015

JDev/ADF sample - How To Record ADF Client Side Request Performance Time

    Download - ADFAltaApp_v6.zip

Saturday, May 16, 2015

JDev/ADF sample - ADF and Two-Way WebSocket Communication Architecture

    Download - ADFAltaApp_v5.zip

Monday, May 11, 2015

JDev/ADF sample - WebSocket Accelerated Live Data Synchronization for MAF

    Download - AltaMobileApp_v2.zip

Thursday, May 7, 2015

JDev/ADF sample - Oracle MAF and WebSockets Integration - Live Twitter Stream

  • Oracle MAF and WebSockets Integration - Live Twitter Stream. Oracle MAF and WebSockets - I will describe how it works together. WebSockets is a protocol providing full-duplex communication channel over a TCP connection. This channel is interactive (communication is both ways) and we can send messages from the server to the client (MAF application running on the device). There is no need to use push notifications, WebSockets provide JSON support and allow to send complex payload data. In a way it competes with REST, however REST is different with request is being initiated by the client. WebSockets data is received automatically - there is no need to trigger any event by the client.
    Download - AltaMobileApp_v1.zip

Tuesday, April 28, 2015

JDev/ADF sample - WebSocket Integration with ADF for PPR Request Monitoring

  • WebSocket Integration with ADF for PPR Request Monitoring. WebSocket is a protocol enabling communication over TCP connection. Communication is interactive, meaning data can be sent both ways - from the server to the Web client and back. Data is sent through WebSocket channel, without using using regular HTTP. This means we can enable communication between server and Web client without consuming bandwidth from HTTP. WebLogic 12c is shipped with required libraries for WebSocket support, we can use this protocol straight away in ADF 12c. WebSocket supports JSON format, this allows to send and receive JSON formatted data, just the same as REST. In this post I'm going to describe how WebSocket could be used, to report PPR request time measured on the Web client (Monitoring PPR Request Time on ADF UI Client Side), back to the server.
    Download - ADFAltaApp_v4.zip