Robotic Process Automation – Message Call after reading data from Excel / CSV (UIPath)


Wanted to share steps to make an Mesage  call using UIPath with Unattended Access.While we are going deep into this, expectation is that the attendee /reader has base premise and idea of RPA. If not, will try to write a new blog on that.

Also i understand that not every one buys an enterprise licence ūüôā Though people should (UIPath guys will kill me for proposing this) , we ll try to do everything using their community edition.


excel File:

Step 1:Install and open UIPath-Studio

Step 2: Search for Read-CSV , drag and drop it to Main.xaml

Step 3: Search for CSV file in your machine , select it (it should be in double quotes) and create a variable to map the CSV output to a Datastructure.

Step 4: Click on + Icon and add a “for-each-row” loop

Step 5: add the datatable in the box

Step 6: Add an message box


Step 7: Run and see output

We are done… Have given the most simplest use case as demo, please let me know ny complex problem which has to be solved.

Adding a query form for this.


Oracle BPM Installation on Ubuntu : Error he “OpenJDK JVM is not supported on this platform.”

There can be a case when you try to install Oracle BPM @ Ubuntu box and get this error message ” OpenJDK JVM is not supported on this platform.”

Launcher log file is /tmp/OraInstall2018-05-27_07-09-48PM/launcher2018-05-27_07-09-48PM.log.
Extracting the installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Done
The OpenJDK JVM is not supported on this platform.
The log is located here: /tmp/OraInstall2018-05-27_0


Step 1: run java -version

openjdk version “1.8.0_131”
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2ubuntu1.16.04.3-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

Step 2 :

sudo add-apt-repository ppa:webupd8team/java

Step 3 :
sudo apt-get update

step 4:
sudo apt-get install oracle-java8-installer

Step 5:
sudo update-alternatives --config java


Backward Migration of BPM Project 12c

If you are getting this error,”Unable to load the application file.Workspace .jws already migrated to newer version (”

This means that the version of your Application is ahead of your Jdev.

To open same app in same Jdev, open Jws file

”¬† ¬† ¬† <value n=”oracle.adf.share.dt.migration.wsm.PolicyAttachmentMigratorHelper” v=”″/>”

and comment it

<!– ¬† ¬† ¬†<value n=”oracle.adf.share.dt.migration.wsm.PolicyAttachmentMigratorHelper” v=”″/>–>

similarly find
<value n=”oracle.ide.model.Project” v=”;″/>
change it to
<!– ¬† ¬† ¬†<value n=”oracle.ide.model.Project” v=”;″/>–>


Mybatis ( Basics , Comparison, Features)



What is Mybatis

  • Mybatis is a Persistence Framework which acts as a mediator between Application layer and Database
  • In Java applications, the persistence layer involves populating Java objects with data loaded from the database using SQL queries, and persisting the data in Java objects into the database using SQL.
  • Most of the Traditional ORMs (Ex. Hibernate) map Java Objects to Database tables, Mybatis maps Java Methods to SQL Statements.
  • MyBatis couples objects with stored procedures or SQL statements using a XML descriptor

Benefits of Mybatis

  • Light Weight‚ĶOnly one JAR or Maven ‚Äď Dependency Entry needed in Project
  • ResultMap:Most Powerfull feature of Mybatis
  • Dynamic SQL
o If
o choose (when, otherwise)
o trim (where, set)

for Each

  • Transaction Manager
  • JDBC : tranditional JDBC Transactions
  • Managed : J2EE Container Managed

Mybatis over JDBC

  • Eliminates Lot of Common JDBC code
  • ¬∑Eliminates Responsibility of transaction management from hands of Programmers
  • Using ResultMap, any complex ResultSet can be converted to Object ¬∑
  • Supports Dynamic SQL which would have been done through String concatenation or If/Else in JDBC ¬∑
  • Uses PREPARED statement as Default ¬∑Local Cache supports cache management at transaction level ¬∑Transaction Management using¬†Mybatis-Spring

 Mybatis over Hibernate


Point MyBatis Hibernate
Size Lightweight Comparatively larger in Size
Learning Curve Low Learning Curve Higher Learning Curve
Programming Uses SQL, so is DB Programming Uses HQL, Independent of DB, Easy to
Return Type Maps ResultSet from JDBC API to POJO Maps Java Objects to Database Tables
USPs More Fetch Centric More Persistence Centric
Table Vs POJO Mapping No orm impedance mismatch, until required , Result map doesn’t need to be refreshed Tightly coupled, Ex. any column in table needs to updated in POJO immediately


MyBatis has inbuilt support for caching SELECT query results within the scope of SqlSession level ResultSets. In addition to this, MyBatis also provides integration support for various third-partycache libraries, such as EHCache, OSCache,and Hazelcast.

MyBatis has two layers of caching:

Local Cache Local Cache is always enabled.

It has two Scopes , Session and Statement where Session is default.It is actually a MAP which contains below Key and Value.

key = (mybatis-namespace + stmt-name) + (raw sql including parameter placeholders) + (actual SQL parameter values)

value = (list of Java objects resulting from that query)

When localCacheScope=STATEMENT then the cache is cleared at the end of each MyBatis statement.

When localCacheScope=SESSION, then the cache is cleared:

  • at the end of the current transaction (or end of each statement when autoCommit=true)
  • whenever any insert/update/delete statement is executed

Second Level Cache

  • Shares data between transactions
  • By default, returns a copy of the cached object created via serialize/deserialize – which requires all cacheable objects to implement Serializable
  • Can hook into ‚Äúenterprise‚ÄĚ caching systems, or use a simple¬†in-memory¬†cache. Thein-memory¬†approach works only when the DB is exclusively updated by a single process

By default, flushes the entire cache whenever an <insert>, <update> or <delete> MyBatis statement is executed.

Keys cache entries by the same key for the local cache, ie a string built from (mybatis- namespace + stmt-name) + (raw sql) + (actual parameter values)


Local Cache stores data till duration of transaction, hence it is good.However it wont be much helpful with optimizing read-only or master data.For optimization, Second level cache should be used.

Transaction Management with Mybatis-Spring

It uses existing DataSourceTransactionManager from Spring.

It can be used using Spring’s @Transactional annotation.

Container Managed Transactions

Leave Responsibility of transaction management with J2EE Container

Programatic Transaction Management

Spring will handle your transaction (Sample code below, how to handle transactin)

DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); TransactionStatus status = txManager.getTransaction(def);

try { userMapper.insertUser(user);

// Inserting into table using Mybatis Mapper


catch (MyException ex) { txManager.rollback(status); throw ex;