There are a lot of moving parts associated with the BRM Pipeline. Installing it can be very difficult. This blog should remove some of the obstacles you face in installing and configuring BRM pipeline.
Before we get into the installation there are a few important points to consider about Pricing Center (PC). First, the pipeline has it’s own schema where it locates and stores pipeline pricing information. PC makes a direct connection to this schema; bypassing CM and DM_ORACLE. The PC gets the pipeline connection properties from an extension of /config object or /config/pricing_admin. This database object, PRICING_ADMIN_CONFIG_INFO_T, is created and populated using a BRM (PIN) setup script located in the $PIN_HOME/setup/scripts directory. The pipeline connection password is encrypted using AES encryption. DM_ORACLE needs to be configured properly to encrypt and decrypt this password. This blog will take you through this and other key installation steps needed to run the pipeline in BRM.
The basic steps are quite simple. However each step has several environmental traps you can fall into if you are not careful. I will list the steps and then break them down into more detail below.
1. Run the pipeline installation scripts
2. Execute the pipeline database setup scripts
3. Setup DM_ORACLE for AES encryption
4. Create the IFW Database Connection object; /config/pricing_admin.
5. Add pricing center permissions.
Run Pipeline Installation Scripts
The BRM and Pipeline code can be downloaded from the http://edelivery.oracle.com/. You will need to find and select Oracle Communication Applications and the platform you’re using. The download you need is located in Oracle Communications Billing and Revenue Management Media Pack.
After you download the file, unzip the file into a staging directory and create a user called IFW. You may want to create a user like IFW74, if you have different versions of the pipeline installed on your server.
Depending on the version and platform you should see a installation file called like this:
7.4_Pipeline_linux_64_opt.bin
Execute this file as the IFW user. The installation uses X-windows so on you may need to run the following command as the root user before you’ll see the installation UI.
xhost +
Likewise, be sure you have turned on X-windows for you IFW users. This can be done by setting the following environment variable
export DISPLAY=:1.0
Specify the location of the IFW installation directory and allow the installation to complete. This installation is just unpacking files into your installation directory. To set up the IFW user, you can execute one of these environment scripts.
source.me.csh
source.me.sh
These files are located in the IFW installation directory, $IFW_HOME. I recommend merging the contents of this file with your login profile scripts. On linux that may be the .bash_profile file located in the IFW default user home directory.
Execute The Pipeline Database Setup Scripts
There are 4 IFW database scripts and 5 JSA database setup scripts you will need to run. These are located in the $IFW_HOME/database/Oracle/Scripts directory and they are called:
ifw_Tablespaces.sql ifw_Create.sql ifw_Roles.sql ifw_Synonyms.sql
JSA_Tablespaces.sql JSA_Create.sql JSA_Roles.sql JSA_Synonyms.sql JSA_Prepare.sql
Three important tables need to be populated correctly; JSA_USER, JSA_MODULES and JSA_USERRIGHT. Running the setup script, pricing_admin.pl script as describe below, can do this for you, but it requires SYSDBA access to do so. A DBA can use the scripts in the Appendix to populate them with data. Be sure to edit them first with schema names you picked.
Setup DM_Oracle for AES encryption
As the pin user create an AES encryption key using the following application:
pin_crypt_app -genkey
This will create an output that looks like this:
Generation of Encrypted AES key is successful Encrypted key is --->&aes|0D5E11BFDD97D2769D9B0DBFBD1BBF7E29943F470AE3525E8BFDE27A5F7ED93AF0C343CF7CE98A5255D38D903FA8820<---
Copy the lines between the —> and <—- and place them into the sys/oracle/pin.conf file as shown:
- crypt aes| ${PIN_HOME}/lib/${LIBRARYPREFIX}pin_crypt_aes4dm${LIBRARYEXTENSION} "&aes|0D5E11BFDD97D2769D9B0DBFBD1BBF7E925A04A595DD6EEF9FEC7453C1C83C7C0BD82702ABFE9CB01C7D39F9D56"
Do not copy the key I used here. Substitute the key for the one you created with the pin_crypt_app. Bounce the CBRM using stop_all and start_all and make sure the DM_Oracle comes up again.
Create the IFW Database Connection object; /config/pricing_admin
Locate the pin.conf file in the $PIN_HOME/setup/scripts directory
Edit the following entries to contain the proper IFW connection information
- pipeline login_name IFW74
- pipeline login_pw IFW74
- pipeline port 1521
- pipeline db_type oracle
- pipeline db pindb
- pipeline admin system
- pipeline admin_pw manager
- pipeline db_alias pindb
Run the pricing admin_perl script using the following command line:
perl pricing_admin.pl -init
This will use the values in the pin.conf file and create and populate the PRICING_ADMIN_CONFIG_INFO_T table in the PIN DB schema. Allow this perl script to set the AES encryption directly. If you try to do this with direct sql updates, this will cause problems with DM_ORACLE when it tries to read the object. Allow DM_ORACLE to encrypt the password. DM_ORACLE will decrypt the password before it passes it to client application through the CM.
This perl script will also create the JSA USER and roles in the JSA tables and schema. In order for it to do this you must give it a sysdba admin user and password. The perl script creates the user, creates synonyms and grants the user permissions to create tables, views, indexes, etc. This may not be acceptable in some organizations. The appendix contains scripts that can be used by a DBA to do this according to corporates policies and procedures.
Add Pricing Center Permissions
Using Customer Center or Permission Center add the following read/write permissions to the root.0.0.0.1 user:
/pricingcenter/databaseaccess
/pricingcenter/filesystemaccess
/appcenter/pricingcenter
/loadpricelist/access
/appcenter/provisioningtags
/appcenter/pcenter
Test the configuration by bringing up the Pricing Center. Verify that you have access to the pipeline configuration tools in the pricing center.
Troubleshooting Pricing Center
If you may get the error message “Unable to connect to the pipeline database. Please contact your administrator”. when starting up Pricing Center, check to be sure you can connect to the Pipeline database using the connection properties specified in the config/pricing_admin object.
You may also get this error message if you can log into the pipeline database, but the user cannot access the JSA_USER, JSA_MODULE, or JSA_USERRIGHT tables.
Appendix A. SQL Scripts for JSA_USER
Insert into JSA_USER (USER_ID,LEADER_ID,ACTIVE,LOGIN,USR_FIRSTNAME,USR_LASTNAME,USR_AUTHID,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (0,null,1,'JSA','Default','JSA ADMIN',null,to_timestamp('16-MAR-10','DD-MON-RR HH.MI.SSXFF AM'),0,null,null,1,0);
Insert into JSA_USER (USER_ID,LEADER_ID,ACTIVE,LOGIN,USR_FIRSTNAME,USR_LASTNAME,USR_AUTHID,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (100,null,1,'IFW74','Default','IntegRate DB Admin',null,to_timestamp('16-MAR-10','DD-MON-RR HH.MI.SSXFF AM'),0,null,null,1,0);
Appendix B. SQL Scripts for JSA_USERRIGHT
Insert into JSA_USERRIGHT (USER_ID,MODULE_ID,CANINSERT,CANUPDATE,CANDELETE,CANREAD,CANPRINT,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (100,102,1,1,1,1,1,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,1,0);
Insert into JSA_USERRIGHT (USER_ID,MODULE_ID,CANINSERT,CANUPDATE,CANDELETE,CANREAD,CANPRINT,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (100,104,1,1,1,1,1,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,1,0);
Insert into JSA_USERRIGHT (USER_ID,MODULE_ID,CANINSERT,CANUPDATE,CANDELETE,CANREAD,CANPRINT,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (100,105,1,1,1,1,1,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,1,0);
Insert into JSA_USERRIGHT (USER_ID,MODULE_ID,CANINSERT,CANUPDATE,CANDELETE,CANREAD,CANPRINT,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (100,106,1,1,1,1,1,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,1,0);
Insert into JSA_USERRIGHT (USER_ID,MODULE_ID,CANINSERT,CANUPDATE,CANDELETE,CANREAD,CANPRINT,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (100,107,1,1,1,1,1,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,1,0);
Insert into JSA_USERRIGHT (USER_ID,MODULE_ID,CANINSERT,CANUPDATE,CANDELETE,CANREAD,CANPRINT,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (100,108,1,1,1,1,1,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,1,0);
Insert into JSA_USERRIGHT (USER_ID,MODULE_ID,CANINSERT,CANUPDATE,CANDELETE,CANREAD,CANPRINT,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (100,109,1,1,1,1,1,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,1,0);
Insert into JSA_USERRIGHT (USER_ID,MODULE_ID,CANINSERT,CANUPDATE,CANDELETE,CANREAD,CANPRINT,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (100,110,1,1,1,1,1,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,1,0);
Insert into JSA_USERRIGHT (USER_ID,MODULE_ID,CANINSERT,CANUPDATE,CANDELETE,CANREAD,CANPRINT,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (100,111,1,1,1,1,1,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,1,0);
Insert into JSA_USERRIGHT (USER_ID,MODULE_ID,CANINSERT,CANUPDATE,CANDELETE,CANREAD,CANPRINT,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (100,112,1,1,1,1,1,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,1,0);
Insert into JSA_USERRIGHT (USER_ID,MODULE_ID,CANINSERT,CANUPDATE,CANDELETE,CANREAD,CANPRINT,ENTRYDATE,ENTRYBY, MODIFDATE,MODIFBY,MODIFIED,RECVER) values (100,113,1,1,1,1,1,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,1,0);
Appendix C. SQL Scripts for JSA_MODULES
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED, RECVER) values (100,'accessmanagement','accessmanagement','accessmanagement',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (101,'toolbarconfiguration','toolbarconfiguration','toolbarconfiguration',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (102,'databasebrowser','databasebrowser','databasebrowser',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (103,'bulletinboard','bulletinboard','bulletinboard',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (104,'IntSmacc.Product','IntSmacc.Product','IntSmacc.Product',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (105,'IntSmacc.Mapping','IntSmacc.Mapping','IntSmacc.Mapping',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (106,'IntSmacc.Zone','IntSmacc.Zone','IntSmacc.Zone',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (107,'IntSmacc.Rating','IntSmacc.Rating','IntSmacc.Rating',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-00','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (108,'IntSmacc.Time','IntSmacc.Time','IntSmacc.Time',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (109,'IntSmacc.Interconnection','IntSmacc.Interconnection','IntSmacc.Interconnection',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (110,'IntSmacc.Discount','IntSmacc.Discount','IntSmacc.Discount',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (111,'IntSmacc.Aggregate','IntSmacc.Aggregate','IntSmacc.Aggregate',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (112,'IntSmacc.UniversalMapping','IntSmacc.UniversalMapping','IntSmacc.UniversalMapping',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);
Insert into JSA_MODULE (MODULE_ID,MODULENAME,NAME,DESCRIPTION,ENTRYDATE,ENTRYBY,MODIFDATE,MODIFBY,MODIFIED,RECVER) values (113,'IntSmacc.MISC','IntSmacc.MISC','IntSmacc.MISC',to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),100,to_timestamp('25-AUG-09','DD-MON-RR HH.MI.SSXFF AM'),null,1,0);