A sample Vagrantfile to install ems, oracle, and bpm

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The “2” in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don’t change it unless you know what
# you’re doing.
Vagrant.configure(“2”) do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.

# Every Vagrant development environment requires a box. You can search for
# boxes at https://atlas.hashicorp.com/search.
config.vm.box = “bento/centos-7.2”
config.vm.synced_folder “d:/software/dev_tools/BPM/bpm4.0/TIB_amx-bpm_4.0.0_linux24gl23_x86_64”, “/vagrant/bpm_install”
config.vm.synced_folder “d:/software/dev_tools/BPM/EMS8.2.2”, “/vagrant/ems_install”
config.vm.synced_folder “d:/software/dev_tools/oracle/12c/linux64/database”, “/vagrant/oracle_install”
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing “localhost:8080” will access port 80 on the guest machine.
# config.vm.network “forwarded_port”, guest: 80, host: 8080

# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network “private_network”, ip: “”

# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
config.vm.network “public_network”

# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder “../data”, “/vagrant_data”

# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
config.vm.provider “virtualbox” do |vb|
vb.memory = “6144”

# View the documentation for the provider you are using for more
# information on available options.

# Define a Vagrant Push strategy for pushing to Atlas. Other push strategies
# such as FTP and Heroku are also available. See the documentation at
# https://docs.vagrantup.com/v2/push/atlas.html for more information.
# config.push.define “atlas” do |push|
# end

# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
config.vm.provision “initialize”, type: “shell”, path: “scripts/initialize.sh”

#config.vm.provision “ems_install”, type: “shell”, path: “https://gist.githubusercontent.com/yonglai/caa8e8497a3640e23e93c61def9691ab/raw/f7e1daf08feb2abc98259574fdb1fea4960fb50f/ems_install.sh”
config.vm.provision “ems_install”, type: “shell”, path: “scripts/ems_install.sh”, privileged: false

config.vm.provision “ems_startup”, type: “shell”, path: “scripts/ems_startup.sh”

config.vm.provision “pre_oracle_install”, type: “shell”, path: “scripts/pre_oracle_install.sh”

config.vm.provision “oracle_install”, type: “shell”, path: “scripts/oracle_install.sh”

config.vm.provision “post_oracle_install”, type: “shell”, path: “scripts/post_oracle_install.sh”

config.vm.provision “bpm_install”, type: “shell”, path: “scripts/bpm_install.sh”, privileged: false

config.vm.provision “bpm_pre_config”, type: “shell”, path: “scripts/bpm_pre_config.sh”, privileged: false

config.vm.provision “bpm_config”, type: “shell”, path: “scripts/bpm_config.sh”, privileged: false

config.vm.provision “bpm_startup”, type: “shell”, path: “scripts/bpm_startup.sh”


To run:

vagrant up
vagrant provision –-provision-with initialize
vagrant reload
vagrant provision –-provision-with ems_install,ems_startup,pre_oracle_install,oracle_install
(wait for oracle install to complete)
vagrant provision –-provision-with post_oracle_install,bpm_studio_install,bpm_install,bpm_pre_config,bpm_config
vagrant provision –provision-with bpm_startup
vagrant provision –provision-with cleanup
vagrant provision –provision-with prepare_for_packaging

Fix TIBCO BPM error: RecoveryController – Recovery error javax.transaction.xa.XAException

Error details:

[TxRecoveryThread: java:DataSourceBDS] [ERROR] RecoveryController – Recovery error javax.transaction.xa.XAException at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:709)

This is caused by Post-Installation task to configure transaction recovery has not bee completed.

Procedure 1. Connect to the Oracle database server as a user that has SYSDBA system privilege. For example: SQL > connect sys/password as sysdba 2. Execute the following SQL statements: GRANT SELECT ON sys.dba_pending_transactions TO user GRANT EXECUTE ON sys.dbms_xa TO user GRANT SELECT ON sys.dba_2pc_pending TO user where user is the name of the BPM database user

TIBCO diagnose

Please provide the initial information so that we may begin investigation.


1) Is this a new installation or has this been previously started successfully?


2) What is the topology of this environment?  HA / Single Node etc.


3) Please provide the log files from the tibcohost, SystemNode and BPMNode:







4) Please provide output from the following commands:




tibcohost describeNodes

tibcohost getNodeStartMode -nodeName BPMNode1 tibcohost getNodeConfigurationProperties -nodeName BPMNode1


). Try starting the node directly using node executable file with “–debug” and capture the output.


Navigate to <CONFIG_HOME>\tibcohost\<INSTANCE>\data_3.2.x\nodes\BPMNode01\bin

Now execute the “tibamx_<<nodename>> –debug”

use nodeutil to clean up BPM application

Stop all BPM nodes.

1.Find the bpm-db-clean utility under


2. Run: ant -Dapplication.name=[app name] -Dmajor.version=[version]

ex.ant -Dapplication.name=GARProcess -Dmajor.version=

(here you need to check the version setting in build.xml application.version to make sure it is not hard coded)

This command will generate a couple of sql scripts that you will run later by logging in bpm app database

3. Find nodeutil under  TIBCO_HOME\amx\version\bin\nodeutil

4. Run nodeutil to cleanup (you can run using removeApplication or removeComponents)

ex. ./nodeutil removeComponents -applicationName GARProcess -includeEndpoints -nodeName BPMNode01 -tibcoHostInstanceFolder /opt/tibco/amx-bpm/data/tibco/data/tibcohost/Admin-BPM-BPM/ (-dryRun)

5. Logging in bpm app database, run all the generated sql script starting with ‘delete…’.

Start BPM nodes.

Force delete the application.

Add VIM plug in Tibco Studio

If you are behind corporate proxy, you first need to make sure the network setting in Studio is set to ‘Manual’ both HTTP and HTTPS are updated to use corresponding proxy .

  1. Click top menu ‘Help – Install New Software’
  2. In the pop up dialog, click Add button,
    in the location text box, type ‘http://vrapper.sourceforge.net/update-site/stable&#8217;,
    in the name text box, type ‘vrapper’
  3. The vrapper will appear in the list box below, select it and install.

sample auto run script for bpm

# chkconfig: 345 99 9
# description: EMS auto start-stop script.
# Set TIBCO_HOME to the location of the BPM config directory
# Set OWNER to the user id under which bpm will run


if [ ! -f “$TIBCO_HOME/tibcohost” ]
echo “BPM startup: cannot start”

case “$1” in
# Start BPM
su $OWNER -c “./tibcohost spawn > /home/bpmadm/logs/start_bpm.log” &
touch /var/lock/subsys/bpm
# Stop BPM
su $OWNER -c “./tibcohost stop -wait true”
rm -f /var/lock/subsys/bpm