Sunday, April 15, 2018

Throttling in OSB 11g - with Work Managers

There are few legacy systems which will not be able to handle too much of load simultaneously. In that cases we need to throttle our system not to send too much requests in parallel.

In OSB, we have 2 different approach to handle this situation.
1. Enable Throttling in Business service.
2. Use custom work manager in Proxy Service.

Throttling in Business Service:

We have an Out-of-box configuration in Business service, where you can just enable the throttling by just check box and configure the values.

But its not available in during the design time, so once the code is deployed to sbconsole. Please follow the below steps to configure the same.

1. Login to Sbconsole.
2. Go to Project Explorer and select the Business service you want to throttle.
3. Select Operational Settings tab.
4. In this tab, under Throttling, select the Enable check box.

  • Maximum Concurrency - Number of parallel request to that service.
  • Throttling Queue - to backlog messages that has exceeded the message concurrency limit
  • Message Expiration - Specify the number of milliseconds that a message can spend in Throttling Queue. The message will be erased after specified time. (It is a optional field) If the message expiration is set to "0" , the message will never expire.














Note: The Queue is a cache memory, so if the server crashes or restarts the messages stored in Throttling queue will be lost.

Throttling Using Proxy service: 

So the Better the option to handle throttling will be work managers along with Proxy Service.
Follow the below steps to create work manager,

1. Login to Console.
2. Select Work Managers.


3. Click on New.
 4. Select Work Manager.
 5. Name the Work Manager and select the targeted server.
 6. Now Click on the Custom Work Manger you have created.
 7. Select "New" on Maximum Thread constraint.
 8. Specify the number of thread you wish to use.
9. Now Activate the session.
 10. Login to Sbconsole and navigate to the Proxy Service.

11. Select the "dispatch-policy" under HTTP Transport Configuration and activate the session.

Note: In this case, the throttling will happen at the proxy service layer itself. So there wont be any message loss.


Friday, April 13, 2018

Create Custom Xpath function in OSB - SOA 11g

In this post, we are going to see how to create Custom Xpath function for OSB 11g. I'm going to take a example of replicating the XREF functions which are available in BPEL,but not in OSB.
The Custom Xref functions are created using a Java Code and deployed into our Server. After restarting the Server, Xref functions will be available in sbconsole. The available Xref Functions will be 
  • populateXrefRow(),
  • deleteXrefRow(),
  • lookupXRef(),
  • lookupXRef1M().
STEPS:
  1.  All the Cross reference values will be stored in XREF_DATA inside SOA_Infra Schema(Or we can change the schema location, Please find the SQL below to create tables in desired schema).  So In Java code we will be connecting to the database(via DataSource) and will retrieve the corresponding values.
  2. Please verify data source “jdbc/SOADataSource” is available and connecting to the schema (which has Xref_data table).
  3. And For Connecting to Database we need a external Jar(ojdbc6.jar and weblogic.jar) to be Imported inside your java Project. It can be imported like, Right click on the Project ->Java Build Path ->Add Jar.
  4. Implement the Java code which will contain the four below functions. (Code attached Below)
  5. Once the code is compiled successfully, we need to export the Java Code as “JAR” file and Copy the Jar File into $OSB_HOME/config/xpath-functions.
  6. Now Create a XML File which will contain the namespace,Class and function name,etc., Like attached (CustomXrefFunctions.xml),
  7. After Placing the XML file in the Same location ($OSB_HOME/config/xpath-functions), Restart the Server. Then Xref functions will be available in the sbconsole.

SQL Statements to create XREF Tables (If you are not planning to use default schemas)

CREATE TABLE XREF_DATA
(
    XREF_TABLE_NAME VARCHAR2(2000) NOT NULL,
    XREF_COLUMN_NAME VARCHAR2(2000) NOT NULL,
    ROW_NUMBER VARCHAR2(48) NOT NULL,
    VALUE VARCHAR2(2000) NOT NULL,
    IS_DELETED VARCHAR2(1) NOT NULL,
    LAST_MODIFIED TIMESTAMP NOT NULL
);
ALTER TABLE XREF_DATA
    ADD CONSTRAINT XREF_DATA_PK PRIMARY KEY (XREF_TABLE_NAME, XREF_COLUMN_NAME, VALUE);

CREATE INDEX XREF_ROW_NUMBER ON XREF_DATA
    (ROW_NUMBER );

CREATE INDEX XREF_VALUE ON XREF_DATA
    (VALUE );

JAVA Code:


Thursday, April 12, 2018

How to Copy Files/Folders from one server to another remote server in Linux

We can use scp command to copy files and folders from one server to another server. Below is the syntax for scp command.

scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 ...[[user@]host2:]file2

scp stands for secure cp (copy), which means you can copy files across ssh connection, it uses the port 22 by default.

  • Copy File from Server 1 to Server 2, assuming you already logged in to server 1.
scp /path/of/file username@serverhost:/path/to/destination
example: scp /tmp/sample.txt user1@122.1.1.197:/tmp/sampledirectory/

  • Copy folders from Server 1 to Server 2, assuming you already logged in to server 1.

scp -r /path/of/source-folder user@server:/path/to/destination-folder/
example: scp -r /tmp/somedirectory user1@122.1.1.197:/tmp/sampledirectory/
Note: -r Recursively copy entire directories.

  • Copy specific files under a folder from Server 1 to Server 2, assuming you already logged in to server 1.
scp /path/of/source-folder/*.txt user@server:/path/to/destination-folder/
example: scp /tmp/sample/*.txt user1@127.1.1.197:/home/sample/


How to use wildcard character for namespace in XSLT 1.0

XSLT 1.0

We can't use wildcard characters (*) for namespace directly in XSLT 1.0, but there is a different way of representing wildcard character like below.

ns1:sample/ns1:test/ns1:input is equivalent to ns1:sample/ns1:test/*[local-name() = 'input']

ns1:sample/ns1:test/ns1:input is equivalent to ns1:sample/*[local-name() = 'test']/*[local-name() = 'input']

But XLST 2.0 supports wildcard character as below as it is like ns1:sample/*:test/*:input