Wednesday, April 16, 2014

oracle.webservices.preemptiveBasicAuth for invoking the webservices with Basic Authentication- Oracle SOA 11g

HTTP basic authentication can have two types of authentication handshake methods, one is Reactive another one is Preemptive,

Reactive:
  • The client makes a request for a resource which needs authentication;
  • The server returns an HTTP 401 Authorization required response (indicating the authentication scheme and realm) with WWW-Authenticate header.
  • The client re-submits the request with an Authentication header;
  • The server verifies client credentials and returns the resource if authenticated successfully..

Preemptive:

The client can preemptively pass the credentials on the first request. The server returns immediately the resource if authenticated successfully.

Not all the authentication server accepts the Preemptive authentication mode, The NTLM authentication will not support the Preemptive handshake method it should be Reactive.

In Oracle SOA 11g the parnerlink binding property oracle.webservices.preemptiveBasicAuth will help us to set the handshake method accordingly.
  • oracle.webservices.preemptiveBasicAuth=false - Reactive mode
  • oracle.webservices.preemptiveBasicAuth=true - Preemptive mode

While invoking the service with NTLM authentication the value for the property oracle.webservices.preemptiveBasicAuth should be set as false along with the Basic authentication header properties oracle.webservices.auth.username and oracle.webservices.auth.password.



Tuesday, April 15, 2014

Response is displayed in compressed form while testing the Siebel webservices from SOAP UI

When i am trying to test the Siebel web services from SOAP UI the response is displayed in compressed form, seems the response is return in compressed for(i am not sure this is part of some Siebel configuration)


To display the response in decompressed form, make sure the option "Accept compressed responses from hosts" option in SOAP UI preference.



Monday, April 14, 2014

Backing up the MDS Repository Artifacts - Oracle SOA 11g

In oracle SOA 11g, all the common artifacts , the deployed composites and the common configurations are stored in the MDS database schema. Sometimes there is a possibility of MDS schema getting corrupted (the best example is the composites getting corrupted frequently)those scenario we will not be able to bring up the soa-infra and also we may loose all the deployments.

Backing up the MDS artifacts is the the solution for these kind of issues.

In this post i will be explaining some of the different options to back up the MDS artifacts.

The best approach is do a full back up of MDS repository schema using database backup utilities(dbexp).The backup can be restored if there is any issue with the MDS schema.

EM console - MDS configuration Page :
Right click on soa-infra and click on Administration and MDS Configuration.
Click Export on MDS Configuration page.


This will export the MDS artifacts to local machine as zip file.


WLST script:

The MDS artifacts also can be exported through WLST script, the exportMetaData command will help us to export the MDS artifacts.

Steps:-
Login to SOA server through putty
Execute $ORACLE_HOME/common/bin/wlst.sh then execute connect() and provide the server details.


After successful connection to ServerConfig execute the below command - Change the export path accordingly.

exportMetadata(application='soa-infra', server='AdminServer',toLocation='/reuters/oracle/as01/mds/soa_mds.jar',docs='/**')

This will export the MDS artifacts as jar file to the specified location.



Wednesday, April 9, 2014

BINDING.JCA-11822 JPublisher error occurred.

Sometimes you may receive the following exception in DBAdapter wizard while regenerating the adapter configuration for the option "Call a Stored Procedure or Function".

BINDING.JCA-11822
JPublisher error occurred.
An error occurred while running JPublisher.
An error occurred when JPublisher was invoked: ERROR: missing method.
Analyze the error and correct if possible. Contact oracle support if error is not fixable.

at oracle.tip.adapter.db.sp.xsd.oracle.JPublisher.findWrapperProcedureName(JPublisher.java:222)
at oracle.tip.tools.ide.adapters.designtime.adapter.db.sp.ProcedureObject.setWrapperInfo(ProcedureObject.java:256)
at oracle.tip.tools.ide.adapters.designtime.adapter.db.sp.oracle.DBAdapterStoredProcPage.loadProcedureBrowseDialog(DBAdapterStoredProcPage.java:213)
at oracle.tip.tools.ide.adapters.designtime.adapter.db.sp.AbstractStoredProcPage.browseProcButton_actionPerformed(AbstractStoredProcPage.java:369)
at oracle.tip.tools.ide.adapters.designtime.adapter.db.sp.AbstractStoredProcPage$1.actionPerformed(AbstractStoredProcPage.java:197)


The exception will be thrown while browsing the procedure in the wizard and the procedure has one of the following RECORD, TABLE, or BOOLEAN as input/output type.


The issue seems to be the caching issue with the JDeveloper.
The issue has been resolved by just closing and opening the JDeveloper and regenerating the Adapter configuration.


