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 12.2.1.3 @ 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 (12.2.1.2.0).”

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

To open same app in same Jdev, open Jws file

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

and comment it

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

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

 

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

Caching

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)

Conclusion

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;