Tuesday, April 8, 2014

Dynamic where condition in DB Adapter - Query By Example

Sometime we may have the scenario to query the data in a table with dynamic where condition through DB Adapter in Oracle SOA 11g.
The Query by Example option in the DB Adapter provides the option to construct the where condition dynamically based on the input data provided.Query-by-example uses the AND operator to tie the input attributes together to form the where condition.



For example when we are defining the Query By Example option for the Employee table the adapter will consider the Employee object as input and returns the Employee Object list.


If we are invoking the Adapter without passing the value for any of the attribute the adapter will return all the Employee records that is the query will be executed without where condition(SELECT EMPNO, EMPNAME, EMPAGE, DEPNAME, CONTACTNO FROM EMPLOYEE).


If we are setting value for the attributes , the attributes will be added into the where condition of the query connected by the AND operation(SELECT EMPNO, EMPNAME, EMPAGE, DEPNAME, CONTACTNO FROM EMPLOYEE WHERE ((EMPNO = ?) AND (EMPNAME = ?))) and the adapter will returns the records satisfied by the condition.


Saturday, April 5, 2014

Oracle Cloud Adapter for Salesforce.com - Oracle SOA Suite

Oracle introduces the Cloud Adapter for Salesforce.com as the extension of Oracle SOA Suite and this is certified only with the version 11.1.1.7.0.This will help the customers to integrate with the the Salesforce.com cloud easily.

When integrating the Salesforce.com via web service integration the main concerns are the Security management and the Session management.The web service integration requires more manual configurations, we have to connect to the Enterprise login with the authentication details to get the token values then using the token we have to do a API call to perform the operations in Salesforce.Oracle Cloud Adapter for Salesforce.com provides Intelligent Session management and security management and also provides a GUI to perform all the configurations.



Oracle Cloud Adapter for Salesforce.com will simplifies the cloud integration by reducing the manual integration processes and maintenance costs by introducing a standardized wizard-based solution for integrating applications.By dramatically reducing the number of manual and customized steps with Oracle Cloud Adapter for Salesforce.com, integration development time can be reduced by half when compared to traditional methods.

The Oracle Cloud Adapter for Salesforce.com allows seamless connection of different systems to Salesforce.com. It uses the Oracle SOA Suite to communicate with Salesforce.com leveraging the SOAP API of Salesforce and supports all the major operations of SOAP API for standard as well as custom objects

The Oracle Cloud Adapter for Salesforce.com supports the previous six versions of Salesforce.com starting from the current version. The list of supported Salesforce.com Editions is given below:
  •  v24 
  •  v25 
  •  v26 
  •  v27 
  •  v28 
  •  v29 
Refer the below urls for more details:

Thursday, April 3, 2014

Getting the Messaging Bridge Runtime Details through Java - Weblogic

The below java jmx code will help us to get the run time details of the messaging bridge in weblogic server.

import java.util.Hashtable;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.naming.Context;

public class GetMessageBridgeStatus {
    private static MBeanServerConnection connection;
    private static JMXConnector connector;
    public static void  getMessageBridgeStatus() {
        try
        {
                getRuntimeMBeanServerConnection();
                String son = "com.bea:ServerRuntime=AdminServer,Name=Bridge-0,Location=AdminServer,Type=MessagingBridgeRuntime";
                ObjectName service = new ObjectName(son);
                String status = connection.getAttribute(service,"State").toString();
                System.out.println("Status: "+status);
         
                String description = connection.getAttribute(service,"Description").toString();
                System.out.println("Descrption: "+description);
       
        }catch(Exception e) {
           e.printStackTrace();
        }
         
    }
    public static void getRuntimeMBeanServerConnection()  throws Exception{
          String jndiroot = "/jndi/";
          String mserver = "weblogic.management.mbeanservers.domainruntime";
          JMXServiceURL serviceURL = new JMXServiceURL("t3", "localhost", 8000,jndiroot + mserver);
          Hashtable h = new Hashtable();
          h.put(Context.SECURITY_PRINCIPAL, "weblogic");
          h.put(Context.SECURITY_CREDENTIALS, "welcome1");
          h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,"weblogic.management.remote");
          connector = JMXConnectorFactory.connect(serviceURL, h);
          connection = connector.getMBeanServerConnection();
    }
 
    public static void main(String[] args) {
        getMessageBridgeStatus();
    }
 
}


Include the wlfullclient.jar file in the class path(Refer the following post http://www.albinsblog.com/2012/07/creating-wlfullclientjar-weblogic.html to generate the wlfullclient.jar )